Advertisement
Guest User

Untitled

a guest
Oct 25th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.05 KB | None | 0 0
  1. os.unloadAPI("ocs/apis/sensor")
  2. os.loadAPI("ocs/apis/sensor")
  3. local prox = sensor.wrap("top")
  4. local modem = peripheral.wrap("right")
  5. local playerName = ""
  6. local playerNames = {}
  7. local secretPhrase = ""
  8. local portNum = ""
  9. local answer = ""
  10. local inputting
  11. local checking
  12. local heldItemCheck
  13. local item
  14. local heldItem
  15. local b = 0
  16. --This function checks what item the player is holding
  17. function itemCheck(name)
  18. local targets = prox.getTargets()
  19. --Read data from sensor
  20.     for k, v in pairs(targets) do
  21.         if ((v.Name) == "Player") then
  22.             targetsDetail = prox.getTargetDetails(k)
  23.             if not(targetsDetail == nil) then
  24.                 if name == targetsDetail.Username then
  25.                     heldItem = targetsDetail.HeldItem.Name
  26.                     return heldItem
  27.                 end
  28.             end
  29.         end
  30.     end
  31. end
  32. --This functions checks our array "playerNames" which contains the players
  33. --we allowed access to this door
  34. --If the for loops finds a match, it will open the door
  35. function arrayCheck(playerNames,playerName,secretPhrase,portNum,item,heldItem)
  36. local port = tonumber(portNum)
  37.     for key, value in pairs(playerNames) do
  38.         if value == playerName and item == nil then
  39.             modem.transmit(port,524,secretPhrase)
  40.         elseif value == playerName and item == heldItem then
  41.             modem.transmit(port,524,secretPhrase)
  42.         end      
  43.     end
  44.     modem.transmit(port,524,"not_player")
  45. end
  46. --This checks the names of the players near the sensor
  47. --and then sends this daya to the "arrayCheck" function
  48. function nameCheck(secretPhrase,playerNames,portNum,item)
  49. local targets = prox.getTargets()
  50. --Read data from sensor
  51.     for k, v in pairs(targets) do
  52.         if ((v.Name) == "Player") then
  53.             targetsDetail = prox.getTargetDetails(k)
  54.             if not(targetsDetail == nil) then
  55.                 playerName = targetsDetail.Username
  56.                 heldItem = targetsDetail.HeldItem.Name
  57.             end
  58.         end
  59.     end
  60.     arrayCheck(playerNames,playerName,secretPhrase,portNum,item,heldItem)
  61.     targets = nil
  62.     targetsDetail = nil
  63.     playerName = nil
  64. end
  65. --This functions checks if there is a file named "proxInfo"
  66. --If there is, it will tell the program to just read from that
  67. --if there is no file it will tell the program we need to make one
  68. function fileCheck(name)
  69. local f = fs.open(name, "r")
  70.     if f~=nil then
  71.         repeat
  72.             local line = f.readLine()
  73.             if tostring(line) == "END" then
  74.                 f.close()
  75.                 sleep(1)
  76.                 return true
  77.             end
  78.         until line == nil
  79.         f.close()
  80.         sleep(1)
  81.         return false
  82.     else
  83.         return false
  84.     end
  85. end
  86. --The main loop of the program on startup
  87. while true do
  88.     modem.closeAll()
  89.     if fileCheck("proxInfo") then
  90.         inputting = false
  91.         answer = "y"
  92.         checking = false
  93.     else
  94.         inputting = true
  95.         checking = true
  96.     end
  97.     while inputting == true do
  98.         term.clear()
  99.         term.setCursorPos(1,1)
  100.         write("Enter a secret phrase: ")
  101.         secretPhrase = read()
  102. -----------------------------------
  103.         term.clear()
  104.         term.setCursorPos(1,1)
  105.         write("Enter port number \n(can't be greater than 65535): ")
  106.         portNum = read()
  107.         while (tonumber(portNum) > 65535) do
  108.             term.clear()
  109.             term.setCursorPos(1,1)
  110.             write("Please enter a vaild port number \n(can't be greater than 65535): ")
  111.             portNum = read()
  112.         end
  113. -----------------------------------
  114.         term.clear()
  115.         term.setCursorPos(1,1)
  116.         write("Do you want to have the\ndoor open when holding a\nspecific item like a key (y/n)?: ")
  117.         heldItemCheck = read()
  118.         if heldItemCheck == "y" then
  119.             term.clear()
  120.             term.setCursorPos(1,1)
  121.             write("Please enter your name so the\nsensor knows who to look for: ")
  122.             local myName = read()
  123.             term.clear()
  124.             term.setCursorPos(1,1)
  125.             write("Please hold the item you wish\nto be a 'key' for the door\nand then push enter...")
  126.             sleep(1)
  127.             local dummy = read()
  128.             item = itemCheck(myName)
  129.         end
  130. -----------------------------------
  131.         term.clear()
  132.         term.setCursorPos(1,1)
  133.         print("Enter the names seperated by a space\nof the players you want to open this door")
  134.         write("Player Names: ")
  135.         local userInput = read()
  136.         for i in string.gmatch(userInput, "%S+") do
  137.             table.insert(playerNames, i)
  138.         end
  139.         sleep(1)
  140.         term.clear()
  141.         term.setCursorPos(1,1)
  142.         print("Your secret phrase is: "..secretPhrase)
  143.         print("Your port number is: "..portNum)
  144.         if heldItemCheck == "y" then
  145.             print("Your key is: "..item)
  146.         end
  147.         print("The player(s) allowed is/are:")
  148.         for d=1,# playerNames do
  149.             print(playerNames[d])
  150.         end  
  151.         sleep(1)
  152.         print("Is this the correct information (y/n)? ")
  153.         answer = read()
  154.         if answer == "y" then
  155.             h = fs.open("proxInfo", "w")
  156.             h.writeLine(secretPhrase)
  157.             h.writeLine(portNum)
  158.             if heldItemCheck == "y" then
  159.                 h.writeLine("ITEM")
  160.                 h.writeLine(item)
  161.             else
  162.                 h.writeLine("")
  163.             end
  164.             for a=1,# playerNames do
  165.                 h.writeLine(playerNames[a])
  166.             end
  167.             h.writeLine("END")
  168.             h.close()
  169.             checking = false
  170.             inputting = false
  171.         else
  172.             for d=1,# playerNames do
  173.                 table.remove(playerNames,d)
  174.             end  
  175.             inputting = true
  176.             checking = true
  177.         end
  178.     end
  179. -----------------------------------
  180.     --We keep looping through this once we have a file
  181.     while answer == "y" and checking == false do
  182.         print("Starting the program...")
  183.         h = fs.open("proxInfo", "r")
  184.         secretPhrase = h.readLine()
  185.         portNum = h.readLine()
  186.         if h.readLine() == "ITEM" then
  187.             item = h.readLine()
  188.         else
  189.             item = nil
  190.         end
  191.         local x = 0
  192.         repeat
  193.             x = x + 1
  194.             ln = h.readLine()
  195.             playerNames[x] = ln
  196.         until ln == "END"
  197. -----------------------------------
  198.         --print(secretPhrase)
  199.         --print(portNum)
  200.         --print(item)
  201.         --for i=1,# playerNames do
  202.         --    print(playerNames[i])
  203.         --end
  204. -----------------------------------
  205.         h.close()
  206.         sleep(3)
  207.         term.clear()
  208.         term.setCursorPos(1,1)
  209.         print("If you want to change any settings place")
  210.         print("a lever in front of this computer and pull it.")
  211.         print("You will be prompted if you wish to edit")
  212.         print("the settings. Don't forget to remove")
  213.         print("the lever or toggle it again when you are done!")
  214.         while true do
  215.             nameCheck(secretPhrase,playerNames,portNum,item)
  216.             if rs.getInput("front") == true then
  217.                 term.clear()
  218.                 term.setCursorPos(1,1)
  219.                 print("Would you like to edit the settings (y/n)? ")
  220.                 sleep(1)
  221.                 local editCheck = read()
  222.                 if editCheck == "y" then
  223.                     sleep(1)
  224.                     fs.delete("proxInfo")
  225.                     os.reboot()
  226.                 else
  227.                     sleep(1)
  228.                     term.clear()
  229.                     term.setCursorPos(1,1)
  230.                     print("If you want to change any settings place")
  231.                     print("a lever in front of this computer and pull it.")
  232.                     print("You will be prompted if you wish to edit")
  233.                     print("the settings. Don't forget to remove")
  234.                     print("the lever or toggle it again when you are done!")
  235.                 end
  236.             end
  237.             sleep(2)
  238.         end
  239.     end
  240. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement