Advertisement
Guest User

aerialstrike.lua

a guest
Jan 22nd, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.74 KB | None | 0 0
  1. local drone = component.proxy(component.list("drone")())
  2. local dbg = component.proxy(component.list("debug")())
  3. local net = component.proxy(component.list("modem")())
  4. net.open(2412)
  5. local eventStack = {}
  6. local listeners = {}
  7. event = {}
  8. function event.listen(evtype,callback)
  9.  if listeners[evtype] ~= nil then
  10.   table.insert(listeners[evtype],callback)
  11.   return #listeners
  12.  else
  13.   listeners[evtype] = {callback}
  14.   return 1
  15.  end
  16. end
  17. function event.ignore(evtype,id)
  18.  table.remove(listeners[evtype],id)
  19. end
  20. function event.pull(filter)
  21.  if not filter then return table.remove(eventStack,1)
  22.  else
  23.   for _,v in pairs(eventStack) do
  24.    if v == filter then
  25.     return v
  26.    end
  27.   end
  28.   repeat
  29.    t=table.pack(computer.pullSignal())
  30.    evtype = table.remove(t,1)
  31.    if listeners[evtype] ~= nil then
  32.     for k,v in pairs(listeners[evtype]) do
  33.      local evt,rasin = pcall(v,evtype,table.unpack(t))
  34.      if not evt then
  35.       print("stdout_write","ELF: "..tostring(evtype)..":"..tostring(k)..":"..rasin)
  36.      end
  37.     end
  38.    end
  39.   until evtype == filter
  40.   return evtype, table.unpack(t)
  41.  end
  42. end
  43. function print(...)
  44.  local args=table.pack(...)
  45.  pcall(function() net.broadcast(2412, table.unpack(args)) end)
  46. end
  47. function sleep(n)
  48.   local t0 = computer.uptime()
  49.   while computer.uptime() - t0 <= n do computer.pushSignal("wait") computer.pullSignal() end
  50. end
  51. local function track()
  52.   drone.setAcceleration(0.5)
  53.   while drone.getOffset() ~= 0 do
  54.     if drone.getOffset() < 1 then
  55.       break
  56.     end
  57.     playerX, playerY, playerZ = playerObj.getPosition()
  58.     droneX = dbg.getX()
  59.     droneY = dbg.getY()
  60.     droneZ = dbg.getZ()
  61.     offsetXP = playerX - droneX
  62.     offsetZP = playerZ - droneZ
  63.     drone.move(offsetXP, 0, offsetZP)
  64.     offsetXP = 0
  65.     offsetZP = 0
  66.     sleep(0.5)
  67.   end
  68.   drone.setAcceleration(0.2)
  69. end
  70. local function fire()
  71.   if playerObj.getHealth() == 0 or numRocketsUsed == numRockets then
  72.     home()
  73.   else
  74.     result = drone.use(0)
  75.     if result == true then
  76.       numRocketsUsed = numRocketsUsed + 1
  77.       track()
  78.     end
  79.    end
  80.   end
  81. end
  82. local function home()
  83.   droneX = dbg.getX()
  84.   droneZ = dbg.getY()
  85.   offsetXB = droneX - droneXO
  86.   offsetZB = droneZ - droneZO
  87.   drone.move(offsetXB, 0, offsetZB)
  88.   while drone.getOffset() > 0.99 do
  89.     sleep(0.1)
  90.   end
  91.   drone.move(0, droneYO, 0)
  92. end
  93. while true do
  94.   net.open(2412)
  95.   local _, _, _, port, _, player, pass, numRockets = event.pull("modem_message")
  96.   if port == 2412 and pass == "preppux872" then
  97.     net.close(2412)
  98.     local numRocketsUsed = 0
  99.     playerObj = dbg.getPlayer(player)
  100.     playerX, playerY, playerZ = playerObj.getPosition()
  101.     droneXO = dbg.getX()
  102.     droneYO = dbg.getY()
  103.     droneZO = dbg.getZ()
  104.     drone.move(0, 256-droneYO, 0)
  105.     while drone.getOffset() ~= 0 do
  106.       sleep(0.001)
  107.     end
  108.     track()
  109.     fire()
  110.   end
  111. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement