slot_strings = {[0] = "EMPTY", [1]="WEAPON", [2]="DRIVE", [3]="ORE"} on_timer_expired = nil function print_slots() local s = get_slots() print("Slot contents:") for i=1,#s do print(" "..slot_strings[s[i]]) end print("end.") end function count_ore() local s = get_slots() local num = 0; for i=1,#s do if(s[i]==3) then num = num+1 end end return num end -- Mine until the requested number of ores has been reached function mine_until_ore(n) local yield = coroutine.yield continue_mining = coroutine.wrap(function() -- Save the old mining handler local old_mining_handler = on_mining_complete on_mining_complete = continue_mining while(count_ore() < n) do mine() yield() end on_mining_complete = old_mining_handler end) continue_mining() end function build_stupid_ships() local yield = coroutine.yield; print("Starting.") on_mining_complete = continue; on_build_complete = continue; on_manufacture_complete = continue; on_transfer_complete = continue; on_undocking_complete = continue; print("Set handler.") while true do print("Starting to mine"); slots = {} for i=1,6 do print("Mining number " .. i) slots[i] = mine(); yield(); end print("Mining done."); print("Building ship."); ship = build_ship(slots[1], slots[2], slots[3], slots[4], slots[5], slots[6]); yield(); print("Ship built!"); slots = {} for i=1,6 do print("Mining for drive " .. i); slots[i] = mine(); yield(); print("Building drive " .. i); manufacture(slots[i], DRIVE); yield(); print("Mounting drive " .. i); transfer_slot(slots[i], i); yield(); end print("Uploading software."); send_data("on_being_undocked = function() \ xmin, xmax, ymin, ymax = get_world_size(); \ x = xmin + math.random(xmax-xmin); \ y = ymin + math.random(ymax-ymin); \ set_autopilot_to(x,y); \ print(\"Launching towards \"..x..\", \"..y);\ end"); --send_data("on_being_undocked = function() set_autopilot_to(15000, 86000); end") --send_data("on_autopilot_arrived = function() target=find_closest(2000, PLANET); colonize(target); end") --send_data("on_colonize_complete = function() print(\"I am now a colony!\"); end") send_data("on_timer_expired = nil"); print("All done. Undocking."); undock(); yield(); end end start_building_ships = function() continue = coroutine.wrap(build_stupid_ships); continue(); end stop_building_ships = function() continue = nil end -- Das hier einkommentieren, um diesen code beim starten automatisch auszuführen. -- start_building_ships();
Der Code mit dem Z0ttel seine Schiffchen rumschubst - enthält ein Framework um einfacher Schiffe zu bauen.
5 Aufklärungsschiffchen bauen sieht damit so aus:
for i = 1, 5 do -- Schiff mit drei Slots bauen action.make(SHIP, 3) -- Dem Schiff ein Triebwerk mitgeben -- Gebaut wird das Triebwerk automatisch als Abhängigkeit. action.transfer(DRIVE, 1, function() -- Dem Schiff den Code mitgeben und als Persönlichkeit/Rolle "probe" starten. infect("probe") end) -- Schiff abdocken lassen action.undock() end