Advertisement
fishermedders

dd

Dec 19th, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.96 KB | None | 0 0
  1. --Json Library by ElvishJerrico
  2.  
  3. ------------------------------------------------------------------ utils
  4. local controls = {["\n"]="\\n", ["\r"]="\\r", ["\t"]="\\t", ["\b"]="\\b", ["\f"]="\\f", ["\""]="\\\"", ["\\"]="\\\\"}
  5.  
  6. local function isArray(t)
  7. local max = 0
  8. for k,v in pairs(t) do
  9. if type(k) ~= "number" then
  10. return false
  11. elseif k > max then
  12. max = k
  13. end
  14. end
  15. return max == #t
  16. end
  17.  
  18. local whites = {['\n']=true; ['\r']=true; ['\t']=true; [' ']=true; [',']=true; [':']=true}
  19. function removeWhite(str)
  20. while whites[str:sub(1, 1)] do
  21. str = str:sub(2)
  22. end
  23. return str
  24. end
  25.  
  26. ------------------------------------------------------------------ encoding
  27.  
  28. local function encodeCommon(val, pretty, tabLevel, tTracking)
  29. local str = ""
  30.  
  31. -- Tabbing util
  32. local function tab(s)
  33. str = str .. ("\t"):rep(tabLevel) .. s
  34. end
  35.  
  36. local function arrEncoding(val, bracket, closeBracket, iterator, loopFunc)
  37. str = str .. bracket
  38. if pretty then
  39. str = str .. "\n"
  40. tabLevel = tabLevel + 1
  41. end
  42. for k,v in iterator(val) do
  43. tab("")
  44. loopFunc(k,v)
  45. str = str .. ","
  46. if pretty then str = str .. "\n" end
  47. end
  48. if pretty then
  49. tabLevel = tabLevel - 1
  50. end
  51. if str:sub(-2) == ",\n" then
  52. str = str:sub(1, -3) .. "\n"
  53. elseif str:sub(-1) == "," then
  54. str = str:sub(1, -2)
  55. end
  56. tab(closeBracket)
  57. end
  58.  
  59. -- Table encoding
  60. if type(val) == "table" then
  61. assert(not tTracking[val], "Cannot encode a table holding itself recursively")
  62. tTracking[val] = true
  63. if isArray(val) then
  64. arrEncoding(val, "[", "]", ipairs, function(k,v)
  65. str = str .. encodeCommon(v, pretty, tabLevel, tTracking)
  66. end)
  67. else
  68. arrEncoding(val, "{", "}", pairs, function(k,v)
  69. assert(type(k) == "string", "JSON object keys must be strings", 2)
  70. str = str .. encodeCommon(k, pretty, tabLevel, tTracking)
  71. str = str .. (pretty and ": " or ":") .. encodeCommon(v, pretty, tabLevel, tTracking)
  72. end)
  73. end
  74. -- String encoding
  75. elseif type(val) == "string" then
  76. str = '"' .. val:gsub("[%c\"\\]", controls) .. '"'
  77. -- Number encoding
  78. elseif type(val) == "number" or type(val) == "boolean" then
  79. str = tostring(val)
  80. else
  81. error("JSON only supports arrays, objects, numbers, booleans, and strings", 2)
  82. end
  83. return str
  84. end
  85.  
  86. function encode(val)
  87. return encodeCommon(val, false, 0, {})
  88. end
  89.  
  90. function encodePretty(val)
  91. return encodeCommon(val, true, 0, {})
  92. end
  93.  
  94. ------------------------------------------------------------------ decoding
  95.  
  96. local decodeControls = {}
  97. for k,v in pairs(controls) do
  98. decodeControls[v] = k
  99. end
  100.  
  101. function parseBoolean(str)
  102. if str:sub(1, 4) == "true" then
  103. return true, removeWhite(str:sub(5))
  104. else
  105. return false, removeWhite(str:sub(6))
  106. end
  107. end
  108.  
  109. function parseNull(str)
  110. return nil, removeWhite(str:sub(5))
  111. end
  112.  
  113. local numChars = {['e']=true; ['E']=true; ['+']=true; ['-']=true; ['.']=true}
  114. function parseNumber(str)
  115. local i = 1
  116. while numChars[str:sub(i, i)] or tonumber(str:sub(i, i)) do
  117. i = i + 1
  118. end
  119. local val = tonumber(str:sub(1, i - 1))
  120. str = removeWhite(str:sub(i))
  121. return val, str
  122. end
  123.  
  124. function parseString(str)
  125. str = str:sub(2)
  126. local s = ""
  127. while str:sub(1,1) ~= "\"" do
  128. local next = str:sub(1,1)
  129. str = str:sub(2)
  130. assert(next ~= "\n", "Unclosed string")
  131.  
  132. if next == "\\" then
  133. local escape = str:sub(1,1)
  134. str = str:sub(2)
  135.  
  136. next = assert(decodeControls[next..escape], "Invalid escape character")
  137. end
  138.  
  139. s = s .. next
  140. end
  141. return s, removeWhite(str:sub(2))
  142. end
  143.  
  144. function parseArray(str)
  145. str = removeWhite(str:sub(2))
  146.  
  147. local val = {}
  148. local i = 1
  149. while str:sub(1, 1) ~= "]" do
  150. local v = nil
  151. v, str = parseValue(str)
  152. val[i] = v
  153. i = i + 1
  154. str = removeWhite(str)
  155. end
  156. str = removeWhite(str:sub(2))
  157. return val, str
  158. end
  159.  
  160. function parseObject(str)
  161. str = removeWhite(str:sub(2))
  162.  
  163. local val = {}
  164. while str:sub(1, 1) ~= "}" do
  165. local k, v = nil, nil
  166. k, v, str = parseMember(str)
  167. val[k] = v
  168. str = removeWhite(str)
  169. end
  170. str = removeWhite(str:sub(2))
  171. return val, str
  172. end
  173.  
  174. function parseMember(str)
  175. local k = nil
  176. k, str = parseValue(str)
  177. local val = nil
  178. val, str = parseValue(str)
  179. return k, val, str
  180. end
  181.  
  182. function parseValue(str)
  183. local fchar = str:sub(1, 1)
  184. if fchar == "{" then
  185. return parseObject(str)
  186. elseif fchar == "[" then
  187. return parseArray(str)
  188. elseif tonumber(fchar) ~= nil or numChars[fchar] then
  189. return parseNumber(str)
  190. elseif str:sub(1, 4) == "true" or str:sub(1, 5) == "false" then
  191. return parseBoolean(str)
  192. elseif fchar == "\"" then
  193. return parseString(str)
  194. elseif str:sub(1, 4) == "null" then
  195. return parseNull(str)
  196. end
  197. return nil
  198. end
  199.  
  200. function decode(str)
  201. str = removeWhite(str)
  202. t = parseValue(str)
  203. return t
  204. end
  205.  
  206. function decodeFromFile(path)
  207. local file = assert(fs.open(path, "r"))
  208. local decoded = decode(file.readAll())
  209. file.close()
  210. return decoded
  211. end
  212.  
  213. --Finding a Peripheral
  214. function findPeripheral(pType)
  215. local pList = {}
  216. for _,pName in pairs(peripheral.getNames()) do
  217. if peripheral.getType(pName) == pType then
  218. table.insert(pList, peripheral.wrap(pName))
  219. end
  220. end
  221. return unpack(pList)
  222. end
  223. peripheral.find = findPeripheral
  224.  
  225. --Start of program
  226. oBridge = peripheral.find("openperipheral_glassesbridge")
  227. oSensor = peripheral.find("openperipheral_sensor")
  228.  
  229. function fGetPlayers()
  230. local sData = http.get("http://tekkit.craftersland.net:25800/up/world/world/").readAll()
  231. sData = string.gsub(sData, "\\", "\\\\")
  232. local tData = decode(sData)
  233. return tData["players"]
  234. end
  235.  
  236. tRendered = {}
  237. function fRenderTable()
  238. tRendered = {}
  239. local tPlayers = fGetPlayers()
  240. for i = 1,#tPlayers do
  241. tSensorData = oSensor.getPlayerData(tPlayers[i]["name"])
  242. tPlayers[i]["world"] = "?"
  243. if tSensorData then
  244. tPlayers[i].x = math.floor(4005+tSensorData.position.x)
  245. tPlayers[i].y = math.floor(67+tSensorData.position.y)
  246. tPlayers[i].z = math.floor(3771+tSensorData.position.z)
  247. tPlayers[i].world = "world"
  248. end
  249. sRender = ""
  250. sName = tPlayers[i]["name"]
  251. for si = #tPlayers[i]["name"],17 do
  252. sName = sName .. " "
  253. end
  254. sRender = sRender .. sName
  255. sX = tostring(tPlayers[i]["x"])
  256. if not string.find(sX, "-") then
  257. sX = " " .. sX
  258. end
  259. for si = #sX,6 do
  260. sX = sX .. " "
  261. end
  262. sRender = sRender .. sX
  263. sY = tostring(tPlayers[i]["y"])
  264. if not string.find(sY, "-") then
  265. sY = " " .. sY
  266. end
  267. for si = #sY,4 do
  268. sY = sY .. " "
  269. end
  270. sRender = sRender .. sY
  271. sZ = tostring(tPlayers[i]["z"])
  272. if not string.find(sZ, "-") then
  273. sZ = " " .. sZ
  274. end
  275. for si = #sZ,6 do
  276. sZ = sZ .. " "
  277. end
  278. sRender = sRender .. sZ
  279. sWorld = tPlayers[i]["world"]
  280. for si = #tPlayers[i]["world"],6 do
  281. sWorld = sWorld .. " "
  282. end
  283. sRender = sRender .. sWorld
  284. tRendered[tPlayers[i]["name"]] = {}
  285. tRendered[tPlayers[i]["name"]]["render"] = sRender
  286. tRendered[tPlayers[i]["name"]]["name"] = tPlayers[i].name
  287. tRendered[tPlayers[i]["name"]]["sx"] = sX
  288. tRendered[tPlayers[i]["name"]]["sy"] = sY
  289. tRendered[tPlayers[i]["name"]]["sz"] = sZ
  290. tRendered[tPlayers[i]["name"]]["x"] = tPlayers[i].x
  291. tRendered[tPlayers[i]["name"]]["y"] = tPlayers[i].y
  292. tRendered[tPlayers[i]["name"]]["z"] = tPlayers[i].z
  293. tRendered[tPlayers[i]["name"]]["world"] = tPlayers[i].world
  294. end
  295. --[[for _,tRender in pairs(tRendered) do
  296. print(tRender["render"])
  297. end]]--
  298. end
  299.  
  300. function fDirectionOld(x1,y1,x2,y2)
  301. nRad = math.atan2(y2-y1,x2-x1)
  302. if nRad < 0 then
  303. nRad = nRad + (2*math.pi)
  304. end
  305. nDeg = nRad * (180/math.pi)
  306. if nDeg == 0 then
  307. return "E"
  308. elseif nDeg == 45 then
  309. return "NE"
  310. elseif nDeg == 90 then
  311. return "N"
  312. elseif nDeg == 135 then
  313. return "NW"
  314. elseif nDeg == 180 then
  315. return "W"
  316. elseif nDeg == 225 then
  317. return "SW"
  318. elseif nDeg == 270 then
  319. return "S"
  320. elseif nDeg == 315 then
  321. return "SE"
  322. else
  323. return "?"
  324. end
  325. end
  326.  
  327. function fDirection(nX1, nZ1, nX2, nZ2)
  328. local dir = math.atan2(nZ2 - nZ1, nX2 - nX1)
  329. if dir > 2.75 or dir < -2.74 then
  330. return "W"
  331. elseif dir > -2.75 and dir < -1.95 then
  332. return "NW"
  333. elseif dir > -1.96 and dir < -1.17 then
  334. return "N"
  335. elseif dir > -1.18 and dir < -0.38 then
  336. return "NE"
  337. elseif dir > -0.39 and dir < 0.40 then
  338. return "E"
  339. elseif dir > 0.39 and dir < 1.19 then
  340. return "SE"
  341. elseif dir > 1.18 and dir < 1.96 then
  342. return "S"
  343. elseif dir > 1.96 and dir < 2.76 then
  344. return "SW"
  345. end
  346. end
  347.  
  348. function fDistance(nX1, nY1, nX2, nY2)
  349. return math.floor(math.sqrt(math.pow(nX2-nX1,2)+math.pow(nY2-nY1,2)))
  350. end
  351.  
  352. tModuleLocs = {
  353. ["tracker"] = {7,7},
  354. }
  355.  
  356. while true do
  357. fRenderTable()
  358. tUsers = oBridge.getUsers()
  359. for i = 1,#tUsers do
  360. if tUsers[i] == "Fisher" or tUsers[i] == "RewVenN" then
  361. tSurface = oBridge.getUserSurface(tUsers[i])
  362. tSurface.clear()
  363. nIterator = 1
  364. for _,tRender in pairs(tRendered) do
  365. nIterator = nIterator + 1
  366. end
  367. nGradientWidth = 265
  368. if tRendered[tUsers[i]] ~= nil then
  369. nGradientWidth = 330
  370. end
  371. tSurface.addGradientBox(tModuleLocs["tracker"][1],tModuleLocs["tracker"][2],tModuleLocs["tracker"][1]+nGradientWidth,tModuleLocs["tracker"][2]+(nIterator*10)-10,0x000000,0.7,0x404040,0.7,1)
  372. nIterator = 1
  373. for _,tRender in pairs(tRendered) do
  374. nColor = 0xFFFFFF
  375. if nIterator % 2 == 0 then
  376. nColor = 0xFFFFFF
  377. else
  378. nColor = 0xC0C0C0
  379. end
  380. tSurface.addText(tModuleLocs["tracker"][1]+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tRender["name"],nColor)
  381. tSurface.addText(tModuleLocs["tracker"][1]+110+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sx"]),nColor)
  382. tSurface.addText(tModuleLocs["tracker"][1]+150+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sy"]),nColor)
  383. tSurface.addText(tModuleLocs["tracker"][1]+190+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sz"]),nColor)
  384. tSurface.addText(tModuleLocs["tracker"][1]+230+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tRender["world"],nColor)
  385. if tRendered[tUsers[i]] ~= nil then
  386. if tRender["name"] == tUsers[i] then
  387. tSurface.addText(tModuleLocs["tracker"][1]+270+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"-",nColor)
  388. else
  389. tSurface.addText(tModuleLocs["tracker"][1]+270+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,fDirection(tonumber(tRendered[tUsers[i]]["x"]),tonumber(tRendered[tUsers[i]]["z"]),tonumber(tRender["x"]),tonumber(tRender["z"])),nColor)
  390. end
  391. if tRender["name"] == tUsers[i] then
  392. tSurface.addText(tModuleLocs["tracker"][1]+290+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"-",nColor)
  393. else
  394. if tRender["world"] ~= "?" then
  395. tSurface.addText(tModuleLocs["tracker"][1]+290+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,fDistance(tonumber(tRendered[tUsers[i]]["x"]),tonumber(tRendered[tUsers[i]]["z"]),tonumber(tRender["x"]),tonumber(tRender["z"])).."m",nColor)
  396. else
  397. tSurface.addText(tModuleLocs["tracker"][1]+290+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"?m",nColor)
  398. end
  399. end
  400. end
  401. nIterator = nIterator + 1
  402. end
  403. end
  404. end
  405. os.startTimer(0.25)
  406. tEvent = {os.pullEvent()}
  407. if tEvent[1] == "chat_command" then
  408. print("$$" .. tEvent[2])
  409. tCmdArgs = {}
  410. for sArg in string.gmatch(tEvent[2],"%S+") do
  411. table.insert(tCmdArgs, sArg)
  412. end
  413. if tCmdArgs[1] == "move" then
  414. if tModuleLocs[tCmdArgs[2]] ~= nil then
  415. if tonumber(tCmdArgs[3]) and tonumber(tCmdArgs[4]) then
  416. tModuleLocs[tCmdArgs[2]][1] = tonumber(tCmdArgs[3])
  417. tModuleLocs[tCmdArgs[2]][2] = tonumber(tCmdArgs[4])
  418. end
  419. end
  420. end
  421. end
  422. end
  423.  
  424. print(fDirection(0,10,0,0))
  425. --print(#fGetPlayers())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement