SHARE
TWEET

startup

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