From 7e0cb29d804934492dcf87c83ba6dc3912c8ec81 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 3 Jun 2021 07:29:20 +1000 Subject: [PATCH 1/5] improvement(server/main): Add support for ESX.GetExtendedPlayers() if using ESX Legacy --- server/main.lua | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/server/main.lua b/server/main.lua index ee367819..92ad374e 100644 --- a/server/main.lua +++ b/server/main.lua @@ -170,9 +170,15 @@ end) ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, society) local employees = {} - local xPlayers = ESX.GetPlayers() - for k, v in pairs(xPlayers) do - local xPlayer = ESX.GetPlayerFromId(v) + local xPlayers + if ESX.GetExtendedPlayers then + xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) + else + xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) + end + + for k,v in pairs(xPlayers) do + local xPlayer = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) local name = GetPlayerName(xPlayer.source) if Config.EnableESXIdentity then @@ -301,10 +307,16 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, ['@grade'] = grade }, function(rowsChanged) Jobs[job].grades[tostring(grade)].salary = salary - local xPlayers = ESX.GetPlayers() - for i=1, #xPlayers, 1 do - local xTarget = ESX.GetPlayerFromId(xPlayers[i]) + local xPlayers + if ESX.GetExtendedPlayers then + xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) + else + xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) + end + + for k,v in pairs(xPlayers) do + local xTarget = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) if xTarget.job.name == job and xTarget.job.grade == grade then xTarget.setJob(job, grade) @@ -324,11 +336,17 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, end) ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb) - local xPlayers = ESX.GetPlayers() local players = {} - for i=1, #xPlayers, 1 do - local xPlayer = ESX.GetPlayerFromId(xPlayers[i]) + local xPlayers + if ESX.GetExtendedPlayers then + xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) + else + xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) + end + + for k,v in pairs(xPlayers) do + local xPlayer = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) table.insert(players, { source = xPlayer.source, identifier = xPlayer.identifier, From 653613d55b371ed240b8854df241a549a5e14701 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 3 Jun 2021 07:37:51 +1000 Subject: [PATCH 2/5] fix(server/main): Left incorrect values from testing (type should equal table) --- server/main.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/main.lua b/server/main.lua index 92ad374e..bf76ac7d 100644 --- a/server/main.lua +++ b/server/main.lua @@ -178,7 +178,7 @@ ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, soci end for k,v in pairs(xPlayers) do - local xPlayer = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) + local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(k) local name = GetPlayerName(xPlayer.source) if Config.EnableESXIdentity then @@ -316,7 +316,7 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, end for k,v in pairs(xPlayers) do - local xTarget = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) + local xTarget = type(v) == 'table' and v or ESX.GetPlayerFromId(k) if xTarget.job.name == job and xTarget.job.grade == grade then xTarget.setJob(job, grade) @@ -346,7 +346,7 @@ ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb) end for k,v in pairs(xPlayers) do - local xPlayer = type(v) ~= 'table' and v or ESX.GetPlayerFromId(k) + local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(k) table.insert(players, { source = xPlayer.source, identifier = xPlayer.identifier, From fd44718c1965466939d1dc26a4e8a464a98f175c Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 3 Jun 2021 07:55:36 +1000 Subject: [PATCH 3/5] fix(server/main): ESX.GetPlayerFromId needs to check the value, not index --- server/main.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/main.lua b/server/main.lua index bf76ac7d..65753726 100644 --- a/server/main.lua +++ b/server/main.lua @@ -178,7 +178,7 @@ ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, soci end for k,v in pairs(xPlayers) do - local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(k) + local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v) local name = GetPlayerName(xPlayer.source) if Config.EnableESXIdentity then @@ -316,7 +316,7 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, end for k,v in pairs(xPlayers) do - local xTarget = type(v) == 'table' and v or ESX.GetPlayerFromId(k) + local xTarget = type(v) == 'table' and v or ESX.GetPlayerFromId(v) if xTarget.job.name == job and xTarget.job.grade == grade then xTarget.setJob(job, grade) @@ -346,7 +346,8 @@ ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb) end for k,v in pairs(xPlayers) do - local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(k) + local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v) + table.insert(players, { source = xPlayer.source, identifier = xPlayer.identifier, From 88e97e2270d15be00942775d768a72461c9e5e3f Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 3 Jun 2021 11:31:17 +1000 Subject: [PATCH 4/5] improvement(server/main): Prevent multiple xPlayer loops from running when running `getOnlinePlayers` --- server/main.lua | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/server/main.lua b/server/main.lua index 65753726..f8293b82 100644 --- a/server/main.lua +++ b/server/main.lua @@ -335,28 +335,33 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, end end) +local getOnlinePlayers = false +local onlinePlayers = {} + ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb) - local players = {} + if getOnlinePlayers == false and next(onlinePlayers) == nil then -- Prevent multiple xPlayer loops from running in quick succession + getOnlinePlayers, onlinePlayers = true, {} + local xPlayers + if not ESX.GetExtendedPlayers then + xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) + else + xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) + end - local xPlayers - if ESX.GetExtendedPlayers then - xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) - else - xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) + for k,v in pairs(xPlayers) do + local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v) + + table.insert(onlinePlayers, { + source = xPlayer.source, + identifier = xPlayer.identifier, + name = xPlayer.name, + job = xPlayer.job + }) + end + getOnlinePlayers = false end - - for k,v in pairs(xPlayers) do - local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v) - - table.insert(players, { - source = xPlayer.source, - identifier = xPlayer.identifier, - name = xPlayer.name, - job = xPlayer.job - }) - end - - cb(players) + while getOnlinePlayers do Citizen.Wait(50) end -- Wait for the xPlayer loop to finish + cb(onlinePlayers) end) ESX.RegisterServerCallback('esx_society:getVehiclesInGarage', function(source, cb, societyName) From 7c9818dbdc54a68412ae259d04f3524a08d9f123 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Sat, 5 Jun 2021 12:32:24 +1000 Subject: [PATCH 5/5] refactor(server/main): Cache if `ESX.GetExtendedPlayers()` exists; use short-circuit evaluation to define xPlayers --- server/main.lua | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/server/main.lua b/server/main.lua index f8293b82..7a8bb583 100644 --- a/server/main.lua +++ b/server/main.lua @@ -3,6 +3,7 @@ local Jobs = {} local RegisteredSocieties = {} TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) +local isLegacy = not not ESX.GetExtendedPlayers function GetSociety(name) for i=1, #RegisteredSocieties, 1 do @@ -170,13 +171,7 @@ end) ESX.RegisterServerCallback('esx_society:getEmployees', function(source, cb, society) local employees = {} - local xPlayers - if ESX.GetExtendedPlayers then - xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) - else - xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) - end - + local xPlayers = isLegacy and ESX.GetExtendedPlayers() or ESX.GetPlayers() for k,v in pairs(xPlayers) do local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v) @@ -308,13 +303,7 @@ ESX.RegisterServerCallback('esx_society:setJobSalary', function(source, cb, job, }, function(rowsChanged) Jobs[job].grades[tostring(grade)].salary = salary - local xPlayers - if ESX.GetExtendedPlayers then - xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) - else - xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) - end - + local xPlayers = isLegacy and ESX.GetExtendedPlayers() or ESX.GetPlayers() for k,v in pairs(xPlayers) do local xTarget = type(v) == 'table' and v or ESX.GetPlayerFromId(v) @@ -341,13 +330,8 @@ local onlinePlayers = {} ESX.RegisterServerCallback('esx_society:getOnlinePlayers', function(source, cb) if getOnlinePlayers == false and next(onlinePlayers) == nil then -- Prevent multiple xPlayer loops from running in quick succession getOnlinePlayers, onlinePlayers = true, {} - local xPlayers - if not ESX.GetExtendedPlayers then - xPlayers = ESX.GetExtendedPlayers() -- Retrieve all xPlayer data directly (ESX Legacy) - else - xPlayers = ESX.GetPlayers() -- Retrieves player ids and gets xPlayer data one-by-one (ESX 1.2 support) - end - + + local xPlayers = isLegacy and ESX.GetExtendedPlayers() or ESX.GetPlayers() for k,v in pairs(xPlayers) do local xPlayer = type(v) == 'table' and v or ESX.GetPlayerFromId(v)