Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local drone = component.proxy(component.list("drone")())
- local dbg = component.proxy(component.list("debug")())
- local net = component.proxy(component.list("modem")())
- net.open(2412)
- local eventStack = {}
- local listeners = {}
- event = {}
- function event.listen(evtype,callback)
- if listeners[evtype] ~= nil then
- table.insert(listeners[evtype],callback)
- return #listeners
- else
- listeners[evtype] = {callback}
- return 1
- end
- end
- function event.ignore(evtype,id)
- table.remove(listeners[evtype],id)
- end
- function event.pull(filter)
- if not filter then return table.remove(eventStack,1)
- else
- for _,v in pairs(eventStack) do
- if v == filter then
- return v
- end
- end
- repeat
- t=table.pack(computer.pullSignal())
- evtype = table.remove(t,1)
- if listeners[evtype] ~= nil then
- for k,v in pairs(listeners[evtype]) do
- local evt,rasin = pcall(v,evtype,table.unpack(t))
- if not evt then
- print("stdout_write","ELF: "..tostring(evtype)..":"..tostring(k)..":"..rasin)
- end
- end
- end
- until evtype == filter
- return evtype, table.unpack(t)
- end
- end
- function print(...)
- local args=table.pack(...)
- pcall(function() net.broadcast(2412, table.unpack(args)) end)
- end
- function sleep(n)
- local t0 = computer.uptime()
- while computer.uptime() - t0 <= n do computer.pushSignal("wait") computer.pullSignal() end
- end
- while true do
- net.open(2412)
- local _, _, _, port, _, player, pass, numRockets = event.pull("modem_message")
- if port == 2412 and pass == "preppux872" then
- net.close(2412)
- local numRocketsUsed = 0
- playerObj = dbg.getPlayer(player)
- playerX, playerY, playerZ = playerObj.getPosition()
- droneXO = dbg.getX()
- droneYO = dbg.getY()
- droneZO = dbg.getZ()
- drone.move(0, 256-droneYO, 0)
- while drone.getOffset() ~= 0 do
- sleep(0.001)
- end
- ::trackTarget::
- drone.setAcceleration(0.5)
- while drone.getOffset() ~= 0 do
- if drone.getOffset() < 1 then
- break
- end
- playerX, playerY, playerZ = playerObj.getPosition()
- droneX = dbg.getX()
- droneY = dbg.getY()
- droneZ = dbg.getZ()
- offsetXP = playerX - droneX
- offsetZP = playerZ - droneZ
- drone.move(offsetXP, 0, offsetZP)
- offsetXP = 0
- offsetZP = 0
- sleep(0.5)
- end
- drone.setAcceleration(0.1)
- goto useRocket
- ::useRocket::
- if playerObj.getHealth() == 0 or numRocketsUsed == numRockets then
- goto returnToBase
- else
- result = drone.use(0)
- if result == true then
- numRocketsUsed = numRocketsUsed + 1
- goto trackTarget
- end
- end
- end
- ::returnToBase::
- droneX = dbg.getX()
- droneZ = dbg.getY()
- offsetXB = droneX - droneXO
- offsetZB = droneZ - droneZO
- drone.move(offsetXB, 0, offsetZB)
- drone.move(0, droneYO, 0)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement