Nikitaaa228

rserver.lua

Nov 4th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. -- This is a part of program for monitoring of player visiting
  2. -- Required HoverHelm platform
  3. -- https://computercraft.ru/topic/3771-hoverhelm-operatsionnaya-sistema-dlya-dronov-mikrokontrollerov-i-drugih-ustroystv-bez-sobstvennogo-zhestkogo-diska/
  4.  
  5. --WARNING! This program must be placed to device folder instead of core folder! Need for self-destroy `githubToken`
  6.  
  7. --configuration
  8. local gistId = "" -- create new secret gist and insert id here
  9. local githubToken = "" -- visit https://github.com/settings/tokens for create and copy OAuth token for Gist
  10. local programLocation = "/programs/rserver.lua" -- it file vill be removed when otusiderplayer will closer to main device
  11. local screenWidth,screenHeight = 100,50
  12. local playersWhitelist = {hohserg=true, ["^^Cheburek^^"]=true}
  13. local radarModemsWhitelist = {}
  14.  
  15. local modem = component.modem
  16. local filesystem = component.filesystem
  17. local internet = component.internet
  18. local gpu = component.gpu
  19. local detector = component.os_entdetector
  20.  
  21.  
  22. local function isValidModem(address)
  23. --return radarModemsWhitelist[address]
  24. return address ~= bios.serverAddress
  25. end
  26.  
  27. local function playerColor(nickname)
  28. return playersWhitelist[nickname] and 0x00ff00 or 0xff0000
  29. end
  30.  
  31.  
  32. local gistSendingCache = {}
  33.  
  34.  
  35. local function gistFlush()
  36. internet.request(
  37. "https://api.github.com/gists/"..gistId.."/comments",
  38. '{"body":"'..table.concat(gistSendingCache,"\\n")..'"}',
  39. {Authorization="token "..githubToken, Accept="application/vnd.github.v3+json"},
  40. "POST"
  41. )
  42. gistSendingCache = {}
  43. end
  44.  
  45. gpu.bind(component.screen.address)
  46. gpu.setResolution(screenWidth,screenHeight)
  47. local function printLog(msg, color)
  48. gpu.copy(1, 2,screenWidth, screenHeight, 0,-1)
  49. gpu.fill(1, screenHeight, screenWidth, 1, " ")
  50. gpu.setForeground(color)
  51. gpu.set(1, screenHeight, msg)
  52.  
  53. table.insert(gistSendingCache, msg)
  54. end
  55.  
  56.  
  57. while true do
  58. local event_name,_, remoteAddress, port, _, deviceName, nicknames = computer.pullSignal(math.huge)
  59. if event_name=="modem_message" and port==bios.port and isValidModem(remoteAddress) then
  60. printLog("["..timeMark().."] Radar "..deviceName.." found next players:",0x0000ff)
  61. local foundOutsider = false
  62. local dangerousOutsider = false
  63.  
  64. local internalScan = mapSeq(detector.scanPlayers(20), function(v) return v.name end)
  65.  
  66. for _, nickname in ipairs(internalScan) do
  67. if not playersWhitelist[nickname] then
  68. foundOutsider = true
  69. dangerousOutsider = true
  70. end
  71. end
  72.  
  73. for _, nickname in ipairs({split(nicknames, "|")}) do
  74. printLog(" "..nickname, playerColor(nickname))
  75.  
  76. if not playersWhitelist[nickname] then
  77. foundOutsider = true
  78. end
  79. end
  80.  
  81. if foundOutsider then
  82. gistFlush()
  83. end
  84.  
  85. if dangerousOutsider then
  86. filesystem.remove(programLocation)
  87.  
  88. end
  89.  
  90. end
  91. end
Add Comment
Please, Sign In to add comment