local ESX = setmetatable({}, { __index = function(self, index) local obj = exports.es_extended:getSharedObject() self.SetPlayerData = obj.SetPlayerData self.PlayerLoaded = obj.PlayerLoaded return self[index] end }) ---@diagnostic disable-next-line: duplicate-set-field function client.setPlayerData(key, value) PlayerData[key] = value ESX.SetPlayerData(key, value) end local function account(accounts, name) for i = 1, #(accounts or {}) do local account = accounts[i] if account.name == name then return account.money or 0 end end return 0 end ---@diagnostic disable-next-line: duplicate-set-field function client.getPlayerData() local data = exports.es_extended:getSharedObject().GetPlayerData() local job = data.job or {} return { name = data.name or GetPlayerName(cache.playerId), wallet = account(data.accounts, 'money'), bank = account(data.accounts, 'bank'), job = job.label or job.name or 'Unemployed', } end ---@diagnostic disable-next-line: duplicate-set-field function client.setPlayerStatus(values) for name, value in pairs(values) do if value > 0 then TriggerEvent('esx_status:add', name, value) else TriggerEvent('esx_status:remove', name, -value) end end end RegisterNetEvent('esx:onPlayerLogout', client.onLogout) AddEventHandler('esx:setPlayerData', function(key, value) if not PlayerData.loaded or GetInvokingResource() ~= 'es_extended' then return end if key == 'job' then key = 'groups' value = { [value.name] = value.grade } end PlayerData[key] = value OnPlayerData(key, value) end) local Weapon = require 'modules.weapon.client' RegisterNetEvent('esx_policejob:handcuff', function() PlayerData.cuffed = not PlayerData.cuffed LocalPlayer.state:set('invBusy', PlayerData.cuffed, true) if not PlayerData.cuffed then return end Weapon.Disarm() end) RegisterNetEvent('esx_policejob:unrestrain', function() PlayerData.cuffed = false LocalPlayer.state:set('invBusy', PlayerData.cuffed, true) end)