From 2998a23cedcd4035415098d40fe08bb76bdf2b51 Mon Sep 17 00:00:00 2001 From: Blue <13604413+Bluethefurry@users.noreply.github.com> Date: Thu, 4 Jun 2020 14:10:25 +0200 Subject: [PATCH] fix playernames serverside memory leak (#106) * Update playernames_sv.lua * Update playernames_cl.lua * Update playernames_sv.lua * clean up --- .../[gameplay]/playernames/playernames_cl.lua | 6 ++--- .../[gameplay]/playernames/playernames_sv.lua | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/resources/[gameplay]/playernames/playernames_cl.lua b/resources/[gameplay]/playernames/playernames_cl.lua index a6e03b2..b39737a 100644 --- a/resources/[gameplay]/playernames/playernames_cl.lua +++ b/resources/[gameplay]/playernames/playernames_cl.lua @@ -46,9 +46,9 @@ function updatePlayerNames() local localCoords = GetEntityCoords(PlayerPedId()) -- for each valid player index - for i = 0, 255 do + for _, i in ipairs(GetActivePlayers()) do -- if the player exists - if NetworkIsPlayerActive(i) and i ~= PlayerId() then + if i ~= PlayerId() then -- get their ped local ped = GetPlayerPed(i) local pedCoords = GetEntityCoords(ped) @@ -188,4 +188,4 @@ SetTimeout(0, function() end) -- run this function every frame -SetTimeout(0, updatePlayerNames) \ No newline at end of file +SetTimeout(0, updatePlayerNames) diff --git a/resources/[gameplay]/playernames/playernames_sv.lua b/resources/[gameplay]/playernames/playernames_sv.lua index 389c927..4677e39 100644 --- a/resources/[gameplay]/playernames/playernames_sv.lua +++ b/resources/[gameplay]/playernames/playernames_sv.lua @@ -1,6 +1,8 @@ local curTemplate local curTags = {} +local activePlayers = {} + local function detectUpdates() SetTimeout(500, detectUpdates) @@ -14,23 +16,31 @@ local function detectUpdates() template = GetConvar('playerNames_svTemplate', '[{{id}}] {{name}}') - for _, v in ipairs(GetPlayers()) do + for v, _ in pairs(activePlayers) do local newTag = formatPlayerNameTag(v, template) - if newTag ~= curTags[v] then setName(v, newTag) - + curTags[v] = newTag end end + + for i, tag in pairs(curTags) do + if not activePlayers[i] then + curTags[i] = nil -- in case curTags doesnt get cleared when the player left, clear it now. + end + end end - +AddEventHandler('playerDropped', function() + curTags[source] = nil + activePlayers[source] = nil +end) RegisterNetEvent('playernames:init') AddEventHandler('playernames:init', function() reconfigure(source) + activePlayers[source] = true end) -SetTimeout(500, detectUpdates) -detectUpdates() \ No newline at end of file +detectUpdates()