Advertisement
AkaShiroKage

Player Tracker

Mar 15th, 2024 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.74 KB | Source Code | 0 0
  1. local playerdata = dofile("lib/greeter/player_data.lua")
  2.  
  3. local pos1 = vector.new(-940, -45, 283)
  4. local pos2 = vector.new(-918, -51, 261)
  5. local detector = peripheral.find("playerDetector") or error("No player detector found.")
  6. currentPlayers = {}
  7.  
  8. local protocolEnter = "onPlayerEnter"
  9. local protocolLeave = "onPlayerExit"
  10. local modem = peripheral.find("modem")
  11.  
  12. rednet.open(peripheral.getName(modem))
  13. rednet.host(protocolEnter, "Player Tracker")
  14. rednet.host(protocolLeave, "Player Tracker")
  15.  
  16. function getPlayersInBase()
  17.   if not detector.isPlayersInCoords(pos1, pos2) then
  18.     print("No players found.")
  19.     return nil;
  20.   else
  21.     return detector.getPlayersInCoords(pos1, pos2)
  22.   end
  23. end
  24.  
  25. function trackPlayers(playersInRange)
  26.  
  27.   for i,playerInRange in pairs(playersInRange) do
  28.     if currentPlayers[playerInRange] ~= nil then goto continue end --> existing player
  29.  
  30.     currentPlayers[playerInRange] = playerdata.create(playerInRange, nil)
  31.     rednet.send(os.getComputerID(), playerInRange, protocolEnter)
  32.     ::continue::
  33.   end
  34. end
  35.  
  36. function updateCurrentPlayers()
  37.   for i,playerData in pairs(currentPlayers) do
  38.     local position = detector.getPlayerPos(playerData.name)
  39.     if detector.isPlayerInCoords(pos1, pos2, playerData.name) then --> player inside area
  40.       playerData:update(position)
  41.     else --> player left area
  42.       local name = playerData.name
  43.       currentPlayers[i] = nil
  44.       rednet.send(os.getComputerID(), name, protocolLeave)
  45.     end
  46.   end
  47. end
  48.  
  49. while true do
  50.   local playersInRange = getPlayersInBase()
  51.   if not playersInRange then goto continue end
  52.   trackPlayers(playersInRange)
  53.   ::continue::
  54.   updateCurrentPlayers()
  55.   for i,v in pairs(currentPlayers) do
  56.     print(v.name)
  57.   end
  58.   sleep(1)
  59. end
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement