From acd18c6b15107db3514e910d69ae79a4b24a4009 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 21 Aug 2023 01:26:59 +0200 Subject: [PATCH 01/15] Added ESX.GetNumPlayers function --- [core]/es_extended/server/functions.lua | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index d70369a1..e2e9cf1a 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -259,6 +259,27 @@ function ESX.GetExtendedPlayers(key, val) return xPlayers end +function ESX.GetNumPlayers(key, val) + if(not key) then + return ESX.Table.SizeOf(ESX.Players) + end + + local valTable = (type(val) == "table" and val or {val}) + local numPlayers = {} + for i, val in ipairs(valTable) do + numPlayers[val] = 0 + end + + for i, xPlayer in pairs(ESX.Players) do + local value = (key == "job" and xPlayer.job.name or xPlayer[key]) + if(numPlayers[value]) then + numPlayers[value] += 1 + end + end + + return numPlayers +end + function ESX.GetPlayerFromId(source) return ESX.Players[tonumber(source)] end From 29fdf896f94b9cd3ff632fcf24239393c501a894 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 21 Aug 2023 01:58:52 +0200 Subject: [PATCH 02/15] Only returns a table if val param is also of type table. More intuitive. If I want the job count of a single job "police", I don't expect a table as a return value, but the count directly. --- [core]/es_extended/server/functions.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index e2e9cf1a..d1bc1419 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -264,7 +264,8 @@ function ESX.GetNumPlayers(key, val) return ESX.Table.SizeOf(ESX.Players) end - local valTable = (type(val) == "table" and val or {val}) + local isValATable = (type(val) == "table") + local valTable = (isValATable and val or {val}) local numPlayers = {} for i, val in ipairs(valTable) do numPlayers[val] = 0 @@ -277,7 +278,7 @@ function ESX.GetNumPlayers(key, val) end end - return numPlayers + return (isValATable and numPlayers or numPlayers[val]) end function ESX.GetPlayerFromId(source) From 783976d5a4650fc6fe20e493a189e55f639281ad Mon Sep 17 00:00:00 2001 From: Ilias Rbayti Date: Mon, 28 Aug 2023 00:12:39 +0200 Subject: [PATCH 03/15] Refactor GetNumPlayers function Use cached job count data instead of enumerating over ESX.Players --- [core]/es_extended/server/common.lua | 1 + [core]/es_extended/server/functions.lua | 37 +++++++++++++++---------- [core]/es_extended/server/main.lua | 12 ++++++++ 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index c0749590..aac0e02d 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,6 +1,7 @@ ESX = {} ESX.Players = {} ESX.Jobs = {} +ESX.JobsPlayerCount = {} ESX.Items = {} Core = {} Core.UsableItemsCallbacks = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index d1bc1419..ad804468 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -261,24 +261,31 @@ end function ESX.GetNumPlayers(key, val) if(not key) then - return ESX.Table.SizeOf(ESX.Players) + return #ESX.GetPlayers() end - local isValATable = (type(val) == "table") - local valTable = (isValATable and val or {val}) - local numPlayers = {} - for i, val in ipairs(valTable) do - numPlayers[val] = 0 - end - - for i, xPlayer in pairs(ESX.Players) do - local value = (key == "job" and xPlayer.job.name or xPlayer[key]) - if(numPlayers[value]) then - numPlayers[value] += 1 - end + if type(val) == "table" then + local numPlayers = {} + if key == "job" then + for _, v in ipairs(val) do + numPlayers[v] = (ESX.JobsPlayerCount[v] or 0) + end + return numPlayers + else + local filteredPlayers = ESX.GetExtendedPlayers(key, val) + for i, v in pairs(filteredPlayers) do + numPlayers[i] = (#v or 0) + end + return numPlayers + end + else + if key == "job" then + return (ESX.JobsPlayerCount[val] or 0) + else + local filteredPlayers = ESX.GetExtendedPlayers(key, val) + return #filteredPlayers + end end - - return (isValATable and numPlayers or numPlayers[val]) end function ESX.GetPlayerFromId(source) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index d1bc6e0f..58e26ceb 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -377,6 +377,8 @@ AddEventHandler('playerDropped', function(reason) if xPlayer then TriggerEvent('esx:playerDropped', playerId, reason) + local job = xPlayer.getJob().name + ESX.JobsPlayerCount[job] = (ESX.JobsPlayerCount[job] or 1) -1 Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() @@ -385,6 +387,16 @@ AddEventHandler('playerDropped', function(reason) end end) +AddEventHandler("esx:playerLoaded", function(playerId, xPlayer, isNew) + local job = xPlayer.getJob().name + ESX.JobsPlayerCount[job] = (ESX.JobsPlayerCount[job] or 0) +1 +end) + +AddEventHandler("esx:setJob", function(src, job, lastJob) + ESX.JobsPlayerCount[lastJob.name] = (ESX.JobsPlayerCount[lastJob.name] or 1) - 1 + ESX.JobsPlayerCount[job.name] = (ESX.JobsPlayerCount[job.name] or 0) + 1 +end) + AddEventHandler('esx:playerLogout', function(playerId, cb) local xPlayer = ESX.GetPlayerFromId(playerId) if xPlayer then From 1203084a5c9d05e13c87eeb1b2448d4dedd66aed Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 28 Aug 2023 11:15:16 +0200 Subject: [PATCH 04/15] Update [core]/es_extended/server/functions.lua Co-authored-by: Csoki --- [core]/es_extended/server/functions.lua | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index ad804468..70130fcb 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -271,20 +271,21 @@ function ESX.GetNumPlayers(key, val) numPlayers[v] = (ESX.JobsPlayerCount[v] or 0) end return numPlayers - else - local filteredPlayers = ESX.GetExtendedPlayers(key, val) - for i, v in pairs(filteredPlayers) do - numPlayers[i] = (#v or 0) - end - return numPlayers end - else - if key == "job" then - return (ESX.JobsPlayerCount[val] or 0) - else - local filteredPlayers = ESX.GetExtendedPlayers(key, val) - return #filteredPlayers + + local filteredPlayers = ESX.GetExtendedPlayers(key, val) + for i, v in pairs(filteredPlayers) do + numPlayers[i] = (#v or 0) end + return numPlayers + end + + if key == "job" then + return (ESX.JobsPlayerCount[val] or 0) + end + + local filteredPlayers = ESX.GetExtendedPlayers(key, val) + return #filteredPlayers end end From fe64417bf47a39aa3962b725d29a324568d94f16 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <128304168+5d-scripts@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:09:44 +0200 Subject: [PATCH 05/15] requested change #1 --- [core]/es_extended/server/functions.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 70130fcb..fe4e0564 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -284,9 +284,7 @@ function ESX.GetNumPlayers(key, val) return (ESX.JobsPlayerCount[val] or 0) end - local filteredPlayers = ESX.GetExtendedPlayers(key, val) - return #filteredPlayers - end + return #ESX.GetExtendedPlayers(key, val) end function ESX.GetPlayerFromId(source) From 5f3e37a7c9766e5065059bae4eab585622f7b7d9 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <128304168+5d-scripts@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:10:30 +0200 Subject: [PATCH 06/15] requested changes #2 --- [core]/es_extended/server/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index fe4e0564..5599f16c 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -260,7 +260,7 @@ function ESX.GetExtendedPlayers(key, val) end function ESX.GetNumPlayers(key, val) - if(not key) then + if not key then return #ESX.GetPlayers() end From 9e404fa022b7792cbbc629443767a4471731ed74 Mon Sep 17 00:00:00 2001 From: Ilias Rbayti <63159154+Kenshiin13@users.noreply.github.com> Date: Sat, 2 Sep 2023 12:21:43 +0200 Subject: [PATCH 07/15] make sure values are >= 0. --- [core]/es_extended/server/main.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 58e26ceb..5b46f52d 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -378,7 +378,7 @@ AddEventHandler('playerDropped', function(reason) if xPlayer then TriggerEvent('esx:playerDropped', playerId, reason) local job = xPlayer.getJob().name - ESX.JobsPlayerCount[job] = (ESX.JobsPlayerCount[job] or 1) -1 + ESX.JobsPlayerCount[job] = ((ESX.JobsPlayerCount[job] and ESX.JobsPlayerCount[job] > 0) and ESX.JobsPlayerCount[job] or 1) -1 Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() @@ -393,7 +393,7 @@ AddEventHandler("esx:playerLoaded", function(playerId, xPlayer, isNew) end) AddEventHandler("esx:setJob", function(src, job, lastJob) - ESX.JobsPlayerCount[lastJob.name] = (ESX.JobsPlayerCount[lastJob.name] or 1) - 1 + ESX.JobsPlayerCount[lastJob.name] = ((ESX.JobsPlayerCount[lastJob.name] and ESX.JobsPlayerCount[lastJob.name] > 0) and ESX.JobsPlayerCount[lastJob.name] or 1) -1 ESX.JobsPlayerCount[job.name] = (ESX.JobsPlayerCount[job.name] or 0) + 1 end) From 715ee856bab780eb561a61f83e6712af4a740ee3 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Mon, 4 Sep 2023 23:50:30 +0200 Subject: [PATCH 08/15] :recycle: Little JobsPlayerCount refactor --- [core]/es_extended/server/main.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 5b46f52d..42107b41 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -378,7 +378,8 @@ AddEventHandler('playerDropped', function(reason) if xPlayer then TriggerEvent('esx:playerDropped', playerId, reason) local job = xPlayer.getJob().name - ESX.JobsPlayerCount[job] = ((ESX.JobsPlayerCount[job] and ESX.JobsPlayerCount[job] > 0) and ESX.JobsPlayerCount[job] or 1) -1 + local currentJob = ESX.JobsPlayerCount[job] + ESX.JobsPlayerCount[job] = ((currentJob and currentJob > 0) and currentJob or 1) -1 Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() @@ -393,7 +394,8 @@ AddEventHandler("esx:playerLoaded", function(playerId, xPlayer, isNew) end) AddEventHandler("esx:setJob", function(src, job, lastJob) - ESX.JobsPlayerCount[lastJob.name] = ((ESX.JobsPlayerCount[lastJob.name] and ESX.JobsPlayerCount[lastJob.name] > 0) and ESX.JobsPlayerCount[lastJob.name] or 1) -1 + local currentLastJob = ESX.JobsPlayerCount[lastJob.name] + ESX.JobsPlayerCount[lastJob.name] = ((currentLastJob and currentLastJob > 0) and currentLastJob or 1) -1 ESX.JobsPlayerCount[job.name] = (ESX.JobsPlayerCount[job.name] or 0) + 1 end) From 7510e91c2a669cde75e7d6653602f9d8749b2bed Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Mon, 4 Sep 2023 23:51:27 +0200 Subject: [PATCH 09/15] :package: Handle job counter with GlobalState --- [core]/es_extended/server/classes/player.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 62c12cf1..33766ab8 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -32,6 +32,9 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, stateBag:set("name", self.name, true) stateBag:set("metadata", self.metadata, true) + local jobKey = ("%s:count"):format(self.job.name) + GlobalState[jobKey] = (GlobalState[jobKey] or 0) + 1 + function self.triggerEvent(eventName, ...) TriggerClientEvent(eventName, self.source, ...) end @@ -379,6 +382,13 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, TriggerEvent('esx:setJob', self.source, self.job, lastJob) self.triggerEvent('esx:setJob', self.job, lastJob) Player(self.source).state:set("job", self.job, true) + + local lastJobKey = ('%s:count'):format(lastJob.name) + local jobKey = ('%s:count'):format(self.job.name) + local globalStateLastJob = GlobalState[lastJobKey] + + GlobalState[lastJobKey] = ((globalStateLastJob and globalStateLastJob > 0) and globalStateLastJob or 1) - 1 + GlobalState[jobKey] = (GlobalState[jobKey] or 0) + 1 else print(('[es_extended] [^3WARNING^7] Ignoring invalid ^5.setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7'):format(self.source, job)) end From b343a10039773a6a9bb098629f28c977b5ca0074 Mon Sep 17 00:00:00 2001 From: Thekuca <63980591+Thekuca@users.noreply.github.com> Date: Sun, 10 Sep 2023 12:37:27 +0200 Subject: [PATCH 10/15] no need for invoking native --- [core]/es_extended/server/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 5599f16c..cd512f5a 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -261,7 +261,7 @@ end function ESX.GetNumPlayers(key, val) if not key then - return #ESX.GetPlayers() + return #ESX.Players end if type(val) == "table" then From 330a5878264f7d253d3d1f530bc38582ccb0a796 Mon Sep 17 00:00:00 2001 From: Thekuca <63980591+Thekuca@users.noreply.github.com> Date: Sun, 10 Sep 2023 18:22:24 +0200 Subject: [PATCH 11/15] nvm --- [core]/es_extended/server/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index cd512f5a..388ff54a 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -261,7 +261,7 @@ end function ESX.GetNumPlayers(key, val) if not key then - return #ESX.Players + return #GetPlayers end if type(val) == "table" then From ddccbc8671857b9e7d37efb09bc623b46f44d491 Mon Sep 17 00:00:00 2001 From: Thekuca <63980591+Thekuca@users.noreply.github.com> Date: Sun, 10 Sep 2023 18:23:33 +0200 Subject: [PATCH 12/15] bruh --- [core]/es_extended/server/functions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 388ff54a..d8a813f5 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -261,7 +261,7 @@ end function ESX.GetNumPlayers(key, val) if not key then - return #GetPlayers + return #GetPlayers() end if type(val) == "table" then From d4e32411f3efd7f3266eeb8af07a3c72710f4615 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Sep 2023 15:24:24 +0200 Subject: [PATCH 13/15] :fire: Remove unused codes in player class --- [core]/es_extended/server/classes/player.lua | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 33766ab8..62c12cf1 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -32,9 +32,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, stateBag:set("name", self.name, true) stateBag:set("metadata", self.metadata, true) - local jobKey = ("%s:count"):format(self.job.name) - GlobalState[jobKey] = (GlobalState[jobKey] or 0) + 1 - function self.triggerEvent(eventName, ...) TriggerClientEvent(eventName, self.source, ...) end @@ -382,13 +379,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, TriggerEvent('esx:setJob', self.source, self.job, lastJob) self.triggerEvent('esx:setJob', self.job, lastJob) Player(self.source).state:set("job", self.job, true) - - local lastJobKey = ('%s:count'):format(lastJob.name) - local jobKey = ('%s:count'):format(self.job.name) - local globalStateLastJob = GlobalState[lastJobKey] - - GlobalState[lastJobKey] = ((globalStateLastJob and globalStateLastJob > 0) and globalStateLastJob or 1) - 1 - GlobalState[jobKey] = (GlobalState[jobKey] or 0) + 1 else print(('[es_extended] [^3WARNING^7] Ignoring invalid ^5.setJob()^7 usage for ID: ^5%s^7, Job: ^5%s^7'):format(self.source, job)) end From d44f793136bb565ba4bed6eef3e45f25db0cd805 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Sep 2023 15:26:24 +0200 Subject: [PATCH 14/15] :rotating_light: Solving backward compatibility part 2 --- [core]/es_extended/server/functions.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index d8a813f5..ade4cd07 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -241,8 +241,6 @@ local function checkTable(key, val, player, xPlayers) end function ESX.GetExtendedPlayers(key, val) - if not key then return ESX.Players end - local xPlayers = {} if type(val) == "table" then for _, v in pairs(ESX.Players) do @@ -250,7 +248,11 @@ function ESX.GetExtendedPlayers(key, val) end else for _, v in pairs(ESX.Players) do - if (key == 'job' and v.job.name == val) or v[key] == val then + if key then + if (key == 'job' and v.job.name == val) or v[key] == val then + xPlayers[#xPlayers + 1] = v + end + else xPlayers[#xPlayers + 1] = v end end From bad447383a6071bbacce620e9b9b77fba6c0f377 Mon Sep 17 00:00:00 2001 From: Gellipapa Date: Sun, 17 Sep 2023 15:27:48 +0200 Subject: [PATCH 15/15] :package: Add GlobalState job count synchron --- [core]/es_extended/server/main.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 42107b41..df2c380f 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -380,7 +380,7 @@ AddEventHandler('playerDropped', function(reason) local job = xPlayer.getJob().name local currentJob = ESX.JobsPlayerCount[job] ESX.JobsPlayerCount[job] = ((currentJob and currentJob > 0) and currentJob or 1) -1 - + GlobalState[("%s:count"):format(job)] = ESX.JobsPlayerCount[job] Core.playersByIdentifier[xPlayer.identifier] = nil Core.SavePlayer(xPlayer, function() ESX.Players[playerId] = nil @@ -390,13 +390,22 @@ end) AddEventHandler("esx:playerLoaded", function(playerId, xPlayer, isNew) local job = xPlayer.getJob().name + local jobKey = ("%s:count"):format(job) + ESX.JobsPlayerCount[job] = (ESX.JobsPlayerCount[job] or 0) +1 + GlobalState[jobKey] = ESX.JobsPlayerCount[job] end) AddEventHandler("esx:setJob", function(src, job, lastJob) + local lastJobKey = ('%s:count'):format(lastJob.name) + local jobKey = ('%s:count'):format(job.name) local currentLastJob = ESX.JobsPlayerCount[lastJob.name] + ESX.JobsPlayerCount[lastJob.name] = ((currentLastJob and currentLastJob > 0) and currentLastJob or 1) -1 ESX.JobsPlayerCount[job.name] = (ESX.JobsPlayerCount[job.name] or 0) + 1 + + GlobalState[lastJobKey] = ESX.JobsPlayerCount[lastJob.name] + GlobalState[jobKey] = ESX.JobsPlayerCount[job.name] end) AddEventHandler('esx:playerLogout', function(playerId, cb)