Advertisement
Guest User

door

a guest
May 23rd, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.21 KB | None | 0 0
  1. os.loadAPI("ocs/apis/sensor")
  2.  
  3. local id = "door_main"
  4. local modem = "right"
  5. local sens = "back"
  6. local door = "bottom"
  7. local permit = "sven"
  8. local range = 5
  9. local invert = true
  10. local pollrate = 0.2
  11.  
  12. local prox = sensor.wrap(sens)
  13. local net = peripheral.wrap(modem)
  14. local b = invert
  15.  
  16. local permission
  17.  
  18. rs.setOutput(door, b)
  19.  
  20. net.open(2)
  21. net.open(3)
  22. net.open(4)
  23.  
  24. function loadPermission()
  25.   net.transmit(1, 2, permit)
  26.   local ev, ms, send, reply, msg, dist = os.pullEvent("modem_message")
  27.   permission = textutils.unserialize(msg)
  28. end
  29.  
  30. function printPerm()
  31.   print("--->")
  32.   print(textutils.serialize(permission))
  33.   print("<---")
  34. end
  35.  
  36. function dist(p)
  37.   local add = p.X^2 + p.Y^2 + p.Z^2
  38.   local rt = math.sqrt(add)
  39.   return rt <= range
  40. end
  41.  
  42. function split(str, del)
  43.   local f = str:find(del, 1, true)
  44.   if f == nil then
  45.     local ret = {str}
  46.     return ret
  47.   end
  48.   local ret = {}
  49.   local i = 0
  50.   repeat
  51.     ret[i] = str:sub(1, f - 1)
  52.     str = str:sub(f - str:len())
  53.     i = i + 1
  54.     f = str:find(del, 1, true)
  55.   until f == nil
  56.   ret[i] = str
  57.   return ret
  58. end
  59.  
  60. function sendLog(str)
  61.   net.transmit(5, 0, str)
  62. end
  63.  
  64. loadPermission()
  65.  
  66. while true do
  67.   local timer = os.startTimer(pollrate)
  68.   local trg = prox.getTargets()
  69.   b = invert
  70.   for k, v in pairs(trg) do
  71.     for i=1,#permission do
  72.       if k == permission[1] then
  73.         if dist(v.Position) then
  74.           b = not invert
  75.         end
  76.       end
  77.     end
  78.   end
  79.   rs.setOutput(door, b)
  80.   repeat
  81.     ev, ms, s, r, msg, dst = os.pullEvent()
  82.   until ev == "modem_message" or (ev == "timer" and ms == timer)
  83.   if ev == "modem_message" then
  84.     if s == 3 then
  85.       if msg == permit then
  86.         loadPermission()
  87.       end
  88.     elseif s == 4 then
  89.       local splcmd = split(msg, ":")
  90.       if #splcmd == 2 then
  91.         if splcmd[1] == id then
  92.           local cmdtimer = os.startTimer(tonumber(splcmd[2]))
  93.           local cmdb = invert
  94.           if splcmd[0] == "open" then cmdb = not invert end
  95.           rs.setOutput(door, cmdb)
  96.           repeat
  97.             ev, tim = os.pullEvent("timer")
  98.           until tim == cmdtimer
  99.           rs.setOutput(door, invert)
  100.         end
  101.       end
  102.     end
  103.   end
  104.   --printPerm()
  105. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement