Advertisement
Guest User

startup

a guest
Aug 22nd, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.57 KB | None | 0 0
  1. sleep(1)
  2. sensor = peripheral.wrap("top")
  3. rednet.open("left")
  4. securityLevel = 0
  5. friendly = {"acesoyster", "JPROSP8"}
  6. host = nil
  7.  
  8. function requestSecurityLevel()
  9.   rednet.send(host, "updateRequest", "securityControl")
  10.   return
  11. end
  12.  
  13. function setDoor(state)
  14.   if state ==  "open" then
  15.     rs.setOutput("front", false)
  16.     rs.setOutput("back", false)
  17.   elseif state == "close" then
  18.     rs.setOutput("front", true)
  19.     rs.setOutput("back", true)
  20.   else
  21.     print("Unknown door state")
  22.   end
  23. end
  24.  
  25. function level1Logic() --Always open
  26.   while true do
  27.     setDoor("open")
  28.     coroutine.yield()
  29.   end
  30. end
  31.  
  32. function level2Logic() --Open unless mobs are nearby
  33.   while true do
  34.     local state = "open"
  35.     local mobs = sensor.getMobIds()
  36.     if #mobs > 0 then
  37.       state = "close"
  38.     end
  39.     local players = sensor.getPlayerNames()
  40.     if #players > 0 then
  41.       state = "open"
  42.     end
  43.     setDoor(state)
  44.     coroutine.yield()
  45.   end
  46. end
  47.  
  48. function level3Logic() --Open unless mobs or enemy players are nearby
  49.   while true do
  50.     local state = "open"
  51.     local safe = false --Carries a successful player match past the for statement
  52.     local mobs = sensor.getMobIds()
  53.     if #mobs > 0 then
  54.       state = "close"
  55.     end
  56.     local players = sensor.getPlayerNames()
  57.     if #players > 0 then
  58.       for i = 1, #players, 1 do
  59.         for j = 1, #friendly, 1 do
  60.           if players[i] == friendly[j] then
  61.             safe = true
  62.           else
  63.             state = "close"
  64.           end
  65.         end
  66.       end
  67.       if safe == true then
  68.         state = "open"
  69.       end
  70.     end
  71.     setDoor(state)
  72.     coroutine.yield()
  73.   end
  74. end
  75.  
  76. function level4Logic() --Open only if friendlies are nearby
  77.   while true do
  78.     local state = "close"
  79.     local mobs = sensor.getMobIds()
  80.     local players = sensor.getPlayerNames()
  81.     if #players > 0 then
  82.       for i = 1, #players, 1 do
  83.         for j = 1, #friendly, 1 do
  84.           if players[i] == friendly[j] then
  85.             state = "open"
  86.           end
  87.         end
  88.       end
  89.     end
  90.     setDoor(state)
  91.   end
  92. end
  93.  
  94. function level5Logic() --Exclusively respond to rednet control, and report nearby friendly playernames
  95.   setDoor("close")
  96.   parallel.waitForAny(level5RednetHandler, level5ProximityHandler)
  97. end
  98.  
  99. function level5RednetHandler()
  100.   while true do
  101.     if host then
  102.       sender, message = rednet.receive("securityControl")
  103.       if (message == "open") and (sender == host) then
  104.         setDoor("open")
  105.         coroutine.yield()
  106.       elseif (message == "close") and (sender == host) then
  107.         setDoor("close")
  108.         coroutine.yield()
  109.       end
  110.     end
  111.   end
  112. end
  113.  
  114. function level5ProximityHandler()
  115.   while true do
  116.     local players = sensor.getPlayerNames()
  117.     if #players > 0 then
  118.       for i = 1, #players, 1 do
  119.         for j = 1, #friendly, 1 do
  120.           if players[i] == friendly[j] then
  121.             if host then
  122.               rednet.send(host, friendly[j], "securityControl")
  123.               sleep(3)
  124.             end
  125.           end
  126.         end
  127.       end
  128.     end
  129.   end
  130. end
  131.  
  132. function defaultLogic()
  133.   level1Logic()
  134. end
  135.  
  136. function rednetHandler()
  137.   while true do
  138.     if host then
  139.       sender, message = rednet.receive("securityControl", 10)
  140.       if message == nil then
  141.         return
  142.       end
  143.       if (string.find(message, "level")) and (sender == host) then
  144.         number = string.gsub(message, "level", "")
  145.         securityLevel = tonumber(number)
  146.         print("Change to security level " .. securityLevel)
  147.         return
  148.       end
  149.     else
  150.     sleep(5)
  151.     return
  152.     end
  153.   end
  154. end
  155.  
  156. function findHost()
  157.   host = rednet.lookup("securityControl", "master")
  158.   if host then
  159.     rednet.send(host, "door", "securityControlConnect")
  160.     sender, message = rednet.receive("securityControlConnect", 20)
  161.     if sender == host then
  162.       print("Connected to " .. host)
  163.     else
  164.       host = nil
  165.     end
  166.   end
  167. end
  168.  
  169. findHost()
  170. if host then
  171.   requestSecurityLevel()
  172. end
  173. while true do
  174.   if securityLevel == 1 then
  175.     parallel.waitForAny(level1Logic, rednetHandler)
  176.   elseif securityLevel == 2 then
  177.     parallel.waitForAny(level2Logic, rednetHandler)
  178.   elseif securityLevel == 3 then
  179.     parallel.waitForAny(level3Logic, rednetHandler)
  180.   elseif securityLevel == 4 then
  181.     parallel.waitForAny(level4Logic, rednetHandler)
  182.   elseif securityLevel == 5 then
  183.     parallel.waitForAny(level5Logic, rednetHandler)
  184.   else
  185.     parallel.waitForAny(defaultLogic, rednetHandler)
  186.   end
  187.   if not host then
  188.     findHost()
  189.     if host then
  190.       requestSecurityLevel()
  191.     end
  192.   end
  193. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement