From 470dba74686b5301f2cfffaeba2fd79006a95155 Mon Sep 17 00:00:00 2001 From: Linden Date: Sat, 26 Jun 2021 03:41:01 +1000 Subject: [PATCH] improvement(esx/client): Send both new and old value of playerdata with event; properly set job/grade display for hud - Makes the event a viable alternative to esx:setJob as we can compare if the value has changed. - Formatting for job/grade would not update when going to or from unemployed --- [esx]/es_extended/client/functions.lua | 5 +++- [esx]/es_extended/client/main.lua | 34 +++++++++++++------------- [esx]/es_extended/imports.lua | 4 +-- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/[esx]/es_extended/client/functions.lua b/[esx]/es_extended/client/functions.lua index bf939527..09174c08 100644 --- a/[esx]/es_extended/client/functions.lua +++ b/[esx]/es_extended/client/functions.lua @@ -41,9 +41,12 @@ ESX.GetPlayerData = function() end ESX.SetPlayerData = function(key, val) + local current = ESX.PlayerData[key] ESX.PlayerData[key] = val if key ~= 'inventory' and key ~= 'loadout' then - TriggerEvent('esx:setPlayerData', key, val) + if type(val) == 'table' or val ~= current then + TriggerEvent('esx:setPlayerData', key, val, current) + end end end diff --git a/[esx]/es_extended/client/main.lua b/[esx]/es_extended/client/main.lua index 6ab5c7af..e5d6aec7 100644 --- a/[esx]/es_extended/client/main.lua +++ b/[esx]/es_extended/client/main.lua @@ -10,9 +10,9 @@ Citizen.CreateThread(function() end) RegisterNetEvent('esx:playerLoaded') -AddEventHandler('esx:playerLoaded', function(playerData, isNew, skin) +AddEventHandler('esx:playerLoaded', function(xPlayer, isNew, skin) ESX.PlayerLoaded = true - ESX.PlayerData = playerData + ESX.PlayerData = xPlayer FreezeEntityPosition(PlayerPedId(), true) @@ -20,10 +20,10 @@ AddEventHandler('esx:playerLoaded', function(playerData, isNew, skin) Citizen.Wait(3000) else exports.spawnmanager:spawnPlayer({ - x = playerData.coords.x, - y = playerData.coords.y, - z = playerData.coords.z + 0.25, - heading = playerData.coords.heading, + x = ESX.PlayerData.coords.x, + y = ESX.PlayerData.coords.y, + z = ESX.PlayerData.coords.z + 0.25, + heading = ESX.PlayerData.coords.heading, model = `mp_m_freemode_01`, skipFade = false }, function() @@ -53,20 +53,19 @@ AddEventHandler('esx:playerLoaded', function(playerData, isNew, skin) end if Config.EnableHud then - for k,v in ipairs(playerData.accounts) do + for k,v in ipairs(ESX.PlayerData.accounts) do local accountTpl = '
 {{money}}
' ESX.UI.HUD.RegisterElement('account_' .. v.name, k, 0, accountTpl, {money = ESX.Math.GroupDigits(v.money)}) end - local jobTpl = '
{{job_label}} - {{grade_label}}
' + local jobTpl = '
{{job_label}}{{grade_label}}
' - if playerData.job.grade_label == '' or playerData.job.grade_label == playerData.job.label then - jobTpl = '
{{job_label}}
' - end - - ESX.UI.HUD.RegisterElement('job', #playerData.accounts, 0, jobTpl, { - job_label = playerData.job.label, - grade_label = playerData.job.grade_label + local gradeLabel = ESX.PlayerData.job.grade_label ~= ESX.PlayerData.job.label and ESX.PlayerData.job.grade_label or '' + if gradeLabel ~= '' then gradeLabel = ' - '..gradeLabel end + + ESX.UI.HUD.RegisterElement('job', #ESX.PlayerData.accounts, 0, jobTpl, { + job_label = ESX.PlayerData.job.label, + grade_label = gradeLabel }) end StartServerSyncLoops() @@ -97,7 +96,6 @@ AddEventHandler('skinchanger:modelLoaded', function() while not ESX.PlayerLoaded do Citizen.Wait(100) end - TriggerEvent('esx:restoreLoadout') end) @@ -225,9 +223,11 @@ end) RegisterNetEvent('esx:setJob') AddEventHandler('esx:setJob', function(Job) if Config.EnableHud then + local gradeLabel = Job.grade_label ~= Job.label and Job.grade_label or '' + if gradeLabel ~= '' then gradeLabel = ' - '..gradeLabel end ESX.UI.HUD.UpdateElement('job', { job_label = Job.label, - grade_label = Job.grade_label + grade_label = gradeLabel }) end ESX.SetPlayerData('job', Job) diff --git a/[esx]/es_extended/imports.lua b/[esx]/es_extended/imports.lua index b9dda0ab..71dd9f47 100644 --- a/[esx]/es_extended/imports.lua +++ b/[esx]/es_extended/imports.lua @@ -1,10 +1,10 @@ ESX = exports['es_extended']:getSharedObject() if not IsDuplicityVersion() then -- Only register this event for the client - AddEventHandler('esx:setPlayerData', function(key, val) + AddEventHandler('esx:setPlayerData', function(key, val, last) if GetInvokingResource() == 'es_extended' then ESX.PlayerData[key] = val - if OnPlayerData ~= nil then OnPlayerData(key, val) end + if OnPlayerData ~= nil then OnPlayerData(key, val, last) end end end) end \ No newline at end of file