From d61abc50966781432539b89e6e4967c72ab12c71 Mon Sep 17 00:00:00 2001 From: Kasey FItton Date: Tue, 8 Oct 2024 02:24:24 +0100 Subject: [PATCH 1/2] !Refactor(core): Statebag removal and changes Currently, everything flowing through xPlayer.set is being put into a statebag, aswell as all metadata , resulting in crashes. This change is a high priority. --- [core]/es_extended/client/main.lua | 4 -- [core]/es_extended/server/classes/player.lua | 11 ++-- [core]/esx_identity/server/main.lua | 57 ++++++++++---------- 3 files changed, 30 insertions(+), 42 deletions(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 27180dd72..0865ee9fe 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -708,7 +708,3 @@ end) ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model) cb(ESX.GetVehicleType(model)) end) - -AddStateBagChangeHandler("metadata", "player:" .. tostring(GetPlayerServerId(PlayerId())), function(_, key, val) - ESX.SetPlayerData(key, val) -end) diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 5b36912bd..9ba3cb8e9 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -52,12 +52,11 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, _ExecuteCommand(("add_principal identifier.%s group.%s"):format(self.license, self.group)) local stateBag = Player(self.source).state - stateBag:set("identifier", self.identifier, true) - stateBag:set("license", self.license, true) + stateBag:set("identifier", self.identifier, false) + stateBag:set("license", self.license, false) stateBag:set("job", self.job, true) stateBag:set("group", self.group, true) stateBag:set("name", self.name, true) - stateBag:set("metadata", self.metadata, true) ---@param eventName string ---@param ... any @@ -77,7 +76,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, end ---@param vector boolean - ---@param heading boolean + ---@param heading boolean ---@return vector3 | vector4 | table function self.getCoords(vector, heading) local ped = _GetPlayerPed(self.source) @@ -163,7 +162,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, ---@return void function self.set(k, v) self.variables[k] = v - Player(self.source).state:set(k, v, true) end ---@param k string @@ -829,8 +827,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, self.metadata[index] = type(self.metadata[index]) == "table" and self.metadata[index] or {} self.metadata[index][value] = subValue end - - Player(self.source).state:set("metadata", self.metadata, true) end function self.clearMeta(index, subValues) @@ -875,7 +871,6 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, return print(("[^1ERROR^7] xPlayer.clearMeta ^5subValues^7 should be ^5string^7 or ^5table^7, received ^5%s^7!"):format(type(subValues))) end - Player(self.source).state:set("metadata", self.metadata, true) end for fnName, fn in pairs(targetOverrides) do diff --git a/[core]/esx_identity/server/main.lua b/[core]/esx_identity/server/main.lua index e7d5ec88f..388be15b7 100644 --- a/[core]/esx_identity/server/main.lua +++ b/[core]/esx_identity/server/main.lua @@ -12,20 +12,34 @@ local function deleteIdentityFromDatabase(xPlayer) end end +function SetPlayerData(xPlayer, data) + local name = ("%s %s"):format(data.firstName, data.lastName) + xPlayer.setName(name) + xPlayer.set("firstName", data.firstName) + xPlayer.set("lastName", data.lastName) + xPlayer.set("dateofbirth", data.dateOfBirth) + xPlayer.set("sex", data.sex) + xPlayer.set("height", data.height) + + local state = Player(xPlayer.source).state + state:set("name", name, true) + state:set("firstName", data.firstName, true) + state:set("lastName", data.lastName, true) + state:set("dateofbirth", data.dateOfBirth, true) + state:set("sex", data.sex, true) + state:set("height", data.height, true) +end + local function deleteIdentity(xPlayer) if not alreadyRegistered[xPlayer.identifier] then return end - xPlayer.setName(("%s %s"):format(nil, nil)) - xPlayer.set("firstName", nil) - xPlayer.set("lastName", nil) - xPlayer.set("dateofbirth", nil) - xPlayer.set("sex", nil) - xPlayer.set("height", nil) + SetPlayerData(xPlayer, {firstName = nil, lastName = nil, dateOfBirth = nil, sex = nil, height = nil}) deleteIdentityFromDatabase(xPlayer) end + local function saveIdentityToDatabase(identifier, identity) MySQL.update.await("UPDATE users SET firstname = ?, lastname = ?, dateofbirth = ?, sex = ?, height = ? WHERE identifier = ?", { identity.firstName, identity.lastName, identity.dateOfBirth, identity.sex, identity.height, identifier }) end @@ -222,12 +236,8 @@ if Config.UseDeferrals then end local currentIdentity = playerIdentity[xPlayer.identifier] - xPlayer.setName(("%s %s"):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set("firstName", currentIdentity.firstName) - xPlayer.set("lastName", currentIdentity.lastName) - xPlayer.set("dateofbirth", currentIdentity.dateOfBirth) - xPlayer.set("sex", currentIdentity.sex) - xPlayer.set("height", currentIdentity.height) + SetPlayerData(xPlayer, currentIdentity) + if currentIdentity.saveToDatabase then saveIdentityToDatabase(xPlayer.identifier, currentIdentity) end @@ -243,13 +253,8 @@ else return end local currentIdentity = playerIdentity[xPlayer.identifier] + SetPlayerData(xPlayer, currentIdentity) - xPlayer.setName(("%s %s"):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set("firstName", currentIdentity.firstName) - xPlayer.set("lastName", currentIdentity.lastName) - xPlayer.set("dateofbirth", currentIdentity.dateOfBirth) - xPlayer.set("sex", currentIdentity.sex) - xPlayer.set("height", currentIdentity.height) TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) if currentIdentity.saveToDatabase then saveIdentityToDatabase(xPlayer.identifier, currentIdentity) @@ -340,12 +345,8 @@ else local currentIdentity = playerIdentity[xPlayer.identifier] if currentIdentity and alreadyRegistered[xPlayer.identifier] then - xPlayer.setName(("%s %s"):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set("firstName", currentIdentity.firstName) - xPlayer.set("lastName", currentIdentity.lastName) - xPlayer.set("dateofbirth", currentIdentity.dateOfBirth) - xPlayer.set("sex", currentIdentity.sex) - xPlayer.set("height", currentIdentity.height) + SetPlayerData(xPlayer, currentIdentity) + TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) if currentIdentity.saveToDatabase then saveIdentityToDatabase(xPlayer.identifier, currentIdentity) @@ -400,12 +401,8 @@ else local currentIdentity = playerIdentity[xPlayer.identifier] - xPlayer.setName(("%s %s"):format(currentIdentity.firstName, currentIdentity.lastName)) - xPlayer.set("firstName", currentIdentity.firstName) - xPlayer.set("lastName", currentIdentity.lastName) - xPlayer.set("dateofbirth", currentIdentity.dateOfBirth) - xPlayer.set("sex", currentIdentity.sex) - xPlayer.set("height", currentIdentity.height) + SetPlayerData(xPlayer, currentIdentity) + TriggerClientEvent("esx_identity:setPlayerData", xPlayer.source, currentIdentity) saveIdentityToDatabase(xPlayer.identifier, currentIdentity) alreadyRegistered[xPlayer.identifier] = true From 9bbe1f7f1ca8288d9450c50c65f84c26bfacd2b1 Mon Sep 17 00:00:00 2001 From: Arctos2win <116841243+Arctos2win@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:52:14 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix(esx=5Fcore):=20=F0=9F=94=A8=20send=20me?= =?UTF-8?q?tadata=20to=20the=20client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- [core]/es_extended/client/main.lua | 4 ++++ [core]/es_extended/server/classes/player.lua | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 0865ee9fe..637350831 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -708,3 +708,7 @@ end) ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model) cb(ESX.GetVehicleType(model)) end) + +RegisterNetEvent('esx:updatePlayerData', function(key, val) + ESX.SetPlayerData(key, val) +end) \ No newline at end of file diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 9ba3cb8e9..0a686d7e1 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -827,6 +827,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, self.metadata[index] = type(self.metadata[index]) == "table" and self.metadata[index] or {} self.metadata[index][value] = subValue end + self.triggerEvent('esx:updatePlayerData', 'metadata', self.metadata) end function self.clearMeta(index, subValues) @@ -870,7 +871,7 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory, else return print(("[^1ERROR^7] xPlayer.clearMeta ^5subValues^7 should be ^5string^7 or ^5table^7, received ^5%s^7!"):format(type(subValues))) end - + self.triggerEvent('esx:updatePlayerData', 'metadata', self.metadata) end for fnName, fn in pairs(targetOverrides) do