Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.34 KB | None | 0 0
  1. local event = require("event")
  2. local component = require("component")
  3. local term = require("term")
  4.  
  5. local pass = "password"
  6. local master = "MasterKey"
  7. local wait = 2
  8. local screen_main = "6f1"
  9.  
  10. local doorConfig = {
  11.   {
  12.     name = "door1",
  13.     addr = "80e5", -- адрес контроллера двери
  14.     reader = "4cde",
  15.     level = 1,
  16.     screen = "67b"
  17.   },
  18.   {
  19.     name = "door2",
  20.     addr = "7a8",
  21.     reader = "caee",
  22.     level = 1,
  23.     screen = "aad"
  24.   }
  25. }
  26.  
  27. local users = {
  28.   ["Scrag"] = {
  29.     level = 1,
  30.     data = "g"
  31.   }
  32. }
  33.  
  34. local doors = {
  35. }
  36.  
  37. local function init()
  38.   for _, doorData in ipairs(doorConfig) do
  39.     local readerAddr = component.get(doorData.reader)
  40.     local screenAddr = component.get(doorData.screen)
  41.     local doorAddr = component.get(doorData.addr)
  42.     if readerAddr and screenAddr and doorAddr then
  43.       doorData.addr = doorAddr
  44.       doorData.screen = screenAddr
  45.       doors[readerAddr] = doorData
  46.       component.invoke(doorAddr, "setPassword", "", pass)
  47.       component.invoke(doorAddr, "close", pass)
  48.       component.gpu.bind(screenAddr)
  49.       term.clear()
  50.     end
  51.   end
  52.   screen_main = component.get(screen_main)
  53.   doorConfig = nil
  54.   component.gpu.bind(screen_main, true)
  55. end
  56.  
  57. local function run()
  58.  
  59.   while 1 do
  60.     local _, address, pName, data = event.pull("magData")
  61.  
  62.     if data == master then
  63.       for _, door in pairs(doors) do
  64.         component.invoke(door.addr, "open", pass)
  65.       end
  66.       print("Система безопастности отключена: " ..pName)
  67.       break
  68.     end
  69.  
  70.     local door = doors[address]
  71.     if door then
  72.       component.gpu.bind(door.screen)
  73.       local user = users[pName]
  74.       if not user then
  75.         print("Не в WhiteList")
  76.       else
  77.         if user.level > door.level then
  78.           print("Недостаточный уровень доступа", door.name, pName, user.level)
  79.         elseif user.data ~= data then
  80.           print("Карта недействительна", door.name, pName, data)
  81.         else
  82.           print("Открытие двери", door.name, pName)
  83.           component.invoke(door.addr, "open", pass)
  84.           os.sleep(wait)
  85.           component.invoke(door.addr, "close", pass)
  86.         end
  87.       end
  88.       component.gpu.bind(screen_main)
  89.     end
  90.  
  91.   end
  92.  
  93. end
  94.  
  95. init()
  96. run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement