Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Json Library by ElvishJerrico
- ------------------------------------------------------------------ utils
- local controls = {["\n"]="\\n", ["\r"]="\\r", ["\t"]="\\t", ["\b"]="\\b", ["\f"]="\\f", ["\""]="\\\"", ["\\"]="\\\\"}
- local function isArray(t)
- local max = 0
- for k,v in pairs(t) do
- if type(k) ~= "number" then
- return false
- elseif k > max then
- max = k
- end
- end
- return max == #t
- end
- local whites = {['\n']=true; ['\r']=true; ['\t']=true; [' ']=true; [',']=true; [':']=true}
- function removeWhite(str)
- while whites[str:sub(1, 1)] do
- str = str:sub(2)
- end
- return str
- end
- ------------------------------------------------------------------ encoding
- local function encodeCommon(val, pretty, tabLevel, tTracking)
- local str = ""
- -- Tabbing util
- local function tab(s)
- str = str .. ("\t"):rep(tabLevel) .. s
- end
- local function arrEncoding(val, bracket, closeBracket, iterator, loopFunc)
- str = str .. bracket
- if pretty then
- str = str .. "\n"
- tabLevel = tabLevel + 1
- end
- for k,v in iterator(val) do
- tab("")
- loopFunc(k,v)
- str = str .. ","
- if pretty then str = str .. "\n" end
- end
- if pretty then
- tabLevel = tabLevel - 1
- end
- if str:sub(-2) == ",\n" then
- str = str:sub(1, -3) .. "\n"
- elseif str:sub(-1) == "," then
- str = str:sub(1, -2)
- end
- tab(closeBracket)
- end
- -- Table encoding
- if type(val) == "table" then
- assert(not tTracking[val], "Cannot encode a table holding itself recursively")
- tTracking[val] = true
- if isArray(val) then
- arrEncoding(val, "[", "]", ipairs, function(k,v)
- str = str .. encodeCommon(v, pretty, tabLevel, tTracking)
- end)
- else
- arrEncoding(val, "{", "}", pairs, function(k,v)
- assert(type(k) == "string", "JSON object keys must be strings", 2)
- str = str .. encodeCommon(k, pretty, tabLevel, tTracking)
- str = str .. (pretty and ": " or ":") .. encodeCommon(v, pretty, tabLevel, tTracking)
- end)
- end
- -- String encoding
- elseif type(val) == "string" then
- str = '"' .. val:gsub("[%c\"\\]", controls) .. '"'
- -- Number encoding
- elseif type(val) == "number" or type(val) == "boolean" then
- str = tostring(val)
- else
- error("JSON only supports arrays, objects, numbers, booleans, and strings", 2)
- end
- return str
- end
- function encode(val)
- return encodeCommon(val, false, 0, {})
- end
- function encodePretty(val)
- return encodeCommon(val, true, 0, {})
- end
- ------------------------------------------------------------------ decoding
- local decodeControls = {}
- for k,v in pairs(controls) do
- decodeControls[v] = k
- end
- function parseBoolean(str)
- if str:sub(1, 4) == "true" then
- return true, removeWhite(str:sub(5))
- else
- return false, removeWhite(str:sub(6))
- end
- end
- function parseNull(str)
- return nil, removeWhite(str:sub(5))
- end
- local numChars = {['e']=true; ['E']=true; ['+']=true; ['-']=true; ['.']=true}
- function parseNumber(str)
- local i = 1
- while numChars[str:sub(i, i)] or tonumber(str:sub(i, i)) do
- i = i + 1
- end
- local val = tonumber(str:sub(1, i - 1))
- str = removeWhite(str:sub(i))
- return val, str
- end
- function parseString(str)
- str = str:sub(2)
- local s = ""
- while str:sub(1,1) ~= "\"" do
- local next = str:sub(1,1)
- str = str:sub(2)
- assert(next ~= "\n", "Unclosed string")
- if next == "\\" then
- local escape = str:sub(1,1)
- str = str:sub(2)
- next = assert(decodeControls[next..escape], "Invalid escape character")
- end
- s = s .. next
- end
- return s, removeWhite(str:sub(2))
- end
- function parseArray(str)
- str = removeWhite(str:sub(2))
- local val = {}
- local i = 1
- while str:sub(1, 1) ~= "]" do
- local v = nil
- v, str = parseValue(str)
- val[i] = v
- i = i + 1
- str = removeWhite(str)
- end
- str = removeWhite(str:sub(2))
- return val, str
- end
- function parseObject(str)
- str = removeWhite(str:sub(2))
- local val = {}
- while str:sub(1, 1) ~= "}" do
- local k, v = nil, nil
- k, v, str = parseMember(str)
- val[k] = v
- str = removeWhite(str)
- end
- str = removeWhite(str:sub(2))
- return val, str
- end
- function parseMember(str)
- local k = nil
- k, str = parseValue(str)
- local val = nil
- val, str = parseValue(str)
- return k, val, str
- end
- function parseValue(str)
- local fchar = str:sub(1, 1)
- if fchar == "{" then
- return parseObject(str)
- elseif fchar == "[" then
- return parseArray(str)
- elseif tonumber(fchar) ~= nil or numChars[fchar] then
- return parseNumber(str)
- elseif str:sub(1, 4) == "true" or str:sub(1, 5) == "false" then
- return parseBoolean(str)
- elseif fchar == "\"" then
- return parseString(str)
- elseif str:sub(1, 4) == "null" then
- return parseNull(str)
- end
- return nil
- end
- function decode(str)
- str = removeWhite(str)
- t = parseValue(str)
- return t
- end
- function decodeFromFile(path)
- local file = assert(fs.open(path, "r"))
- local decoded = decode(file.readAll())
- file.close()
- return decoded
- end
- --Finding a Peripheral
- function findPeripheral(pType)
- local pList = {}
- for _,pName in pairs(peripheral.getNames()) do
- if peripheral.getType(pName) == pType then
- table.insert(pList, peripheral.wrap(pName))
- end
- end
- return unpack(pList)
- end
- peripheral.find = findPeripheral
- --Start of program
- oBridge = peripheral.find("openperipheral_glassesbridge")
- oSensor = peripheral.find("openperipheral_sensor")
- function fGetPlayers()
- local sData = http.get("http://tekkit.craftersland.net:25800/up/world/world/").readAll()
- sData = string.gsub(sData, "\\", "\\\\")
- local tData = decode(sData)
- return tData["players"]
- end
- tRendered = {}
- function fRenderTable()
- tRendered = {}
- local tPlayers = fGetPlayers()
- for i = 1,#tPlayers do
- tSensorData = oSensor.getPlayerData(tPlayers[i]["name"])
- tPlayers[i]["world"] = "?"
- if tSensorData then
- tPlayers[i].x = math.floor(4005+tSensorData.position.x)
- tPlayers[i].y = math.floor(67+tSensorData.position.y)
- tPlayers[i].z = math.floor(3771+tSensorData.position.z)
- tPlayers[i].world = "world"
- end
- sRender = ""
- sName = tPlayers[i]["name"]
- for si = #tPlayers[i]["name"],17 do
- sName = sName .. " "
- end
- sRender = sRender .. sName
- sX = tostring(tPlayers[i]["x"])
- if not string.find(sX, "-") then
- sX = " " .. sX
- end
- for si = #sX,6 do
- sX = sX .. " "
- end
- sRender = sRender .. sX
- sY = tostring(tPlayers[i]["y"])
- if not string.find(sY, "-") then
- sY = " " .. sY
- end
- for si = #sY,4 do
- sY = sY .. " "
- end
- sRender = sRender .. sY
- sZ = tostring(tPlayers[i]["z"])
- if not string.find(sZ, "-") then
- sZ = " " .. sZ
- end
- for si = #sZ,6 do
- sZ = sZ .. " "
- end
- sRender = sRender .. sZ
- sWorld = tPlayers[i]["world"]
- for si = #tPlayers[i]["world"],6 do
- sWorld = sWorld .. " "
- end
- sRender = sRender .. sWorld
- tRendered[tPlayers[i]["name"]] = {}
- tRendered[tPlayers[i]["name"]]["render"] = sRender
- tRendered[tPlayers[i]["name"]]["name"] = tPlayers[i].name
- tRendered[tPlayers[i]["name"]]["sx"] = sX
- tRendered[tPlayers[i]["name"]]["sy"] = sY
- tRendered[tPlayers[i]["name"]]["sz"] = sZ
- tRendered[tPlayers[i]["name"]]["x"] = tPlayers[i].x
- tRendered[tPlayers[i]["name"]]["y"] = tPlayers[i].y
- tRendered[tPlayers[i]["name"]]["z"] = tPlayers[i].z
- tRendered[tPlayers[i]["name"]]["world"] = tPlayers[i].world
- end
- --[[for _,tRender in pairs(tRendered) do
- print(tRender["render"])
- end]]--
- end
- function fDirectionOld(x1,y1,x2,y2)
- nRad = math.atan2(y2-y1,x2-x1)
- if nRad < 0 then
- nRad = nRad + (2*math.pi)
- end
- nDeg = nRad * (180/math.pi)
- if nDeg == 0 then
- return "E"
- elseif nDeg == 45 then
- return "NE"
- elseif nDeg == 90 then
- return "N"
- elseif nDeg == 135 then
- return "NW"
- elseif nDeg == 180 then
- return "W"
- elseif nDeg == 225 then
- return "SW"
- elseif nDeg == 270 then
- return "S"
- elseif nDeg == 315 then
- return "SE"
- else
- return "?"
- end
- end
- function fDirection(nX1, nZ1, nX2, nZ2)
- local dir = math.atan2(nZ2 - nZ1, nX2 - nX1)
- if dir > 2.75 or dir < -2.74 then
- return "W"
- elseif dir > -2.75 and dir < -1.95 then
- return "NW"
- elseif dir > -1.96 and dir < -1.17 then
- return "N"
- elseif dir > -1.18 and dir < -0.38 then
- return "NE"
- elseif dir > -0.39 and dir < 0.40 then
- return "E"
- elseif dir > 0.39 and dir < 1.19 then
- return "SE"
- elseif dir > 1.18 and dir < 1.96 then
- return "S"
- elseif dir > 1.96 and dir < 2.76 then
- return "SW"
- end
- end
- function fDistance(nX1, nY1, nX2, nY2)
- return math.floor(math.sqrt(math.pow(nX2-nX1,2)+math.pow(nY2-nY1,2)))
- end
- tModuleLocs = {
- ["tracker"] = {7,7},
- }
- while true do
- fRenderTable()
- tUsers = oBridge.getUsers()
- for i = 1,#tUsers do
- if tUsers[i] == "Fisher" or tUsers[i] == "RewVenN" then
- tSurface = oBridge.getUserSurface(tUsers[i])
- tSurface.clear()
- nIterator = 1
- for _,tRender in pairs(tRendered) do
- nIterator = nIterator + 1
- end
- nGradientWidth = 265
- if tRendered[tUsers[i]] ~= nil then
- nGradientWidth = 330
- end
- 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)
- nIterator = 1
- for _,tRender in pairs(tRendered) do
- nColor = 0xFFFFFF
- if nIterator % 2 == 0 then
- nColor = 0xFFFFFF
- else
- nColor = 0xC0C0C0
- end
- tSurface.addText(tModuleLocs["tracker"][1]+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tRender["name"],nColor)
- tSurface.addText(tModuleLocs["tracker"][1]+110+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sx"]),nColor)
- tSurface.addText(tModuleLocs["tracker"][1]+150+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sy"]),nColor)
- tSurface.addText(tModuleLocs["tracker"][1]+190+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tostring(tRender["sz"]),nColor)
- tSurface.addText(tModuleLocs["tracker"][1]+230+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,tRender["world"],nColor)
- if tRendered[tUsers[i]] ~= nil then
- if tRender["name"] == tUsers[i] then
- tSurface.addText(tModuleLocs["tracker"][1]+270+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"-",nColor)
- else
- 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)
- end
- if tRender["name"] == tUsers[i] then
- tSurface.addText(tModuleLocs["tracker"][1]+290+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"-",nColor)
- else
- if tRender["world"] ~= "?" then
- 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)
- else
- tSurface.addText(tModuleLocs["tracker"][1]+290+4,tModuleLocs["tracker"][2]+(nIterator*10)-6,"?m",nColor)
- end
- end
- end
- nIterator = nIterator + 1
- end
- end
- end
- os.startTimer(0.25)
- tEvent = {os.pullEvent()}
- if tEvent[1] == "chat_command" then
- print("$$" .. tEvent[2])
- tCmdArgs = {}
- for sArg in string.gmatch(tEvent[2],"%S+") do
- table.insert(tCmdArgs, sArg)
- end
- if tCmdArgs[1] == "move" then
- if tModuleLocs[tCmdArgs[2]] ~= nil then
- if tonumber(tCmdArgs[3]) and tonumber(tCmdArgs[4]) then
- tModuleLocs[tCmdArgs[2]][1] = tonumber(tCmdArgs[3])
- tModuleLocs[tCmdArgs[2]][2] = tonumber(tCmdArgs[4])
- end
- end
- end
- end
- end
- print(fDirection(0,10,0,0))
- --print(#fGetPlayers())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement