Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local playerdata = dofile("lib/greeter/player_data.lua")
- local pos1 = vector.new(-940, -45, 283)
- local pos2 = vector.new(-918, -51, 261)
- local detector = peripheral.find("playerDetector") or error("No player detector found.")
- currentPlayers = {}
- local protocolEnter = "onPlayerEnter"
- local protocolLeave = "onPlayerExit"
- local modem = peripheral.find("modem")
- rednet.open(peripheral.getName(modem))
- rednet.host(protocolEnter, "Player Tracker")
- rednet.host(protocolLeave, "Player Tracker")
- function getPlayersInBase()
- if not detector.isPlayersInCoords(pos1, pos2) then
- print("No players found.")
- return nil;
- else
- return detector.getPlayersInCoords(pos1, pos2)
- end
- end
- function trackPlayers(playersInRange)
- for i,playerInRange in pairs(playersInRange) do
- if currentPlayers[playerInRange] ~= nil then goto continue end --> existing player
- currentPlayers[playerInRange] = playerdata.create(playerInRange, nil)
- rednet.send(os.getComputerID(), playerInRange, protocolEnter)
- ::continue::
- end
- end
- function updateCurrentPlayers()
- for i,playerData in pairs(currentPlayers) do
- local position = detector.getPlayerPos(playerData.name)
- if detector.isPlayerInCoords(pos1, pos2, playerData.name) then --> player inside area
- playerData:update(position)
- else --> player left area
- local name = playerData.name
- currentPlayers[i] = nil
- rednet.send(os.getComputerID(), name, protocolLeave)
- end
- end
- end
- while true do
- local playersInRange = getPlayersInBase()
- if not playersInRange then goto continue end
- trackPlayers(playersInRange)
- ::continue::
- updateCurrentPlayers()
- for i,v in pairs(currentPlayers) do
- print(v.name)
- end
- sleep(1)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement