jaypar

Stargate

Aug 17th, 2019
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.15 KB | None | 0 0
  1. local maxCoord = 139967
  2. local minCoord = -maxCoord
  3. local dimensionRange = 1295;
  4.  
  5. local maxX = 625
  6. local maxZ = 625
  7.  
  8. local coordRange = maxCoord - minCoord + 1;
  9. local mc = coordRange + 2
  10. local pc = 93563
  11. local qc = 153742
  12.  
  13. -- goal -625, -625 = OV9A-A2A-VI
  14.  
  15. local numCoordSymbols = 7
  16.  
  17. local symbolChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  18. local numSymbols = string.len(symbolChars)
  19.  
  20. local stargate = peripheral.find("stargate")
  21.  
  22. local stargateLoop = {-maxX, -maxZ, {}}
  23.  
  24. if fs.exists("stargateLoop") then
  25.     stargateLoopFile = fs.open("stargateLoop", "r")
  26.     stargateLoop = textutils.unserialize(stargateLoopFile.readAll())
  27. end
  28.  
  29.  
  30.  
  31. local function round(x)
  32.     return math.floor(x)
  33. end
  34.  
  35. local function symbolToChar(i)
  36.     --return symbolChars[i]
  37.     return string.sub(symbolChars, i + 1, i + 1)
  38. end
  39.  
  40. local function intToSymbols(i, n)
  41.     local s = ""
  42.     local temp = n
  43.     while temp > 0 do
  44.         s = symbolToChar(i % numSymbols) .. s
  45.         i = round(i / numSymbols)
  46.         temp = temp - 1
  47.     end
  48.     return s
  49. end
  50.  
  51. local function interleaveCoords(x, z)
  52.     local p6 = 1
  53.     local c = 0
  54.    
  55.     while (x > 0) or (z > 0) do
  56.         c = c + p6 * (x % 6); x = round(x / 6); p6 = p6 * 6;
  57.         c = c + p6 * (z % 6); z = round(z / 6); p6 = p6 * 6;
  58.     end
  59.     return c
  60. end
  61.  
  62. local function hash(i, f, m)
  63.     h = (((i + 1) * f) % m) - 1
  64.     return h
  65. end
  66.  
  67. local function addressForChunk(chunkX, chunkZ)
  68.     local c = interleaveCoords(hash(chunkX - minCoord, pc, mc), hash(chunkZ - minCoord, pc, mc))
  69.     return intToSymbols(c, numCoordSymbols)
  70. end
  71.  
  72. local function LoopChunks()
  73.     local x = stargateLoop[1]
  74.     local z = stargateLoop[2]
  75.    
  76.     while true do
  77.         local addr = addressForChunk(x, z)
  78.        
  79.         if (stargate.dial(addr)) then
  80.             table.insert(stargateLoop[3], addr)
  81.             stargate.disconnect()
  82.         else
  83.             print(addr .. " at " .. x .. ", " .. z .. " failed.")
  84.         end
  85.        
  86.         stargateLoop[1] = x
  87.         stargateLoop[2] = z
  88.         local file = fs.open("stargateLoop", "w")
  89.         file.write(textutils.serialize(stargateLoop))
  90.         file.close()
  91.        
  92.         if (x == maxX and z == maxZ) then
  93.             x = -maxX
  94.             z = -maxZ
  95.         elseif x == maxX then
  96.             x = -maxX
  97.             z = z + 1
  98.         end
  99.        
  100.         x = x + 1
  101.         sleep(0.0001)
  102.     end
  103. end
  104.  
  105. LoopChunks()
Advertisement
Add Comment
Please, Sign In to add comment