Advertisement
Axow01

dispacher_computer_craft

Aug 16th, 2023 (edited)
1,119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.26 KB | None | 0 0
  1. rednet.open("top")
  2.  
  3. -- Here are the args you need to put in the function
  4. -- {x = 0, y = 0, z = 0, autorized = {8, 9}, receiver_id = 3, name = "Office CTech", lpos = {x = 0, y = 0, z = 0}}
  5. local rooms = {}
  6. local function add_room(args)
  7.     table.insert(rooms, args)
  8. end
  9.  
  10. add_room({x = 94, y = 60, z = 652, autorized = nil, receiver_id = 22, name = "Reactor Laboratory", lpos = {x = 117, y = 70, z = 682}})
  11. add_room({x = 119, y = 59, z = 694, autorized = nil, receiver_id = 3, name = "Office CTech", lpos = {x = 149, y = 66, z = 721}})
  12. add_room({x = 119, y = 60, z = 675, autorized = nil, receiver_id = nil, name = "Nexus", lpos = {x = 141, y = 70, z = 692}})
  13.  
  14. -- local base_center = {x = 0, y = 0, z = 0, autorized = {}}
  15. -- local base_center_b = {x = 0, y = 0, z = 0}
  16. local screen_id = 5
  17. local version_phones = "3.3"
  18. local phones = {}
  19. -- local phones_id = {}
  20.  
  21. local function check_pos(pos, bigger_pos, smaller_pos)
  22.     if (pos.x >= smaller_pos.x and pos.x <= bigger_pos.x) then
  23.         if (pos.y >= smaller_pos.y and pos.y <= bigger_pos.y) then
  24.             if (pos.z >= smaller_pos.z and pos.z <= bigger_pos.z) then
  25.                 return true
  26.             end
  27.         end
  28.     end
  29.     return false
  30. end
  31.  
  32. local function check_autorization(room, sender_id)
  33.     if (room.autorized == nil) then return true end
  34.     for i = 1, #room.autorized do
  35.         if (room.autorized[i] == sender_id) then
  36.             return true
  37.         end
  38.     end
  39.     return false
  40. end
  41.  
  42. local function check_all(phone_pos, room, room_b, sender_id)
  43.     if (check_pos(phone_pos, room_b, room) and room.receiver_id ~= nil) then
  44.         if (check_autorization(room, sender_id)) then
  45.             rednet.send(room.receiver_id, true, "lights_activation_440")
  46.         else
  47.             rednet.send(room.receiver_id, "alarm", "lights_activation_440")
  48.         end
  49.         return true
  50.     end
  51.     return false
  52. end
  53.  
  54. local function close_lights(phones, room, room_b)
  55.     local status = false
  56.     for i = 1, #phones do
  57.         if (check_pos(phones[i][2], room_b, room)) then status = true end
  58.     end
  59.     if (room.receiver_id ~= nil and status == false) then
  60.         rednet.send(room.receiver_id, false, "lights_activation_440")
  61.     end
  62. end
  63.  
  64. local function add_phone(sender_id, pos)
  65.     for i = 1, #phones do
  66.         if (phones[i][1] == sender_id) then
  67.             phones[i][2] = pos
  68.             return
  69.         end
  70.     end
  71.     table.insert(phones, {sender_id, pos})
  72. end
  73.  
  74. local function deployUpdate()
  75.     for i = 0, 5 do
  76.         rednet.broadcast({"update", true}, "ctech_phones_440")
  77.     end
  78. end
  79.  
  80. term.clear()
  81. term.setCursorBlink(false)
  82. term.setCursorPos(1, 1)
  83. term.setTextColor(colors.green)
  84. term.write("ID: "..os.getComputerID().."\n")
  85. term.setCursorPos(2, 1)
  86.  
  87. while (true) do
  88.     local sender_id, message, distance_or_protocol = rednet.receive("lights_dispacher_440")
  89.     if (message == "update") then deployUpdate()
  90.     else
  91.         local version_client = message[2]
  92.  
  93.         if (type(version_client) == "string" and version_client == version_phones) then
  94.             rednet.send(sender_id, {"continue", true}, "ctech_phones_440")
  95.             local pos = {x = message[1][1], y = message[1][2], z = message[1][3]}
  96.             add_phone(sender_id, pos)
  97.             for i = 1, #rooms do
  98.                 check_all(pos, rooms[i], rooms[i].lpos, sender_id)
  99.                 close_lights(phones, rooms[i], rooms[i].lpos)
  100.             end
  101.         else
  102.             rednet.send(sender_id, {"update", true}, "ctech_phones_440")
  103.         end
  104.         rednet.send(screen_id, {phones, rooms}, "lights_dispacher_440")
  105.     end
  106. end
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement