Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --0.4.4 by UNOBTANIUM 03.03.2014
- local site = {}
- local selected = 1
- local selectedObj = 1
- local z = 1
- local mode = "mainmenu"
- local errorThrown = false
- local w,h = term.getSize()
- w = w + 1
- local updateInterval = 2
- local delay = os.startTimer(0.5)
- local colorName = {colors.white, colors.orange, colors.magenta, colors.lightBlue, colors.yellow, colors.lime, colors.pink, colors.lightGray, colors.cyan, colors.purple, colors.blue, colors.brown, colors.green, colors.red, colors.black}
- local colorHex = {0xFFFFFF,0xFF8800,0xFF8CFF,0x00FFFF,0xFFF700,0x00FF11,0xF7B5DE,0xBFBFBF,0x65A1D6,0xAF56B3,0x0000FF,0x754302,0x004000,0xFF0000,0x000000}
- local rednetSide = {"top","bottom","right","front"}
- local b = peripheral.wrap("left")
- local net = peripheral.wrap("back")
- -- type text x y c
- -- type x y text unit method maxNumber c cMax param
- -- type x y w h cBorder tBorder cBack tBack cOne tOne cTwo tTwo unit method maxNumber param
- -- type x y w h minNumber maxNumber c t fadeout unit method var param
- -- type unit method operator limitNumber action
- for i=1, 199 do
- site[i] = {}
- end
- function save()
- local file = fs.open("openPeripheralClient","w")
- file.writeLine("OPEN PERIPHERAL CLIENT DATA")
- file.writeLine(textutils.serialize(site))
- file.close()
- end
- function buildString(stringBuilder, site)
- stringBuilder = stringBuilder .. "{"
- local added = false
- for i, var in pairs(site) do -- VARIABLE
- added = true
- if type(var) == "string" then
- stringBuilder = stringBuilder .. "\"" .. var .. "\""
- elseif type(var) == "number" then
- stringBuilder = stringBuilder .. var
- elseif type(var) == "boolean" then
- stringBuilder = stringBuilder .. tostring(var)
- elseif type(var) == "table" then
- stringBuilder = buildString(stringBuilder, site[i])
- end
- stringBuilder = stringBuilder .. ","
- end
- if added then
- stringBuilder = stringBuilder:sub(1,stringBuilder:len()-1)
- end
- return stringBuilder .. "}"
- end
- function load()
- if not fs.exists("openPeripheralClient") then return end
- local file = fs.open("openPeripheralClient","r")
- if file.readLine() == "OPEN PERIPHERAL CLIENT DATA" then
- site = textutils.unserialize(file.readLine())
- file.close()
- else
- file.close()
- oldLoad()
- end
- end
- function oldSave()
- local file = fs.open("openPeripheralClient","w")
- for i=1,198 do -- SITE
- file.writeLine(countArray(site[i]))
- for k,v in pairs(site[i]) do -- OBJECT
- file.writeLine(countArray(site[i][k]))
- for m,n in pairs(site[i][k]) do -- VARIABLES
- if (site[i][k][1] == "graphPillar" or site[i][k][1] == "graphPoint") and m == 13 then
- file.writeLine(countArray(site[i][k][m]))
- for a,b in pairs(site[i][k][m]) do
- file.writeLine(site[i][k][m][a])
- end
- else
- file.writeLine(n)
- end
- end
- end
- end
- -- ALARM
- file.close()
- end
- function oldLoad()
- if not fs.exists("openPeripheralClient") then return end
- local file = fs.open("openPeripheralClient","r")
- for i=1,198 do
- local amountObj = tonumber(file.readLine())
- for k=1,amountObj do
- local amountVars = tonumber(file.readLine())
- local typ = file.readLine()
- site[i][k] = {}
- site[i][k][1] = typ
- for m=2,amountVars do
- if typ == "text" then
- if m == 2 then
- site[i][k][m] = file.readLine()
- else
- site[i][k][m] = tonumber(file.readLine())
- end
- elseif typ == "box" then
- site[i][k][m] = tonumber(file.readLine())
- elseif typ == "number" then
- if m == 2 or m == 3 or m >= 7 then
- site[i][k][m] = tonumber(file.readLine())
- else
- site[i][k][m] = file.readLine()
- end
- elseif typ == "bar" then
- if (m >= 2 and m <=13) or m == 16 then
- site[i][k][m] = tonumber(file.readLine())
- else
- site[i][k][m] = file.readLine()
- end
- elseif typ == "graphPillar" or typ == "graphPoint" then
- if m >= 2 and m <= 9 then
- site[i][k][m] = tonumber(file.readLine())
- elseif m == 10 then
- if file.readLine() == "true" then
- site[i][k][m] = true
- else
- site[i][k][m] = false
- end
- elseif m == 11 or m == 12 then
- site[i][k][m] = file.readLine()
- else
- local amount = tonumber(file.readLine())
- site[i][k][m] = {}
- for a=1,amount do
- site[i][k][m][a] = tonumber(file.readLine())
- end
- end
- elseif typ == "frame" then
- site[i][k][m] = tonumber(file.readLine())
- end
- end
- end
- end
- file.close()
- end
- function clear(color)
- color = color or colors.black
- term.setBackgroundColor(color)
- term.clear()
- term.setCursorPos(1,1)
- end
- function countArray(a)
- local amount = 0
- for k,v in pairs(a) do
- amount = amount + 1
- end
- return amount
- end
- function write(text,x,y,c)
- c = c or colors.white
- term.setCursorPos(x,y)
- term.setTextColor(c)
- term.write(text)
- end
- function centered(text,y,c)
- c = c or colors.white
- term.setCursorPos(w/2-math.ceil(#tostring(text)/2),y)
- term.setTextColor(c)
- term.write(tostring(text))
- end
- function fill(text,y)
- centered(string.rep(tostring(text), w), y)
- end
- function setColors(text,background)
- background = background or colors.lightGray
- term.setTextColor(text)
- term.setBackgroundColor(background)
- end
- function drawArrows(y)
- write("<",14,y)
- write(">",36,y)
- end
- -- CHECK ALARM AND ACTIVATIONS
- function checkAlarm(chatCommand, rednetMessage)
- chatCommand = chatCommand or ""
- rednetMessage = rednetMessage or ""
- local number = 0
- for k, obj in pairs(site[199]) do
- local var = site[199][k]
- if var[1] == "ALARM" then -- ALARM
- if var[2] ~= "NONE" and var[3] ~= "NONE" and type(var[4]) == "table" then
- if countArray(var[4]) >= 1 then
- local noErr,res = pcall( function() net.callRemote(var[2], var[3], unpack(var[4])) end)
- if noErr then
- number = tonumber(net.callRemote(var[2], var[3], unpack(var[4])))
- else
- number = 0
- if not errorThrown then
- drawText("ERROR!!! ALARM'N'ACTION CALLING WITH ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- else
- local noErr,res = pcall( function() net.callRemote(var[2], var[3]) end)
- if noErr then
- number = tonumber(net.callRemote(var[2], var[3]))
- else
- number = 0
- if not errorThrown then
- drawText("ERROR!!! ALARM'N'ACTION CALLING WITHOUT ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- end
- if var[5] == "=" and number == var[6] then
- makeAction(var)
- elseif var[5] == ">" and number > var[6] then
- makeAction(var)
- elseif var[5] == "<"and number < var[6] then
- makeAction(var)
- end
- end
- elseif not (chatCommand == "") and var[1] == "CHAT" and var[2] == chatCommand then -- CHAT
- makeAction(var)
- elseif not (rednetMessage == "") and var[1] == "REDNET" and var[2] == rednetMessage then
- makeAction(var)
- end
- end
- end
- function makeAction(var)
- local relC = 0
- if var[1] == "ALARM" then
- relC = 4
- end
- if var[3+relC] == "TEXT" then
- drawText(var[6+relC],var[4+relC],var[5+relC],var[7+relC])
- elseif var[3+relC] == "ACTIVATION" then
- if var[4+relC] ~= "NONE" and var[5+relC] ~= "NONE" and type(var[6+relC]) == "table" then
- if countArray(var[6+relC]) >= 1 then
- local noErr,res = pcall( function() net.callRemote(var[4+relC], var[5+relC], unpack(var[6+relC])) end)
- if noErr then
- local testvar = net.callRemote(var[4+relC], var[5+relC], unpack(var[6+relC])) or "NOTHING"
- else
- if not errorThrown then
- drawText("ERROR!!! ALARM'N'ACTION CALLING WITH ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- else
- local noErr,res = pcall( function() net.callRemote(var[4+relC], var[5+relC], unpack(var[6+relC])) end)
- if noErr then
- local testvar = net.callRemote(var[4+relC], var[5+relC]) or "NOTHING"
- else
- if not errorThrown then
- drawText("ERROR!!! ALARM'N'ACTION CALLING WITHOUT ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- end
- end
- elseif var[3+relC] == "REDNET" then
- rednet.broadcast(var[5+relC])
- end
- end
- -- ON SCREEN OBJECT DRAWING
- -- type text x y c
- function drawText(text,x,y,c)
- local var = b.addText(x,y,text,colorHex[c])
- setZDimension(var)
- end
- -- type x y w h cOne tOne cTwo tTwo
- function drawBox(x,y,w,h,cOne,tOne,cTwo,tTwo)
- cOne = colorHex[cOne]
- cTwo = colorHex[cTwo]
- local var1 = b.addBox(x,y,w,2,cTwo,tTwo)
- setZDimension(var1)
- local var2 = b.addBox(x,y+2,2,h-4,cTwo,tTwo)
- setZDimension(var2)
- local var3 = b.addBox(x,y+h-2,w,2,cTwo,tTwo)
- setZDimension(var3)
- local var4 = b.addBox(x+w-2,y+2,2,h-4,cTwo,tTwo)
- setZDimension(var4)
- local var5 = b.addBox(x+2,y+2,w-4,h-4,cOne,tOne)
- setZDimension(var5)
- end
- -- type x y text unit method maxNumber c cMax
- function drawNumber(x,y,text,unit,method,maxNumber,c,cMax, param)
- c = colorHex[c]
- cMax = colorHex[cMax]
- local number = "NONE"
- if net.isPresentRemote(unit) and not (method == "NONE") then
- if not (type(param) == "table") then
- number = "NONE"
- elseif not (param[1] == nil) and countArray(param) >= 1 then
- local noErr,res = pcall( net.callRemote, unit, method, unpack(param))
- if noErr then
- number = tonumber(res)
- else
- number = "ERROR"
- if not errorThrown then
- drawText("ERROR!!! DRAWING NUMBER WITH ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- else
- local noErr,res = pcall( net.callRemote, unit,method)
- if noErr then
- number = tonumber(res)
- else
- number = "ERROR"
- if not errorThrown then
- drawText("ERROR!!! DRAWING NUMBER WITHOUT ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- end
- end
- local lengthText = ((#text) + 2)*6
- local lengthNumber = (#(tostring(number)))*6
- local maxLength = (#(tostring(maxNumber)))*6
- if type(number) == "string" or (type(number) == "number" and number == maxNumber) then
- local var1 = b.addText(x,y,text .. ":",c)
- setZDimension(var1)
- local var2 = b.addText(x+lengthText,y,tostring(number),cMax)
- setZDimension(var2)
- local var3 = b.addText(x+lengthText+maxLength,y, " / " .. maxNumber, c)
- setZDimension(var3)
- else
- local var1 = b.addText(x,y, text .. ":", c )
- setZDimension(var1)
- local var2 = b.addText(x+lengthText+(maxLength-lengthNumber),y, number .. " / " .. maxNumber,c)
- setZDimension(var2)
- end
- end
- -- type x y w h cBorder tBorder cBack tBack cOne tOne cTwo tTwo unit method maxNumber
- function drawBar(x,y,w,h,cBorder,tBorder,cBack,tBack,cOne,tOne,cTwo,tTwo,unit,method,maxNumber, param)
- param = param or {}
- cBorder = colorHex[cBorder]
- cBack = colorHex[cBack]
- cOne = colorHex[cOne]
- cTwo = colorHex[cTwo]
- local var1 = b.addBox(x+2,y+2,w-4,h-4,cBack,tBack)
- setZDimension(var1)
- local var2 = b.addBox(x,y,w,2,cBorder,tBorder)
- setZDimension(var2)
- local var3 = b.addBox(x,y+h-2,w,2,cBorder,tBorder)
- setZDimension(var3)
- local var4 = b.addBox(x,y+2,2,h-4,cBorder,tBorder)
- setZDimension(var4)
- local var5 = b.addBox(x+w-2,y+2,2,h-4,cBorder,tBorder)
- setZDimension(var5)
- if net.isPresentRemote(unit) and method ~= "NONE" then
- local number = "NONE"
- if net.isPresentRemote(unit) and not (method == "NONE") then
- if not (type(param) == "table") then
- return
- elseif not (param[1] == nil) and countArray(param) >= 1 then
- local noErr,res = pcall( net.callRemote, unit, method, unpack(param) )
- if noErr then
- number = tonumber(res)
- else
- number = maxNumber
- cOne = 14
- if not errorThrown then
- drawText("ERROR!!! DRAWING PROGRESS BAR WITH ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- else
- local noErr,res = pcall( net.callRemote, unit, method)
- if noErr then
- number = tonumber(res)
- else
- number = maxNumber
- cOne = 14
- cTwo = 14
- if not errorThrown then
- drawText("ERROR!!! DRAWING PROGRESS BAR WITHOUT ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- end
- local box = b.addGradientBox(x+2,y+2,math.ceil((number/maxNumber)*(w-4)),h-4,cOne,tOne,cTwo,tTwo,2)
- z = z + 1
- setZDimension(box)
- end
- end
- end
- -- type x y w h minNumber maxNumber c t fadeout unit method var
- function drawGraph(typ,x,y,w,h,minNumber,maxNumber,c,t,fadeout,var, param)
- param = param or {}
- local decrease = t/20
- c = colorHex[c]
- for relX=2,w,2 do
- if fadeout and relX >= w-20 and t > 0.05 then
- t = t - decrease
- end
- if typ == "graphPillar" then
- if type(var[relX/2]) == "number" then
- if var[relX/2] > minNumber then
- local box = b.addBox(x+relX-2,y+(h-1-(math.ceil((var[relX/2]/(maxNumber))*h))),2,(math.ceil((var[relX/2]/(maxNumber))*h)),c,t)
- setZDimension(box)
- else
- local box = b.addBox(x+relX-2,y+h-2,2,1,c,t)
- setZDimension(box)
- end
- else
- local box = b.addBox(x+relX-2,y+h-2,2,1,c,t)
- setZDimension(box)
- end
- else
- if type(var[relX/2]) == "number" then
- if var[relX/2] > minNumber then
- local box = b.addBox(x+relX-2,y+(h-1-((math.ceil((var[relX/2]/(maxNumber))*h)))),2,2,c,t)
- setZDimension(box)
- local box = b.addBox(x+relX-2,y+h-1,2,1,c,t)
- setZDimension(box)
- else
- local box = b.addBox(x+relX-2,y+h-1,2,1,c,t)
- setZDimension(box)
- end
- else
- local box = b.addBox(x+relX-2,y+h-1,2,1,c,t)
- setZDimension(box)
- end
- end
- end
- end
- function setZDimension(obj)
- local wtf = ( obj.setZ and obj.setZ(z) ) or ( obj.setZIndex and obj.setZIndex(z) )
- end
- -- ON SCREEN DRAWING MAIN METHODS
- function drawSite()
- updateGraphs()
- if selected == 0 then return end
- z = 1
- b.clear()
- innerDraw(0,0,selected)
- checkAlarm()
- errorThrown = false
- save()
- end
- function updateGraphs()
- for k,v in pairs(site) do
- for m,n in pairs(site[k]) do
- if (site[k][m][1] == "graphPillar" or site[k][m][1] == "graphPoint")
- and net.isPresentRemote(site[k][m][11])
- and site[k][m][12] ~= "NONE"
- and type(site[k][m][14]) == "table" then
- if not (site[k][m][14] == nil) and countArray(site[k][m][14]) >= 1 then
- local noErr,res = pcall( net.callRemote, site[k][m][11], site[k][m][12], unpack(site[k][m][14]) )
- if noErr then
- number = tonumber(res)
- else
- number = site[k][m][13][1]
- if not errorThrown then
- drawText("ERROR!!! UPDATING GRAPH WITH ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- else
- local noErr,res = pcall( net.callRemote, site[k][m][11], site[k][m][12])
- if noErr then
- number = tonumber(res)
- else
- number = site[k][m][13][1]
- if not errorThrown then
- drawText("ERROR!!! UPDATING GRAPH WITHOUT ARGUMENTS! " .. res ,1,1,14)
- errorThrown = true
- end
- end
- end
- table.insert(site[k][m][13],1,number)
- if type(site[k][m][13][math.ceil(site[k][m][4]/2)+1]) ~= nil then
- site[k][m][13][math.ceil(site[k][m][4]/2)+1] = nil
- end
- elseif site[k][m][1] == "graphPillar" or site[k][m][1] == "graphPoint" then
- table.insert(site[k][m][13], 1, 0)
- if type(site[k][m][13][math.ceil(site[k][m][4]/2)+1]) ~= nil then
- site[k][m][13][math.ceil(site[k][m][4]/2)+1] = nil
- end
- end
- end
- end
- end
- function innerDraw(relX,relY,s)
- for k,v in pairs(site[s]) do
- if site[s][k][1] == "frame" then
- innerDraw(site[s][k][3],site[s][k][4],site[s][k][2])
- elseif site[s][k][1] == "box" then
- drawBox(site[s][k][2]+relX,site[s][k][3]+relY,site[s][k][4],site[s][k][5],site[s][k][6],site[s][k][7],site[s][k][8],site[s][k][9])
- z = z + 1
- end
- end
- for k,v in pairs(site[s]) do
- if site[s][k][1] == "number" then
- drawNumber(site[s][k][2]+relX,site[s][k][3]+relY,site[s][k][4],site[s][k][5],site[s][k][6],site[s][k][7],site[s][k][8],site[s][k][9],site[s][k][10])
- z = z + 1
- elseif site[s][k][1] == "bar" then
- drawBar(site[s][k][2]+relX,site[s][k][3]+relY,site[s][k][4],site[s][k][5],site[s][k][6],site[s][k][7],site[s][k][8],site[s][k][9],site[s][k][10],site[s][k][11],site[s][k][12],site[s][k][13],site[s][k][14],site[s][k][15],site[s][k][16],site[s][k][17])
- z = z + 1
- elseif site[s][k][1] == "graphPillar" or site[s][k][1] == "graphPoint" then
- drawGraph(site[s][k][1],site[s][k][2]+relX,site[s][k][3]+relY,site[s][k][4],site[s][k][5],site[s][k][6],site[s][k][7],site[s][k][8],site[s][k][9],site[s][k][10],site[s][k][13],site[s][k][14])
- z = z + 1
- elseif site[s][k][1] == "text" then
- drawText(site[s][k][2],site[s][k][3]+relX,site[s][k][4]+relY,site[s][k][5])
- z = z + 1
- end
- end
- end
- -- MENU FUNCTIONS
- function betterRead(x,y,numberOnly,pos,clickX)
- local previousMode = mode
- local selectedSite = selected
- mode = "betterRead"
- term.setTextColor(colors.lightGray)
- term.setCursorBlink(true)
- local s
- if clickX < x then
- s = ""
- else
- s = tostring(site[selected][selectedObj][pos])
- end
- while true do
- term.setCursorPos(x,y)
- term.write( string.rep(' ', w - x + 1) )
- term.setCursorPos(x,y)
- if s:len()+x < w then
- term.write(s)
- else
- term.write(s:sub( s:len() - (w-x-2)))
- end
- local e = { os.pullEvent() }
- if checkEvent(e, false, true) then
- if e[1] == "mouse_click" then
- mode = "back"
- elseif e[1] == "char" then
- s = s .. e[2]
- elseif e[1] == "key" then
- if e[2] == keys.enter then
- mode = "back"
- elseif e[2] == keys.backspace then
- s = s:sub( 1, s:len() - 1 )
- end
- end
- end
- if mode == "back" then
- mode = previousMode
- break
- elseif not (mode == "betterRead") then
- break
- end
- end
- term.setTextColor(colors.white)
- if numberOnly then
- s = tonumber(s)
- if s then
- site[selectedSite][selectedObj][pos] = s
- end
- else
- site[selectedSite][selectedObj][pos] = s
- end
- term.setCursorBlink(false)
- drawSite()
- end
- function drawColor(i,y)
- drawArrows(y)
- term.setBackgroundColor(colorName[site[selected][selectedObj][i]])
- centered(" ",y)
- term.setBackgroundColor(colors.black)
- end
- function drawTransparent(i,y)
- drawArrows(y)
- centered(site[selected][selectedObj][i],y)
- end
- function changeColor(x,pos)
- if x < 25 then
- site[selected][selectedObj][pos] = site[selected][selectedObj][pos] - 1
- else
- site[selected][selectedObj][pos] = site[selected][selectedObj][pos] + 1
- end
- if site[selected][selectedObj][pos] <= 0 then
- site[selected][selectedObj][pos] = 15
- elseif site[selected][selectedObj][pos] >= 16 then
- site[selected][selectedObj][pos] = 1
- end
- end
- function changeTransparence(x,pos)
- if x < 25 then
- site[selected][selectedObj][pos] = site[selected][selectedObj][pos] - 0.1
- else
- site[selected][selectedObj][pos] = site[selected][selectedObj][pos] + 0.1
- end
- if site[selected][selectedObj][pos] < 0 then
- site[selected][selectedObj][pos] = 1
- elseif site[selected][selectedObj][pos] > 1 then
- site[selected][selectedObj][pos] = 0
- end
- end
- -- QUATERNARY MENUS
- function menuArguments(unit, method, amount, args, pos, advancedMethodsSupport)
- local previousMode = mode
- mode = "arguments"
- local param = site[selected][selectedObj][pos]
- if advancedMethodsSupport then
- for i=1, amount do
- if args[i]["type"] == "NUMBER" and param[i] == nil then
- param[i] = i
- elseif param[i] == nil then
- param[i] = "Argument" .. i
- end
- end
- end
- while true do
- -- DRAW
- amount = countArray(param)
- clear()
- centered("ENTER ARGUMENTS FOR METHOD " .. method, 1)
- fill("-", 2)
- centered("APPLY", 15)
- for i=1, amount do
- write("ARG ".. i ..": " .. param[i],11,3+i)
- end
- if not advancedMethodsSupport and amount <= 10 then
- centered("ADD NEW MANUAL ARGUMENT", 16)
- end
- if not advancedMethodsSupport and amount > 0 then
- centered("DELETE LAST ARGUMENT", 17)
- end
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event) then
- if event[4] >= 4 and event[4] <= amount+3 then
- site[selected][selectedObj][pos] = param[event[4]-3]
- if advancedMethodsSupport then
- if args[event[4]-3]["type"] == "NUMBER" then
- betterRead(18,event[4],true,pos,event[3])
- else
- betterRead(18,event[4],false,pos,event[3])
- end
- else -- not advancedMethodsSupport
- betterRead(18,event[4],false,pos,event[3])
- local tempVar = tonumber(site[selected][selectedObj][pos])
- if tempVar then
- site[selected][selectedObj][pos] = tempVar
- end
- end
- param[event[4]-3] = site[selected][selectedObj][pos]
- elseif not advancedMethodsSupport and amount <= 10 and event[4] == 16 then
- param[amount+1] = "Manual Argument" .. amount+1
- elseif not advancedMethodsSupport and amount > 0 and event[4] == 17 then
- param[amount] = nil
- elseif event[4] == 15 then
- mode = "back"
- site[selected][selectedObj][pos] = param
- save()
- end
- end
- -- BACK TO MENU
- if mode == "back" then
- mode = previousMode
- break
- elseif not (mode == "arguments") then
- break
- end
- end
- end
- function setAction(actionpos)
- if site[199][selectedObj][actionpos] == "NONE" then
- site[199][selectedObj][actionpos] = "TEXT"
- site[199][selectedObj][actionpos+1] = 1
- site[199][selectedObj][actionpos+2] = 1
- site[199][selectedObj][actionpos+3] = "UNOBTANIUM"
- site[199][selectedObj][actionpos+4] = 1
- elseif site[199][selectedObj][actionpos] == "TEXT" then
- site[199][selectedObj][actionpos] = "ACTIVATION"
- site[199][selectedObj][actionpos + 1] = "NONE"
- site[199][selectedObj][actionpos + 2] = "NONE"
- site[199][selectedObj][actionpos + 3] = {}
- site[199][selectedObj][actionpos + 4] = nil
- elseif site[199][selectedObj][actionpos] == "ACTIVATION" then
- site[199][selectedObj][actionpos] = "REDNET"
- site[199][selectedObj][actionpos + 1] = 1
- site[199][selectedObj][actionpos + 2] = "UNOBTANIUM"
- site[199][selectedObj][actionpos + 3] = nil
- site[199][selectedObj][actionpos + 4] = nil
- elseif site[199][selectedObj][actionpos] == "REDNET" then
- site[199][selectedObj][actionpos] = "NONE"
- site[199][selectedObj][actionpos + 1] = nil
- site[199][selectedObj][actionpos + 2] = nil
- end
- end
- -- TERTIARY MENUS
- function menuUnit(pos)
- clear()
- local list = net.getNamesRemote()
- if countArray(list) == 0 then
- centered("NOTHING ATTACHED TO THE NETWORK!",9)
- while true do
- local event = {os.pullEvent()}
- if event[1] == "timer" and event[2] == delay then
- drawSite()
- delay = os.startTimer(updateInterval)
- else
- return "NONE"
- end
- end
- end
- unit = 1
- local previousMode = mode
- mode = "unit"
- while true do
- -- DRAW
- clear()
- centered("SELECT A UNIT",1)
- fill("-",2)
- centered("SELECT",14)
- fill(" ",9)
- drawArrows(9)
- centered(list[unit],9)
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event) then
- x,y = event[3], event[4]
- if y >= 8 and y <= 10 then
- if x <= 25 then
- unit = unit - 1
- else
- unit = unit + 1
- end
- if unit == 0 then
- unit = countArray(list)
- elseif unit > countArray(list) then
- unit = 1
- end
- elseif y == 14 then
- site[selected][selectedObj][pos] = list[unit]
- site[selected][selectedObj][pos+1] = "NONE"
- mode = "back"
- end
- end
- -- BACK TO MENU
- if mode == "back" then
- mode = previousMode
- break
- elseif not (mode == "unit") then
- break
- end
- end
- end
- function menuMethod(pos,unit,allReturnTypes, alarm)
- alarm = alarm or 0
- allReturnTypes = allReturnTypes or false
- clear()
- if not net.isPresentRemote(unit) then
- return "NONE"
- end
- -- methods available?
- local basicMethods = net.getMethodsRemote(unit)
- if basicMethods ~= nil and countArray(basicMethods) == 0 then
- centered("NO METHOD FOUND!",9)
- while true do
- local event = {os.pullEvent()}
- if event[1] == "timer" and event[2] == delay then
- drawSite()
- delay = os.startTimer(updateInterval)
- else
- break
- end
- end
- return "NONE"
- end
- -- advanced or normal support?
- local advancedMethodsSupport = false
- local unitType = "NONE"
- local tempList = {}
- for k,v in pairs(basicMethods) do
- if v == "getAdvancedMethodsData" then
- advancedMethodsSupport = true
- unitType = peripheral.getType(unit)
- local tempP = peripheral.wrap(unit)
- tempList = tempP.getAdvancedMethodsData()
- break
- end
- end
- -- get advanced methods if possible
- local list = {}
- if advancedMethodsSupport then
- local counter = 1
- for k,v in pairs(tempList) do
- if allReturnTypes or ( v["returnType"] ~= nil and v["returnType"] ) or ( v["returnTypes"][1] == "NUMBER" ) then
- table.insert(list, 1, v)
- counter = counter - 1
- end
- counter = counter + 1
- end
- else
- list = net.getMethodsRemote(unit)
- end
- -- still methods with number as return value available?
- if advancedMethodsSupport and list ~= nil and countArray(list) == 0 then
- centered("NO METHOD FOUND!",9)
- while true do
- local event = {os.pullEvent()}
- if event[1] == "timer" and event[2] == delay then
- drawSite()
- delay = os.startTimer(updateInterval)
- else
- break
- end
- end
- return "NONE"
- end
- -- selection of the method
- local method = 1
- for k,v in pairs(list) do
- method = method + 1
- if advancedMethodsSupport and v["name"] == site[selected][selectedObj][pos] then
- break
- elseif not advancedMethodsSupport and v == site[selected][selectedObj][pos] then
- break
- end
- end
- method = method - 1
- local previousMode = mode
- local previousSelected = selected
- mode = "method"
- while true do
- -- DRAW
- clear()
- centered("SELECT A METHOD FROM " .. unit ,1)
- fill("-",2)
- centered("SELECT",16)
- local methodName = "UNKNOWN"
- local methodDescription = "UNKNOWN! No Advanced Methods Support available!"
- local methodReturnType = "UNKNOWN"
- local methodArguments = 1337
- local methodArgs = {}
- if advancedMethodsSupport then
- local counter = 1
- for k, v in pairs(list) do
- if counter == method then
- methodName = v["name"]
- methodDescription = v["description"]
- methodReturnType = v["returnType"] or v["returnTypes"][1]
- methodArguments = countArray(v["args"]) or 0
- methodArgs = v["args"] or {}
- break
- end
- counter = counter + 1
- end
- else
- methodDescription = "UNKNOWN! No Advanced Methods Support available!"
- methodReturnType = "UNKNOWN"
- methodArguments = 0
- methodName = list[method]
- end
- fill(" ",6)
- drawArrows(6)
- centered(methodName, 6)
- term.setCursorPos(1,8)
- print(" Description: " .. methodDescription)
- print(" Returns: " .. methodReturnType)
- print(" Arguments: " .. methodArguments)
- if advancedMethodsSupport and methodArguments >= 1 then
- centered("SET OR CHANGE ARGUMENTS", 15)
- elseif not advancedMethodsSupport then
- centered("SET OR CHANGE ARGUMENTS (OWN RISK)", 15)
- end
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event) then
- x,y = event[3], event[4]
- if y >= 5 and y <= 8 then
- if alarm > 0 then
- site[selected][selectedObj][alarm] = {}
- else
- site[selected][selectedObj][countArray(site[selected][selectedObj])] = {}
- end
- if x <= 25 then
- method = method - 1
- else
- method = method + 1
- end
- if method == 0 then
- method = countArray(list)
- elseif method > countArray(list) then
- method = 1
- end
- elseif advancedMethodsSupport and methodArguments >= 1 and y == 15 then
- if alarm == 0 then
- menuArguments(unit, methodName, methodArguments, methodArgs, countArray(site[selected][selectedObj]), true)
- else
- menuArguments(unit, methodName, methodArguments, methodArgs, alarm, true)
- end
- elseif not advancedMethodsSupport and y == 15 then
- if alarm == 0 then
- menuArguments(unit, methodName, countArray(site[selected][selectedObj][countArray(site[selected][selectedObj])]), methodArgs, countArray(site[selected][selectedObj]), false)
- else
- menuArguments(unit, methodName, countArray(site[selected][selectedObj][alarm]), methodArgs, alarm, false)
- end
- elseif y == 16 then
- mode = "back"
- end
- end
- -- BACK TO MENU
- if mode == "back" then
- mode = previousMode
- if advancedMethodsSupport then
- site[previousSelected][selectedObj][pos] = list[method]["name"]
- else
- site[previousSelected][selectedObj][pos] = list[method]
- end
- break
- elseif not (mode == "method") then
- if advancedMethodsSupport then
- site[previousSelected][selectedObj][pos] = list[method]["name"]
- else
- site[previousSelected][selectedObj][pos] = list[method]
- end
- break
- end
- end
- end
- -- SECONDARY MENUS
- function menuSiteOrFrame(setMode)
- mode = setMode
- if mode == "site" then
- selected = 1
- else
- selected = 100
- end
- selectedObj = 1
- while true do
- -- DRAW
- clear()
- drawArrows(1)
- if mode == "site" then
- centered("SITE " .. selected ,1)
- elseif mode == "frame" then
- centered("FRAME " .. selected-99 ,1)
- end
- fill("-",2)
- if type(site[selected][selectedObj]) == "table" then
- centered(selectedObj.. " - " .. site[selected][selectedObj][1] , 3)
- else
- centered(selectedObj , 3)
- end
- drawArrows(3)
- fill("-",4)
- write("BACK",48,1)
- if type(site[selected][selectedObj]) == "table" then -- object exists
- write("DELETE",1,1)
- if site[selected][selectedObj][1] == "text" then -- TEXT
- write("TEXT: " .. site[selected][selectedObj][2],10,7)
- write("X: " .. site[selected][selectedObj][3],10,9)
- write("Y: " .. site[selected][selectedObj][4],10,11)
- drawColor(5,13)
- elseif site[selected][selectedObj][1] == "box" then -- BOX
- write("X: " .. site[selected][selectedObj][2],10,5)
- write("Y: " .. site[selected][selectedObj][3],10,6)
- write("WIDTH: " .. site[selected][selectedObj][4],10,7)
- write("HEIGHT: " .. site[selected][selectedObj][5],10,8)
- drawColor(6,9)
- drawTransparent(7,10)
- drawColor(8,11)
- drawTransparent(9,12)
- elseif site[selected][selectedObj][1] == "number" then -- NUMBER
- write("X: "..site[selected][selectedObj][2],10,5)
- write("Y: "..site[selected][selectedObj][3],10,6)
- write("TEXT: "..site[selected][selectedObj][4],10,7)
- write("UNIT: "..site[selected][selectedObj][5],10,8)
- write("METHOD: "..site[selected][selectedObj][6],10,9)
- write("MAX: "..site[selected][selectedObj][7],10,10)
- drawColor(8,11)
- drawColor(9,12)
- elseif site[selected][selectedObj][1] == "bar" then -- BAR
- write("X: "..site[selected][selectedObj][2],10,5)
- write("Y: "..site[selected][selectedObj][3],10,6)
- write("WIDTH: "..site[selected][selectedObj][4],10,7)
- write("HEIGHT: "..site[selected][selectedObj][5],10,8)
- write("UNIT: "..site[selected][selectedObj][14],10,9)
- write("METHOD: "..site[selected][selectedObj][15],29,9)
- write("MAX: "..site[selected][selectedObj][16],10,10)
- drawColor(6,11)
- drawTransparent(7,12)
- drawColor(8,13)
- drawTransparent(9,14)
- drawColor(10,15)
- drawTransparent(11,16)
- drawColor(12,17)
- drawTransparent(13,18)
- write("ADD AUTO TEXT", 10, 19)
- elseif site[selected][selectedObj][1] == "graphPillar" or site[selected][selectedObj][1] == "graphPoint" then
- -- GRAPHS
- write("X: "..site[selected][selectedObj][2],10,5)
- write("Y: "..site[selected][selectedObj][3],10,6)
- write("WIDTH: "..site[selected][selectedObj][4],10,7)
- write("HEIGHT: "..site[selected][selectedObj][5],10,8)
- write("UNIT: "..site[selected][selectedObj][11],10,9)
- write("METHOD: "..site[selected][selectedObj][12],10,10)
- write("MIN: "..site[selected][selectedObj][6],10,11)
- write("MAX: "..site[selected][selectedObj][7],10,12)
- drawColor(8,13)
- drawTransparent(9,14)
- write("FADEOUT: "..tostring(site[selected][selectedObj][10]),10,15)
- write("TYPE: " ..site[selected][selectedObj][1],10,16)
- write("ADD AUTO BOX", 10, 17)
- elseif site[selected][selectedObj][1] == "frame" then -- FRAME
- centered(selectedFrame-99,5)
- drawArrows(5)
- fill("-",6)
- write("X: "..site[selected][selectedObj][3],10,8)
- write("Y: "..site[selected][selectedObj][4],10,10)
- end
- else --create new object
- write("TEXT",20,6)
- write("BOX",20,7)
- write("NUMBER",20,8)
- write("BAR",20,9)
- write("GRAPH (PILLAR)",20,10)
- write("GRAPH (POINT)",20,11)
- if mode == "site" then
- write("FRAME",20,12)
- end
- end
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event) then
- x, y = event[3], event[4]
- if y == 1 and x >= w-4 then
- mode = "mainmenu"
- elseif type(site[selected][selectedObj]) == "table" and y == 1 and x <=6 then
- site[selected][selectedObj] = nil
- if selectedObj >= 2 then
- selectedObj = selectedObj - 1
- end
- elseif y == 1 then
- selectedObj = 1
- if x < 25 then
- selected = selected - 1
- else
- selected = selected + 1
- end
- if mode == "site" then
- if selected <= 0 then
- selected = 99
- elseif selected >= 100 then
- selected = 1
- end
- elseif mode == "frame" then
- if selected <= 99 then
- selected = 198
- elseif selected >= 199 then
- selected = 100
- end
- end
- elseif y >= 2 and y <= 4 then
- if x < 25 then
- selectedObj = selectedObj - 1
- else
- selectedObj = selectedObj + 1
- end
- if selectedObj == 0 then
- selectedObj = 1
- end
- elseif type(site[selected][selectedObj]) == "table" then
- if site[selected][selectedObj][1] == "text" then
- if y == 7 then
- betterRead(16,y,false,2,x)
- elseif y == 9 then
- betterRead(16,y,true,3,x)
- elseif y == 11 then
- betterRead(16,y,true,4,x)
- elseif y == 13 then
- changeColor(x,5)
- end
- elseif site[selected][selectedObj][1] == "box" then
- if y == 5 then
- betterRead(18,y,true,2,x)
- elseif y == 6 then
- betterRead(18,y,true,3,x)
- elseif y == 7 then
- betterRead(18,y,true,4,x)
- elseif y == 8 then
- betterRead(18,y,true,5,x)
- elseif y == 9 then
- changeColor(x,6)
- elseif y == 10 then
- changeTransparence(x,7)
- elseif y == 11 then
- changeColor(x,8)
- elseif y == 12 then
- changeTransparence(x,9)
- end
- elseif site[selected][selectedObj][1] == "number" then
- if y == 5 then
- betterRead(18,y,true,2,x)
- elseif y == 6 then
- betterRead(18,y,true,3,x)
- elseif y == 7 then
- betterRead(18,y,false,4,x)
- elseif y == 8 then
- menuUnit(5)
- elseif y == 9 then
- if x < 18 then
- menuMethod(6,site[selected][selectedObj][5],true)
- else
- menuMethod(6,site[selected][selectedObj][5],false)
- end
- elseif y == 10 then
- betterRead(18,y,true,7,x)
- elseif y == 11 then
- changeColor(x,8)
- elseif y == 12 then
- changeColor(x,9)
- end
- elseif site[selected][selectedObj][1] == "bar" then
- if y == 5 then
- betterRead(18,y,true,2,x)
- elseif y == 6 then
- betterRead(18,y,true,3,x)
- elseif y == 7 then
- betterRead(18,y,true,4,x)
- elseif y == 8 then
- betterRead(18,y,true,5,x)
- elseif y == 9 then
- if x < 28 then
- menuUnit(14)
- else
- if x < 18 then
- menuMethod(15,site[selected][selectedObj][14],true)
- else
- menuMethod(15,site[selected][selectedObj][14],false)
- end
- end
- elseif y == 10 then
- betterRead(18,y,true,16,x)
- elseif y == 11 then
- changeColor(x,6)
- elseif y == 12 then
- changeTransparence(x,7)
- elseif y == 13 then
- changeColor(x,8)
- elseif y == 14 then
- changeTransparence(x,9)
- elseif y == 15 then
- changeColor(x,10)
- elseif y == 16 then
- changeTransparence(x,11)
- elseif y == 17 then
- changeColor(x,12)
- elseif y == 18 then
- changeTransparence(x,13)
- elseif y == 19 then
- local bar = site[selected][selectedObj]
- local textProperties = {"text","YOUR TEXT",bar[2]-59,bar[3]+4,bar[8]}
- table.insert(site[selected], selectedObj+1, textProperties )
- selectedObj = selectedObj+1
- betterRead(25,y,false,2,50)
- site[selected][selectedObj][3] = bar[2] - 10 - math.floor(5.5 * #site[selected][selectedObj][2])
- end
- elseif site[selected][selectedObj][1] == "graphPillar" or site[selected][selectedObj][1] == "graphPoint" then
- if y == 5 then
- betterRead(19,y,true,2,x)
- elseif y == 6 then
- betterRead(19,y,true,3,x)
- elseif y == 7 then
- betterRead(19,y,true,4,x)
- elseif y == 8 then
- betterRead(19,y,true,5,x)
- elseif y == 9 then
- menuUnit(11)
- elseif y == 10 then
- if x < 18 then
- menuMethod(12,site[selected][selectedObj][11],true)
- else
- menuMethod(12,site[selected][selectedObj][11],false)
- end
- elseif y == 11 then
- betterRead(19,y,true,6,x)
- elseif y == 12 then
- betterRead(19,y,true,7,x)
- elseif y == 13 then
- changeColor(x,8)
- elseif y == 14 then
- changeTransparence(x,9)
- elseif y == 15 then
- site[selected][selectedObj][10] = not site[selected][selectedObj][10]
- elseif y == 16 then
- if site[selected][selectedObj][1] == "graphPoint" then
- site[selected][selectedObj][1] = "graphPillar"
- elseif site[selected][selectedObj][1] == "graphPillar" then
- site[selected][selectedObj][1] = "graphPoint"
- end
- elseif y == 17 then
- local g = site[selected][selectedObj]
- local boxProperties = {"box", g[2]-4, g[3]-6, g[4]+8, g[5]+10, 1, 0.4, g[8], 0.9}
- table.insert(site[selected], selectedObj+1, boxProperties )
- selectedObj = selectedObj+1
- end
- elseif site[selected][selectedObj][1] == "frame" then
- if y == 5 then
- if x < 25 then
- selectedFrame = selectedFrame - 1
- else
- selectedFrame = selectedFrame + 1
- end
- if selectedFrame == 99 then
- selectedFrame = 198
- elseif selectedFrame == 199 then
- selectedFrame = 100
- end
- site[selected][selectedObj][2] = selectedFrame
- elseif y == 8 then
- betterRead(13,y,true,3,x)
- elseif y == 10 then
- betterRead(13,y,true,4,x)
- end
- end
- else -- CREATE
- if y == 6 then
- site[selected][selectedObj] = {"text","UNOBTANIUM",1,1,1}
- elseif y == 7 then
- site[selected][selectedObj] = {"box",1,1,10,10,1,1,15,1}
- elseif y == 8 then
- site[selected][selectedObj] = {"number",1,1,"UNOBTANIUM","NONE","NONE",1337,1,1,{}}
- elseif y == 9 then
- site[selected][selectedObj] = {"bar",1,1,40,15,1,1,2,1,3,1,4,1,"NONE","NONE",1337, {}}
- elseif y == 10 then
- site[selected][selectedObj] = {"graphPillar",1,1,100,40,0,1337,1,1,false,"NONE","NONE",{}, {}}
- elseif y == 11 then
- site[selected][selectedObj] = {"graphPoint",1,1,100,40,0,1337,1,1,false,"NONE","NONE",{}, {}}
- elseif y == 12 and mode == "site" then
- site[selected][selectedObj] = {"frame",100,1,1}
- end
- end
- end
- -- BACK TO MENU
- if not (mode == "site" or mode == "frame") then
- break
- end
- end
- end
- function menuAlarm(pos)
- mode = "alarm"
- local previousSelected = selected
- selected = 199
- selectedObj = 1
- while true do
- -- DRAW
- clear()
- b.clear()
- centered("ALARM'N'ACTION", 1)
- fill("-",2)
- if type(site[199][selectedObj]) == "table" then
- centered(selectedObj .. " - " .. site[199][selectedObj][1], 3)
- else
- centered(selectedObj, 3)
- end
- drawArrows(3)
- fill("-",4)
- write("BACK", 48, 1)
- local relY = 0
- local relC = 0
- if type(site[199][selectedObj]) == "table" and site[199][selectedObj][1] == "ALARM" then
- write("DELETE", 1, 1)
- write("UNIT: "..site[199][selectedObj][2], 10, 6)
- write("METHOD: "..site[199][selectedObj][3], 10, 7)
- write("NUMBER: "..site[199][selectedObj][5] .. " " .. site[199][selectedObj][6], 10, 8)
- write("ACTION: "..site[199][selectedObj][7], 10, 9)
- relY = 2
- relC = 4
- elseif type(site[199][selectedObj]) == "table" and site[199][selectedObj][1] == "CHAT" then
- write("DELETE", 1, 1)
- write("COMMAND: $$"..site[199][selectedObj][2], 10, 6)
- write("ACTION: "..site[199][selectedObj][3], 10, 7)
- relY = 0
- relC = 0
- elseif type(site[199][selectedObj]) == "table" and site[199][selectedObj][1] == "REDNET" then
- write("DELETE", 1, 1)
- write("MESSAGE: "..site[199][selectedObj][2], 10, 6)
- write("ACTION: "..site[199][selectedObj][3], 10, 7)
- relY = 0
- relC = 0
- else
- write("ALARM", 10, 9)
- write("CHAT", 10, 10)
- write("REDNET", 10 , 11)
- end
- if type(site[199][selectedObj]) == "table" then
- if site[199][selectedObj][3+relC] == "TEXT" then
- write("| X: "..site[199][selectedObj][4+relC], 10, 8+relY)
- write("| Y: "..site[199][selectedObj][5+relC], 10, 9+relY)
- write("| TEXT: "..site[199][selectedObj][6+relC], 10, 10+relY)
- drawColor(7+relC, 11+relY)
- elseif site[199][selectedObj][3+relC] == "ACTIVATION" then
- write("| UNIT: "..site[199][selectedObj][4+relC], 10, 8+relY)
- write("| METHOD: "..site[199][selectedObj][5+relC], 10, 9+relY)
- elseif site[199][selectedObj][3+relC] == "REDNET" then
- --write("| SIDE: "..rednetSide[site[199][selectedObj][4+relC]], 10, 8+relY)
- write("| MESSAGE: "..site[199][selectedObj][5+relC], 10, 8+relY)
- end
- end
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event, true) then
- x, y = event[3], event[4]
- if y == 1 and x <= 6 and type(site[199][selectedObj]) == "table" then
- site[199][selectedObj] = nil
- elseif y == 1 and x >= 48 then
- save()
- selected = previousSelected
- selectedObj = 1
- mode = "mainmenu"
- elseif y == 3 or y == 4 then
- if x > 25 then
- selectedObj = selectedObj + 1
- elseif selectedObj > 1 then
- selectedObj = selectedObj - 1
- end
- elseif type(site[199][selectedObj]) == "table" and site[199][selectedObj][1] == "ALARM" then -- ALARM
- if y == 6 then
- menuUnit(2)
- elseif y == 7 then
- if x < 20 then
- menuMethod(3, site[199][selectedObj][2],true,4)
- else
- menuMethod(3, site[199][selectedObj][2],false,4)
- end
- elseif y == 8 and x >=19 and x <= 21 then
- if site[199][selectedObj][5] == "=" then
- site[199][selectedObj][5] = ">"
- elseif site[199][selectedObj][5] == ">" then
- site[199][selectedObj][5] = "<"
- elseif site[199][selectedObj][5] == "<" then
- site[199][selectedObj][5] = "="
- end
- elseif y == 8 then
- betterRead(23,y,true,6,x)
- elseif y == 9 then
- setAction(7)
- elseif site[199][selectedObj][7] == "TEXT" then -- ALARM: TEXT
- if y == 10 then
- betterRead(21,y,true,8,x)
- elseif y == 11 then
- betterRead(21,y,true,9,x)
- elseif y == 12 then
- betterRead(21,y,false,10,x)
- elseif y == 13 then
- changeColor(x, 11)
- end
- elseif site[199][selectedObj][7] == "ACTIVATION" then -- ALARM: ACTIVATION
- if y == 10 then
- menuUnit(8)
- elseif y == 11 then
- if x < 20 then
- menuMethod(9, site[199][selectedObj][8],true,10)
- else
- menuMethod(9, site[199][selectedObj][8],false,10)
- end
- end
- elseif site[199][selectedObj][7] == "REDNET" then -- ALARM: REDNET
- if y == 10 then
- site[199][selectedObj][8] = site[199][selectedObj][8] + 1
- if site[199][selectedObj][8] > countArray(rednetSide) then
- site[199][selectedObj][8] = 1
- end
- elseif y == 11 then
- betterRead(21,y,false,9,x)
- end
- end
- elseif type(site[199][selectedObj]) == "table" and ( site[199][selectedObj][1] == "CHAT" or site[199][selectedObj][1] == "REDNET") then -- CHAT AND REDNET
- if y == 6 then
- betterRead(21,y,false,2,x)
- elseif y == 7 then
- setAction(3)
- elseif site[199][selectedObj][3] == "TEXT" then -- CHAT OR REDNET: TEXT
- if y == 8 then
- betterRead(21,y,true,4,x)
- elseif y == 9 then
- betterRead(21,y,true,5,x)
- elseif y == 10 then
- betterRead(21,y,false,6,x)
- elseif y == 11 then
- changeColor(x, 7)
- end
- elseif site[199][selectedObj][3] == "ACTIVATION" then -- CHAT OR REDNET: ACTIVATION
- if y == 8 then
- menuUnit(4)
- elseif y == 9 then
- if x < 20 then
- menuMethod(5, site[199][selectedObj][4],true,6)
- else
- menuMethod(5, site[199][selectedObj][4],false,6)
- end
- end
- elseif site[199][selectedObj][3] == "REDNET" then -- CHAT OR REDNET: REDNET
- --[[if y == 8 then
- site[199][selectedObj][4] = site[199][selectedObj][4] + 1
- if site[199][selectedObj][4] > countArray(rednetSide) then
- site[199][selectedObj][4] = 1
- end]]
- if y == 8 then
- betterRead(21,y,false,5,x)
- end
- end
- else -- CREATE NEW
- if y == 9 then
- site[199][selectedObj] = {"ALARM","NONE","NONE",{},"=", 42, "NONE"}
- elseif y == 10 then
- site[199][selectedObj] = {"CHAT","NONE","NONE"}
- elseif y == 11 then
- site[199][selectedObj] = {"REDNET","NONE","NONE"}
- end
- end
- end
- -- BACK TO MENU
- if not (mode == "alarm") then
- break
- end
- end
- end
- -- PRIMARY MENUS
- function mainMenu()
- mode = "mainmenu"
- while true do
- for _, side in pairs(rednetSide) do
- if peripheral.getType(side) == "modem" then
- rednet.open(side)
- end
- end
- -- DRAW
- clear()
- centered("CLIENT FOR OPENPERIPERAL'S GLASSES", 1)
- fill("-", 2)
- write("by UNOBTANIUM", w-13, h)
- write("Site",20,6)
- write("Frame",20,8)
- write("Alarm'n'Action",20,10)
- write("Quit",20,13)
- -- EVENT
- local event = { os.pullEvent() }
- if checkEvent(event) then
- x, y = event[3], event[4]
- if y == 6 then
- menuSiteOrFrame("site")
- elseif y == 8 then
- menuSiteOrFrame("frame")
- elseif y == 10 then
- menuAlarm()
- elseif y == 13 then
- save()
- b.clear()
- mode = "quit"
- end
- end
- if mode == "quit" then
- break
- end
- end
- end
- -- EVENT HANDLING
- function checkEvent(event, justUpdate, charAndKeyEvent)
- charAndKeyEvent = charAndKeyEvent or false
- justUpdate = justUpdate or false
- if event[1] == "timer" and event[2] == delay then
- if justUpdate then
- updateGraphs()
- else
- drawSite()
- end
- delay = os.startTimer(updateInterval)
- elseif event[1] == "mouse_click" then
- return true
- elseif charAndKeyEvent and ( event[1] == "char" or event[1] == "key" ) then
- return true
- elseif event[1] == "chat_command" then
- mode = "mainmenu"
- checkAlarm(event[2])
- if event[2] == "clear" or event[2] == "" then
- b.clear()
- selected = 0
- elseif event[2] == "sync" then
- drawText("Sync!", 10, 10, 14)
- if selected == 0 then
- selected = 1
- end
- sleep(2)
- delay = os.startTimer(0.1)
- else
- for i=1,99 do
- if event[2] == "site"..i then
- selected = i
- drawSite()
- break
- end
- end
- end
- elseif event[1] == "rednet_message" then
- checkAlarm("", tostring(event[3]))
- end
- return false
- end
- -- START
- load()
- mainMenu()
- clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement