Fabrimat

RGBServerAlarmDB

Oct 19th, 2020 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. os.loadAPI("ocs/apis/sensor")
  2.  
  3. place = ""
  4. distance = 10
  5. alarmSide = "right"
  6. teslaSide = "left"
  7. sensorSide = "top"
  8. enableRequired = false
  9. enabledSide = "back"
  10. duration = 120
  11. sendEmail = false
  12.  
  13. apiKey = ""
  14.  
  15. allowedPlayers = {}
  16. rest = http.get("http://172.16.20.227/~fabrimat/proclus-acl.php")
  17. s = rest.readAll()
  18. shell.run("pastebin get ADaQ4War json")
  19. os.loadAPI("json")
  20. t = json.decode(s)
  21. for key, val in pairs(t) do
  22.     table.insert(allowedPlayers, val.Name)
  23. end
  24.  
  25. -- DO NOT EDIT
  26. emailSent = true
  27. timer = 0
  28. se = sensor.wrap(sensorSide)
  29.  
  30. local function has_value (tab, val)
  31.     for index, value in pairs(tab) do
  32.         if value == val then
  33.             return true
  34.         end
  35.     end
  36.  
  37.     return false
  38. end
  39.  
  40. while true do
  41.     if timer > 0 then
  42.         timer = timer - 1
  43.     else
  44.         emailSent = false
  45.     end
  46.    
  47.     term.clear()
  48.     if not enableRequired or rs.getInput(enabledSide) then
  49.         print("Alarm system enabled")
  50.         print("Scanning...")
  51.        
  52.         targets = se.getTargets()
  53.         intruder = false
  54.         allowed = false
  55.         intruderName = ""
  56.         for name, data in pairs(targets) do
  57.         details = se.getTargetDetails(name)
  58.             if data["Name"] == "Player" and
  59.           details ~= nil and
  60.           details.Position ~= nil and
  61.           details.Position.X <= distance and
  62.           details.Position.X >= -distance and
  63.           details.Position.Y <= distance and
  64.           details.Position.Y >= -distance and
  65.           details.Position.Z <= distance and
  66.           details.Position.Z >= -distance then
  67.                 if has_value(allowedPlayers, name) then
  68.                     allowed = true
  69.                 else
  70.                     intruder = true
  71.                     intruderName = name
  72.                 end
  73.             end
  74.         end
  75.        
  76.         if intruder and not allowed then
  77.         if timer == 0 then
  78.                 timer = duration
  79.             end
  80.  
  81.             rs.setOutput(alarmSide, true)
  82.         rs.setOutput(teslaSide, true)
  83.             if not emailSent and sendEmail then
  84.                     emailSent = true
  85.                     http.get("http://172.16.20.220/luanet/servlets/notifier.php?api="..apiKey.."&var1="..intruderName.."%20("..place..")")
  86.                     print("Intruder detected. Name: " .. intruderName .. ". E-mail sent.")
  87.                 end
  88.         else
  89.             rs.setOutput(alarmSide, false)
  90.             rs.setOutput(teslaSide, false)
  91.         end
  92.     else
  93.         print("Warning!")
  94.         print("Alarm system disabled")
  95.         rs.setOutput(alarmSide, false)
  96.         rs.setOutput(teslaSide, false)
  97.     end
  98.    
  99.     sleep(1)
  100. end
Add Comment
Please, Sign In to add comment