From df287b041b1ed84e24e1ae4dc095aed3dc9c9592 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:12:21 +0100 Subject: [PATCH 1/7] feat(es_extended): add static player methods --- [core]/es_extended/imports.lua | 13 +++++++++++++ [core]/es_extended/server/classes/player.lua | 10 ++++++++++ [core]/es_extended/server/functions.lua | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 719d06237..bf5b9beed 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -42,6 +42,19 @@ if not IsDuplicityVersion() then -- Only register this event for the client return error(('\n^1Error loading module (%s)'):format(external[i])) end end +else + ESX.Player = setmetatable({}, { + __call = function(_, src) + if not ESX.IsPlayerLoaded(src) then return end + return setmetatable({src = src}, { + __index = function(self, method) + return function(...) + return exports.es_extended:RunStaticPlayerMethod(self.src, method, ...) + end + end + }) + end + }) end if GetResourceState("ox_lib") == "missing" then diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index b5e66e7b8..d82cd6951 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -944,3 +944,13 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return self end + +local function runStaticPlayerMethod(src, method, ...) + local xPlayer = ESX.Players[src] + if not xPlayer then + return + end + + return xPlayer[method](...) +end +exports("RunStaticPlayerMethod", runStaticPlayerMethod) \ No newline at end of file diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 0ab74f2fb..6a27581a7 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -358,6 +358,12 @@ function ESX.GetPlayerFromIdentifier(identifier) return Core.playersByIdentifier[identifier] end +---@param source number +---@return boolean +function ESX.IsPlayerLoaded(source) + return ESX.Players[source] ~= nil +end + ---@param playerId number | string ---@return string function ESX.GetIdentifier(playerId) From 4c9a7d29180d084f4dfb55748d1adbb14d6ee9f2 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:24:20 +0100 Subject: [PATCH 2/7] feat(es_extended/imports): add support for resolving player identifier --- [core]/es_extended/imports.lua | 8 +++++++- [core]/es_extended/server/functions.lua | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index bf5b9beed..3587951c3 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -45,7 +45,13 @@ if not IsDuplicityVersion() then -- Only register this event for the client else ESX.Player = setmetatable({}, { __call = function(_, src) - if not ESX.IsPlayerLoaded(src) then return end + if type(src) ~= "number" then + src = ESX.GetPlayerIdFromIdentifier(src) + if not src then return end + elseif not ESX.IsPlayerLoaded(src) then + return + end + return setmetatable({src = src}, { __index = function(self, method) return function(...) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 6a27581a7..d7900e464 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -358,6 +358,12 @@ function ESX.GetPlayerFromIdentifier(identifier) return Core.playersByIdentifier[identifier] end +---@param identifier string +---@return number playerId +function ESX.GetPlayerIdFromIdentifier(identifier) + return Core.playersByIdentifier[identifier]?.source +end + ---@param source number ---@return boolean function ESX.IsPlayerLoaded(source) From 54e0da8b33a05225b5da178b43a5556c67ac2599 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:24:45 +0100 Subject: [PATCH 3/7] refactor(es_extended/server/classes/player): add error msg for invalid functions --- [core]/es_extended/server/classes/player.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index d82cd6951..ed99efb6f 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -951,6 +951,10 @@ local function runStaticPlayerMethod(src, method, ...) return end + if not ESX.IsFunctionReference(xPlayer[method]) then + error(("Attempted to call invalid method on playerId %s: %s"):format(src, method)) + end + return xPlayer[method](...) end exports("RunStaticPlayerMethod", runStaticPlayerMethod) \ No newline at end of file From cd96d75ed9c0900a97d1421752fc009e1cacc9d7 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:28:10 +0100 Subject: [PATCH 4/7] refactor(es_extended/imports): fix styling --- [core]/es_extended/imports.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 3587951c3..9bd1d4ffb 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -47,7 +47,9 @@ else __call = function(_, src) if type(src) ~= "number" then src = ESX.GetPlayerIdFromIdentifier(src) - if not src then return end + if not src then + return + end elseif not ESX.IsPlayerLoaded(src) then return end From 7d9a64a524427c00f5865175e2a600d025dac094 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:30:28 +0100 Subject: [PATCH 5/7] feat(es_extended/server/classes/player): add getter for player source --- [core]/es_extended/server/classes/player.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index ed99efb6f..376316c6b 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -455,6 +455,11 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return self.weight end + ---@return number + function self.getSource() + return self.source + end + ---@return number function self.getMaxWeight() return self.maxWeight From 1ad52fa3e2d0196e1d798341e8915678f4071084 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:33:11 +0100 Subject: [PATCH 6/7] feat(es_extended/server/classes/player): add isAdmin getter --- [core]/es_extended/server/classes/player.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 376316c6b..ec2e04d30 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -91,6 +91,11 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return self.paycheckEnabled end + ---@return boolean + function self.isAdmin() + return Core.IsPlayerAdmin(self.source) + end + ---@param coordinates vector4 | vector3 | table ---@return nil function self.setCoords(coordinates) From 66bf71c254411cec0fa439dfa7ab34d9231da81e Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:35:21 +0100 Subject: [PATCH 7/7] feat(es_extended/server/classes/player): add getter for playerId --- [core]/es_extended/server/classes/player.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index ec2e04d30..b4682df7b 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -464,6 +464,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, function self.getSource() return self.source end + self.getPlayerId = self.getSource ---@return number function self.getMaxWeight()