Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for i,v in ipairs(peripherals.getNames()) do
- if peripheral.getType(v) == "modem" then
- rednet.open(v)
- end
- end
- function clear()
- term.clear()
- term.setCursorPos(1,1)
- end
- function choose(a,s)
- selection = 1
- min = 1
- max = #a
- while true do
- clear()
- if s ~= nil then
- print(s)
- print()
- end
- for i,v in ipairs(a) do
- if selection == i then
- print(">"..v)
- else
- print(" "..v)
- end
- end
- e,p1 = os.pullEvent()
- if e == "key" then
- if p1 == 200 then
- if selection == min then
- selection = max
- else
- selection = selection - 1
- end
- elseif p1 == 208 then
- if selection == max then
- selection = min
- else
- selection = selection + 1
- end
- elseif p1 == 28 then
- break
- end
- end
- end
- return a[selection]
- end
- if not fs.exists("data") then
- clear()
- print("SETTING UP KEY LOCK")
- print()
- sleep(1)
- doorSide = choose(rs.getSides(),"Side out")
- clear()
- stateString = choose({"ACTIVE","DEACTIVE"},"Default state")
- if stateString == "ACTIVE" then
- state = true
- else
- state = false
- end
- clear()
- term.write("Name of Key Lock: ")
- name = read()
- clear()
- term.write("Cearance needed to change state: ")
- clearance = tonumber(read())
- clear()
- term.write("Clearance needed to go through activate: ")
- aClearance = tonumber(read())
- clear()
- term.write("Server ID? ")
- serverID = tonumber(read())
- clear()
- print("LOG IN")
- print()
- term.write("Username: ")
- username = read()
- term.write("Password: ")
- password = read("*")
- clear()
- print("AUTHORIZING KEY LOCK")
- rednet.send(serverID,{ {username, " ", 0, password},"LOG_IN" })
- id,msg,d = rednet.receive(.3)
- cID = os.getComputerID()
- if id == serverID then
- print("AUTHORIZED... REGISTERING KEY LOCK")
- rednet.send(serverID, {msg,"REGISTER_KEY_LOCK",cID,stateString,clearance,name,aClearance})
- id,msg,d = rednet.receive(.3)
- if id == serverID then
- data = {doorSide,stateString,state,serverID}
- file = fs.open("data","w")
- file.write(textutils.serialise(data))
- file.close()
- else
- print("CLEARANCE TOO LOW... EXITING PROGRAM")
- sleep(1)
- return exit
- end
- else
- print("UNAUTHORIZED... EXITING PROGRAM")
- sleep(1)
- return exit
- end
- else
- file = fs.open("data", "r")
- data = file.readAll()
- file.close()
- stats = textutils.unserialise(data)
- doorSide = stats[1]
- stateString = stats[2]
- state = stats[3]
- serverID = stats[4]
- end
- while true do
- clear()
- print(stateString)
- e,p1,p2,p3,p4 = os.pullEvent()
- if e == "disk" then
- if fs.exists("disk/access") and state then
- file = fs.open("disk/access", "r")
- data = file.readAll()
- file.close()
- rednet.send(serverID, {"DEVICE","KEY_LOCK","GET_APPROVED_IDS"})
- id,approvedIDs,d = rednet.receive(.3)
- if id == serverID and approvedIDs ~= nil then
- for i,v in ipairs(approvedIDs) do
- if v == data then
- rs.setOutput(doorSide, true)
- end
- end
- end
- end
- elseif e == "disk_eject" then
- rs.setOutput(doorSide, false)
- elseif e == "modem_message" then
- message = p4["message"]
- id = p3
- if id == serverID then
- if message == "GETSTATE" then
- rednet.send(id, state)
- elseif message == "CHANGE" then
- state = not state
- if state then
- stateString = "ACTIVE"
- else
- stateString = "DEACTIVE"
- end
- rednet.send(id, stateString)
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement