Advertisement
Guest User

startup

a guest
Jun 8th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.75 KB | None | 0 0
  1. for i,v in ipairs(peripherals.getNames()) do
  2.   if peripheral.getType(v) == "modem" then
  3.     rednet.open(v)
  4.   end
  5. end
  6.  
  7. function clear()
  8.   term.clear()
  9.   term.setCursorPos(1,1)
  10. end
  11.  
  12. function choose(a,s)
  13.   selection = 1
  14.   min = 1
  15.   max = #a
  16.  
  17.   while true do
  18.     clear()
  19.     if s ~= nil then
  20.       print(s)
  21.       print()
  22.     end
  23.    
  24.     for i,v in ipairs(a) do
  25.       if selection == i then
  26.         print(">"..v)
  27.       else
  28.         print(" "..v)
  29.       end
  30.     end
  31.    
  32.     e,p1 = os.pullEvent()
  33.     if e == "key" then
  34.       if p1 == 200 then
  35.         if selection == min then
  36.           selection = max
  37.         else
  38.           selection = selection - 1
  39.         end
  40.       elseif p1 == 208 then
  41.         if selection == max then
  42.           selection = min
  43.         else
  44.           selection = selection + 1
  45.         end
  46.       elseif p1 == 28 then
  47.         break
  48.       end
  49.     end
  50.   end
  51.   return a[selection]
  52. end
  53.  
  54.  
  55. if not fs.exists("data") then
  56.   clear()
  57.   print("SETTING UP KEY LOCK")
  58.   print()
  59.   sleep(1)
  60.   doorSide = choose(rs.getSides(),"Side out")
  61.   clear()
  62.   stateString = choose({"ACTIVE","DEACTIVE"},"Default state")
  63.   if stateString == "ACTIVE" then
  64.     state = true
  65.   else
  66.     state = false
  67.   end
  68.   clear()
  69.   term.write("Name of Key Lock: ")
  70.   name = read()
  71.   clear()
  72.   term.write("Cearance needed to change state: ")
  73.   clearance = tonumber(read())
  74.   clear()
  75.   term.write("Clearance needed to go through activate: ")
  76.   aClearance = tonumber(read())
  77.   clear()
  78.   term.write("Server ID? ")
  79.   serverID = tonumber(read())
  80.   clear()
  81.   print("LOG IN")
  82.   print()
  83.   term.write("Username: ")
  84.   username = read()
  85.   term.write("Password: ")
  86.   password = read("*")
  87.   clear()
  88.   print("AUTHORIZING KEY LOCK")
  89.   rednet.send(serverID,{ {username, " ", 0, password},"LOG_IN" })
  90.   id,msg,d = rednet.receive(.3)
  91.   cID = os.getComputerID()
  92.   if id == serverID then
  93.     print("AUTHORIZED... REGISTERING KEY LOCK")
  94.     rednet.send(serverID, {msg,"REGISTER_KEY_LOCK",cID,stateString,clearance,name,aClearance})
  95.     id,msg,d = rednet.receive(.3)
  96.     if id == serverID then
  97.       data = {doorSide,stateString,state,serverID}
  98.      
  99.       file = fs.open("data","w")
  100.       file.write(textutils.serialise(data))
  101.       file.close()
  102.     else
  103.       print("CLEARANCE TOO LOW... EXITING PROGRAM")
  104.       sleep(1)
  105.       return exit
  106.     end
  107.      
  108.   else
  109.     print("UNAUTHORIZED... EXITING PROGRAM")
  110.     sleep(1)
  111.     return exit
  112.   end
  113.  
  114. else
  115.   file = fs.open("data", "r")
  116.   data = file.readAll()
  117.   file.close()
  118.  
  119.   stats = textutils.unserialise(data)
  120.   doorSide = stats[1]
  121.   stateString = stats[2]
  122.   state = stats[3]
  123.   serverID = stats[4]
  124. end
  125.  
  126. while true do
  127.   clear()
  128.   print(stateString)
  129.   e,p1,p2,p3,p4 = os.pullEvent()
  130.   if e == "disk" then
  131.     if fs.exists("disk/access") and state then
  132.       file = fs.open("disk/access", "r")
  133.       data = file.readAll()
  134.       file.close()
  135.      
  136.       rednet.send(serverID, {"DEVICE","KEY_LOCK","GET_APPROVED_IDS"})
  137.       id,approvedIDs,d = rednet.receive(.3)
  138.      
  139.       if id == serverID and approvedIDs ~= nil then
  140.         for i,v in ipairs(approvedIDs) do
  141.           if v == data then
  142.             rs.setOutput(doorSide, true)
  143.           end
  144.         end
  145.       end
  146.     end
  147.   elseif e == "disk_eject" then
  148.     rs.setOutput(doorSide, false)
  149.   elseif e == "modem_message" then
  150.    
  151.     message = p4["message"]
  152.     id = p3
  153.    
  154.     if id == serverID then
  155.       if message == "GETSTATE" then
  156.         rednet.send(id, state)
  157.       elseif message == "CHANGE" then
  158.         state = not state
  159.         if state then
  160.           stateString = "ACTIVE"
  161.         else
  162.           stateString = "DEACTIVE"
  163.         end
  164.         rednet.send(id, stateString)
  165.       end
  166.     end
  167.    
  168.   end
  169. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement