Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. shell.run("clear")
  2. print("    _/    _/  _/_/_/_/    _/_/_/  _/_/_/    ")
  3. print("   _/    _/  _/        _/        _/    _/")
  4. print("  _/_/_/_/  _/_/_/    _/  _/_/  _/_/_/     ")
  5. print(" _/    _/  _/        _/    _/  _/    _/     ")
  6. print("_/    _/  _/          _/_/_/  _/    _/      ")
  7. sleep(4)
  8.  
  9. -- the webhook url for the requests
  10. local discordUri = "https://discordapp.com/api/webhooks/9897675164221440/bVNkDOVeMt0XruW3UBpLOys6ycH-E1ML9SoWwGrFXaTL_vFtpYxjj27quln6actJSEOr"
  11.  
  12. -- waittime between radar scans
  13. local intervalSec = 15
  14. -- range in blocks
  15. local radarRadius = 1000
  16. -- if something is closer than that then a warning sign will be prepended in discord
  17. local safetyDist = 400
  18.  
  19. local radar = peripheral.find("warpdriveRadar")
  20. if radar == nil then
  21.   error("No radar could be found!")
  22. end
  23.  
  24. function tableHasValue(table, v)
  25.   for i=1,#table do
  26.     if table[i] == v then
  27.       return true
  28.     end
  29.   end
  30.   return false
  31. end
  32.  
  33. function getDst(x1,x2,y1,y2,z1,z2)
  34.   local dx = x1-x2
  35.   local dy = y1-y2
  36.   local dz = z1-z2
  37.   return math.floor(math.sqrt(dx*dx+dy*dy+dz*dz))
  38. end
  39.  
  40. function getRadarResults()
  41.  
  42.   local dur = radar.getScanDuration(radarRadius)
  43.   local first = true
  44.   while true do
  45.     local currPwr, maxPwr, unit = radar.getEnergyStatus()
  46.     local _,reqPwr = radar.getEnergyRequired(radarRadius)
  47.     if reqPwr <= currPwr then
  48.       break
  49.     else
  50.       if first then
  51.         first = false
  52.       else
  53.         local _,line=term.getCursorPos()
  54.         term.setCursorPos(1,line-1)
  55.         term.clearLine()
  56.       end
  57.       print("Waiting for energy.. ("..currPwr.."/"..reqPwr..")")
  58.  
  59.       os.sleep(1)
  60.     end
  61.   end
  62.   print("Scanning in the radius of "..radarRadius.." blocks. This will take "..tonumber(dur).."s.")
  63.  
  64.   radar.start()
  65.   os.sleep(dur + 0.1) -- sleep for duration plus buffer
  66.   radar.getResultsCount()
  67.   local cnt = radar.getResultsCount()
  68.   local ret = {}
  69.   local dsts = {}
  70.   local alreadySeen = {}
  71.   local rPosOK,dim,rPosX,rPosY,rPosZ = radar.getGlobalPosition()
  72.   for i=1,cnt do
  73.     local result={radar.getResult(i-1)}
  74.     -- identifier:
  75.     local tv = result[2]..":"..result[3]..":"..result[4].."-"..result[5].."-"..result[6]..":"..result[7]
  76.     if result[1] == true then -- [1] = successful or not
  77.       table.insert(ret,result)
  78.  
  79.       --            alreadySeen[#alreadySeen+1]=tv
  80.     end
  81.   end
  82.   table.sort(ret, function(a,b) return getDst(rPosX,a[4],rPosY,a[5],rPosZ,a[6]) < getDst(rPosX,b[4],rPosY,b[5],rPosZ,b[6]) end)
  83.   return ret
  84. end -- func
  85.  
  86. local oldShips = {}
  87. local goodChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"--,;:_-#'+~*?!§$%&/()={[]}^|<>"
  88. radar.radius(radarRadius)
  89. radar.enable()
  90. while true do
  91.   local res = getRadarResults()
  92.  
  93.   shell.run("clear")
  94.   print("==== Ship Scanner ====")
  95.  
  96.   local str = ""
  97.   local newShips = {}
  98.  
  99.   local firstMsgPart = true
  100.   --    print("Currently tracked ships:")
  101.   local rPosOK,dim,rPosX,rPosY,rPosZ = radar.getGlobalPosition()
  102.   local rlPosX,rlPosY,rlPosZ = radar.getLocalPosition()
  103.   print("Our pos: global xyz: ("..rPosX.." "..rPosY.." "..rPosZ..") local xyz: ("..rlPosX.." "..rlPosY.." "..rlPosZ..")")
  104.   --    rlPosX = 0
  105.   --    rlPosY = 0
  106.   --    rlPosZ = 0
  107.  
  108.   --print("ress:"..#res)
  109.   os.sleep(1)
  110.   for
  111.   i=1,#res do
  112.     local success, type, name, x, y, z, mass = table.unpack(res[i])
  113.     if name ~= "" then
  114.       local cdist = getDst(rPosX,x,rPosY,y,rPosZ,z)
  115.       local so = ""
  116.       if cdist < safetyDist then so = so .. " :warning: " end
  117.  
  118.       so = so.. "**"..name.."** ["..type..", "..mass.."t] at Hyper XYZ: "..x.." "..y.." "..z.." Local XYZ: "
  119.  
  120.       so = so..(x-rPosX+rlPosX).." "..(y-rPosY+rlPosY).." "..(z-rPosZ+rlPosZ).. " **Distance: "..cdist.."m**."
  121.       table.insert(newShips,so)
  122.       --print("added element "..#newShips)
  123.       --os.sleep(1)
  124.       if not tableHasValue(oldShips, so) then -- not already tracked
  125.         if firstMsgPart then
  126.           str = str.."**Newly tracked ships:**"
  127.           firstMsgPart = false
  128.         end
  129.         str = str.."\n"..so
  130.       end
  131.       print(so)
  132.       --os.sleep(.5)
  133.       --
  134.     end
  135.   end
  136.  
  137.  
  138.   firstMsgPart = true
  139.   for i=1,#oldShips do
  140.     if not tableHasValue(newShips, oldShips[i]) then -- if a ship was removed
  141.       if firstMsgPart then
  142.         str = str.."Lost contact with ships:\n"
  143.         firstMsgPart = false
  144.       end
  145.       str = str..oldShips[i].."\n"
  146.     end
  147.   end
  148.   print("\n\n")
  149.   --print("l3:"..#newShips)
  150.   if str ~= "" then
  151.     str = "-------------------------------\n"..str
  152.     --print("posting update to discord...")
  153.     local sanitized = ""
  154.     for j=1,str:len() do
  155.       if string.find(str:sub(j,j), "\"") or str:sub(j,j):find("\\") then
  156.         sanitized = sanitized .. "."
  157.         --     print("removed "..str:sub(j,j))
  158.       else
  159.         sanitized = sanitized .. string.sub(str,j,j)
  160.       end
  161.     end
  162.     print(sanitized)
  163.     if sanitized:len() > 1950 then
  164.       sanitized = sanitized:sub(1,1951).."[..]"
  165.     end
  166.     http.post(discordUri, "{\"content\":\""..sanitized:gsub("\n","\\n").."\"}",{['content-type']="application/json"})
  167.   end
  168.   oldShips = newShips
  169.   sleep(intervalSec)
  170. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement