From 072656fc0387cbaf589a718cbea966024a8ac2c8 Mon Sep 17 00:00:00 2001 From: Sleepy Rae <67649181+sleepyexe@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:00:51 +0700 Subject: [PATCH 1/4] refactor: Update Player Data By Key --- client/events.lua | 12 ++++++++++++ server/player.lua | 30 +++++++++++++++++------------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/client/events.lua b/client/events.lua index b100e75d0..49016390f 100644 --- a/client/events.lua +++ b/client/events.lua @@ -20,6 +20,18 @@ RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() end end) +RegisterNetEvent('qbx_core:client:updatePlayerData', function (key, value) + if source == '' then return end + QBX.PlayerData[key] = value + TriggerEvent('QBCore:Player:SetPlayerData', QBX.PlayerData) +end) + +RegisterNetEvent('qbx_core:client:loadPlayerData', function (val) + if source == '' then return end + QBX.PlayerData = val + TriggerEvent('QBCore:Player:SetPlayerData', QBX.PlayerData) +end) + ---@param val PlayerData RegisterNetEvent('QBCore:Player:SetPlayerData', function(val) local invokingResource = GetInvokingResource() diff --git a/server/player.lua b/server/player.lua index c0efeda32..c98455bf3 100644 --- a/server/player.lua +++ b/server/player.lua @@ -144,7 +144,7 @@ function SetJobDuty(identifier, onDuty) TriggerEvent('QBCore:Server:SetDuty', player.PlayerData.source, player.PlayerData.job.onduty) TriggerClientEvent('QBCore:Client:SetDuty', player.PlayerData.source, player.PlayerData.job.onduty) - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'job', player.PlayerData.job) end exports('SetJobDuty', SetJobDuty) @@ -206,7 +206,7 @@ function SetPlayerPrimaryJob(citizenid, jobName) SaveOffline(player.PlayerData) else Save(player.PlayerData.source) - UpdatePlayerData(player.PlayerData.source) + UpdatePlayerData(player.PlayerData.source, 'job', player.PlayerData.job) TriggerEvent('QBCore:Server:OnJobUpdate', player.PlayerData.source, player.PlayerData.job) TriggerClientEvent('QBCore:Client:OnJobUpdate', player.PlayerData.source, player.PlayerData.job) end @@ -429,7 +429,7 @@ function SetPlayerPrimaryGang(citizenid, gangName) SaveOffline(player.PlayerData) else Save(player.PlayerData.source) - UpdatePlayerData(player.PlayerData.source) + UpdatePlayerData(player.PlayerData.source, 'gang', player.PlayerData.gang) TriggerEvent('QBCore:Server:OnGangUpdate', player.PlayerData.source, player.PlayerData.gang) TriggerClientEvent('QBCore:Client:OnGangUpdate', player.PlayerData.source, player.PlayerData.gang) end @@ -910,7 +910,7 @@ function CreatePlayer(playerData, Offline) self.PlayerData.charinfo.card = cardNumber ---@diagnostic disable-next-line: param-type-mismatch - UpdatePlayerData(self.Offline and self.PlayerData.citizenid or self.PlayerData.source) + UpdatePlayerData(self.Offline and self.PlayerData.citizenid or self.PlayerData.source, 'charinfo', self.PlayerData.charinfo) end ---@deprecated use Save or SaveOffline instead @@ -1000,7 +1000,7 @@ function CreatePlayer(playerData, Offline) end if not self.Offline then - UpdatePlayerData(self.PlayerData.source) + UpdatePlayerData(self.PlayerData.source, 'gang', self.PlayerData.gang) TriggerEvent('QBCore:Server:OnGangUpdate', self.PlayerData.source, self.PlayerData.gang) TriggerClientEvent('QBCore:Client:OnGangUpdate', self.PlayerData.source, self.PlayerData.gang) end @@ -1091,17 +1091,21 @@ function SetPlayerData(identifier, key, value) player.PlayerData[key] = value - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, key, value) end ---@param identifier Source | string -function UpdatePlayerData(identifier) +function UpdatePlayerData(identifier, key, value) local player = type(identifier) == 'string' and (GetPlayerByCitizenId(identifier) or GetOfflinePlayer(identifier)) or GetPlayer(identifier) if not player or player.Offline then return end TriggerEvent('QBCore:Player:SetPlayerData', player.PlayerData) - TriggerClientEvent('QBCore:Player:SetPlayerData', player.PlayerData.source, player.PlayerData) + if not key then + TriggerClientEvent('qbx_core:client:loadPlayerData', player.PlayerData.source, player.PlayerData) + return + end + TriggerClientEvent('qbx_core:client:updatePlayerData', player.PlayerData.source, key, value) end ---@param identifier Source | string @@ -1118,7 +1122,7 @@ function SetMetadata(identifier, metadata, value) player.PlayerData.metadata[metadata] = value - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'metadata', player.PlayerData.metadata) if not player.Offline then local playerState = Player(player.PlayerData.source).state @@ -1179,7 +1183,7 @@ function SetCharInfo(identifier, charInfo, value) player.PlayerData.charinfo[charInfo] = value - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'charinfo', player.PlayerData.charinfo) end exports('SetCharInfo', SetCharInfo) @@ -1234,7 +1238,7 @@ function AddMoney(identifier, moneyType, amount, reason) player.PlayerData.money[moneyType] += amount if not player.Offline then - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'money', player.PlayerData.money) local tags = amount > 100000 and config.logging.role or nil local resource = GetInvokingResource() or cache.resource @@ -1289,7 +1293,7 @@ function RemoveMoney(identifier, moneyType, amount, reason) player.PlayerData.money[moneyType] -= amount if not player.Offline then - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'money', player.PlayerData.money) local tags = amount > 100000 and config.logging.role or nil local resource = GetInvokingResource() or cache.resource @@ -1337,7 +1341,7 @@ function SetMoney(identifier, moneyType, amount, reason) player.PlayerData.money[moneyType] = amount if not player.Offline then - UpdatePlayerData(identifier) + UpdatePlayerData(identifier, 'money', player.PlayerData.money) local difference = amount - oldAmount local dirChange = difference < 0 and 'removed' or 'added' From cf96c43d65a822643b91fd15bc1e238e6960d73c Mon Sep 17 00:00:00 2001 From: Sleepy Rae <67649181+sleepyexe@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:10:00 +0700 Subject: [PATCH 2/4] refactor: Update player data --- client/events.lua | 12 +++++++++++- modules/playerdata.lua | 2 ++ server/player.lua | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/client/events.lua b/client/events.lua index 49016390f..285ead826 100644 --- a/client/events.lua +++ b/client/events.lua @@ -20,12 +20,22 @@ RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function() end end) -RegisterNetEvent('qbx_core:client:updatePlayerData', function (key, value) +---@param key string +---@param value PlayerData +RegisterNetEvent('qbx_core:client:onUpdatePlayerData', function (key, value) if source == '' then return end QBX.PlayerData[key] = value TriggerEvent('QBCore:Player:SetPlayerData', QBX.PlayerData) end) +---@param key string +---@param value PlayerMetadata +RegisterNetEvent('qbx_core:client:onSetMetaData', function(key, _, value) + if source == '' then return end + QBX.PlayerData.metadata[key] = value + TriggerEvent('QBCore:Player:SetPlayerData', QBX.PlayerData) +end) + RegisterNetEvent('qbx_core:client:loadPlayerData', function (val) if source == '' then return end QBX.PlayerData = val diff --git a/modules/playerdata.lua b/modules/playerdata.lua index 4acaefde8..4093db14c 100644 --- a/modules/playerdata.lua +++ b/modules/playerdata.lua @@ -9,5 +9,7 @@ RegisterNetEvent('QBCore:Client:OnPlayerUnload', function() end) RegisterNetEvent('QBCore:Player:SetPlayerData', function(value) + local invokingResource = GetInvokingResource() + if invokingResource and invokingResource ~= GetCurrentResourceName() then return end QBX.PlayerData = value end) diff --git a/server/player.lua b/server/player.lua index c98455bf3..15b006d40 100644 --- a/server/player.lua +++ b/server/player.lua @@ -1105,7 +1105,7 @@ function UpdatePlayerData(identifier, key, value) TriggerClientEvent('qbx_core:client:loadPlayerData', player.PlayerData.source, player.PlayerData) return end - TriggerClientEvent('qbx_core:client:updatePlayerData', player.PlayerData.source, key, value) + TriggerClientEvent('qbx_core:client:onUpdatePlayerData', player.PlayerData.source, key, value) end ---@param identifier Source | string From 92a46f17ac4ea4a8ef1af93b1c06a9498c8c1c91 Mon Sep 17 00:00:00 2001 From: Sleepy Rae <67649181+sleepyexe@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:14:18 +0700 Subject: [PATCH 3/4] chore(player): update player data correctly --- server/player.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/player.lua b/server/player.lua index 15b006d40..5ac88d0eb 100644 --- a/server/player.lua +++ b/server/player.lua @@ -800,7 +800,7 @@ function CreatePlayer(playerData, Offline) self.PlayerData.metadata[self.PlayerData.job.name].reputation += amount ---@diagnostic disable-next-line: param-type-mismatch - UpdatePlayerData(self.Offline and self.PlayerData.citizenid or self.PlayerData.source) + UpdatePlayerData(self.Offline and self.PlayerData.citizenid or self.PlayerData.source, 'metadata', self.PlayerData.metadata) end ---@param moneytype MoneyType @@ -964,7 +964,7 @@ function CreatePlayer(playerData, Offline) end if not self.Offline then - UpdatePlayerData(self.PlayerData.source) + UpdatePlayerData(self.PlayerData.source, 'job', self.PlayerData.job) TriggerEvent('QBCore:Server:OnJobUpdate', self.PlayerData.source, self.PlayerData.job) TriggerClientEvent('QBCore:Client:OnJobUpdate', self.PlayerData.source, self.PlayerData.job) end @@ -1122,11 +1122,10 @@ function SetMetadata(identifier, metadata, value) player.PlayerData.metadata[metadata] = value - UpdatePlayerData(identifier, 'metadata', player.PlayerData.metadata) - if not player.Offline then local playerState = Player(player.PlayerData.source).state + TriggerEvent('QBCore:Player:SetPlayerData', player.PlayerData) TriggerClientEvent('qbx_core:client:onSetMetaData', player.PlayerData.source, metadata, oldValue, value) TriggerEvent('qbx_core:server:onSetMetaData', metadata, oldValue, value, player.PlayerData.source) From c34004ade14e0fe1a18558b350879826cf6dfdef Mon Sep 17 00:00:00 2001 From: Sleepy Rae <67649181+sleepyexe@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:38:58 +0700 Subject: [PATCH 4/4] chore(modules/playerdata): validate invoke to qbx_core --- modules/playerdata.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/playerdata.lua b/modules/playerdata.lua index 4093db14c..e4cffdbb7 100644 --- a/modules/playerdata.lua +++ b/modules/playerdata.lua @@ -10,6 +10,6 @@ end) RegisterNetEvent('QBCore:Player:SetPlayerData', function(value) local invokingResource = GetInvokingResource() - if invokingResource and invokingResource ~= GetCurrentResourceName() then return end + if invokingResource and invokingResource ~= 'qbx_core' then return end QBX.PlayerData = value end)