AnonymusHochgenuss

gatekeeper

Mar 24th, 2026 (edited)
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. -- Programm: Gatekeeper
  2. -- Verhindert Terminierung durch Strg+T
  3. os.pullEvent = os.pullEventRaw
  4.  
  5. -- KONFIGURATION
  6. local allowedIDs = { 5, 12, 18 }
  7. local playerFile = "players.txt"
  8. local range = 10
  9. local openDuration = 10
  10.  
  11. -- STATUS-VARIABLEN
  12. local lastHardwareState = nil
  13. local lastPlayerString = "" -- Speichert die letzte Liste der Spieler
  14.  
  15. -- 1. SPIELERLISTE LADEN
  16. local function getAllowedPlayers()
  17. local players = {}
  18. if fs.exists(playerFile) then
  19. local file = fs.open(playerFile, "r")
  20. local line = file.readLine()
  21. while line do
  22. players[line] = true
  23. line = file.readLine()
  24. end
  25. file.close()
  26. end
  27. return players
  28. end
  29.  
  30. local allowedPlayers = getAllowedPlayers()
  31.  
  32. -- 2. FUNKTION: DISPLAY AKTUALISIEREN
  33. local function updateDisplay(nearbyAllowed)
  34. -- Erstellt einen String aus der Tabelle (z.B. "Spieler1, Spieler2")
  35. table.sort(nearbyAllowed) -- Sortieren fuer konsistente Anzeige
  36. local currentString = table.concat(nearbyAllowed, ", ")
  37.  
  38. -- Nur aktualisieren, wenn sich die Liste geaendert hat
  39. if currentString ~= lastPlayerString then
  40. -- Zeile 5 im Terminal loeschen und neu schreiben
  41. term.setCursorPos(1, 5)
  42. term.clearLine()
  43.  
  44. if currentString == "" then
  45. print("Status: Kein autorisierter Spieler in Reichweite.")
  46. else
  47. print("Autorisierte Personen: " .. currentString)
  48. end
  49.  
  50. lastPlayerString = currentString
  51. end
  52. end
  53.  
  54. -- 3. HAUPTSCHLEIFE
  55. term.clear()
  56. term.setCursorPos(1,1)
  57. print("=== GATEKEEPER SYSTEM ===")
  58. print("-------------------------")
  59.  
  60. while true do
  61. local modem = peripheral.find("modem")
  62. local detector = peripheral.find("playerDetector")
  63. local hardwareOk = (modem ~= nil and detector ~= nil)
  64.  
  65. -- Hardware-Status Meldungen
  66. if hardwareOk ~= lastHardwareState then
  67. term.setCursorPos(1, 3)
  68. term.clearLine()
  69. if not hardwareOk then
  70. redstone.setOutput("back", false)
  71. print("Hardware-Fehler! Suche Module...")
  72. lastPlayerString = "RESET" -- Anzeige-Reset erzwingen
  73. else
  74. rednet.open(peripheral.getName(modem))
  75. print("Hardware OK. System aktiv.")
  76. end
  77. lastHardwareState = hardwareOk
  78. end
  79.  
  80. if hardwareOk then
  81. -- SCANNEN NACH SPIELERN
  82. local allNearby = detector.getPlayersInRange(range)
  83. local nearbyAllowed = {}
  84.  
  85. for _, name in ipairs(allNearby) do
  86. if allowedPlayers[name] then
  87. table.insert(nearbyAllowed, name)
  88. end
  89. end
  90.  
  91. -- Display-Update aufrufen
  92. updateDisplay(nearbyAllowed)
  93.  
  94. -- Auf Befehle warten (kurzer Timeout)
  95. local senderID, message = rednet.receive(0.5)
  96.  
  97. if senderID and message then
  98. local idKnown = false
  99. for _, id in ipairs(allowedIDs) do
  100. if senderID == id then idKnown = true break end
  101. end
  102.  
  103. if idKnown then
  104. if message == "open" then
  105. -- Pruefen ob mindestens einer aus der Liste da ist
  106. if #nearbyAllowed > 0 then
  107. term.setCursorPos(1, 7)
  108. print("[" .. os.date("%H:%M") .. "] Zugriff durch ID " .. senderID)
  109. redstone.setOutput("back", true)
  110. sleep(openDuration)
  111. redstone.setOutput("back", false)
  112. else
  113. term.setCursorPos(1, 7)
  114. term.clearLine()
  115. print("[" .. os.date("%H:%M") .. "] ID " .. senderID .. ": Kein Spieler nah.")
  116. end
  117.  
  118. elseif message == "edit" then
  119. term.clear()
  120. print("Edit-Modus aktiviert.")
  121. redstone.setOutput("back", true)
  122. return
  123. end
  124. end
  125. end
  126. else
  127. sleep(5)
  128. end
  129. end
Advertisement
Add Comment
Please, Sign In to add comment