local QBCore = exports['qb-core']:GetCoreObject() local Inventory = require 'modules.inventory.client' local Weapon = require 'modules.weapon.client' RegisterNetEvent('QBCore:Client:OnPlayerUnload', client.onLogout) RegisterNetEvent('QBCore:Player:SetPlayerData', function(data) if source == '' or not PlayerData.loaded then return end if (data.metadata.isdead or data.metadata.inlaststand) ~= PlayerData.dead then PlayerData.dead = data.metadata.isdead or data.metadata.inlaststand OnPlayerData('dead', PlayerData.dead) end local groups = PlayerData.groups or {} local job = data.job or {} local gang = data.gang or {} local jobGrade = type(job.grade) == 'table' and (job.grade.level or 0) or (job.grade or 0) local gangGrade = type(gang.grade) == 'table' and (gang.grade.level or 0) or (gang.grade or 0) if not groups[job.name] or not groups[gang.name] or groups[job.name] ~= jobGrade or groups[gang.name] ~= gangGrade then PlayerData.groups = { [job.name] = jobGrade, [gang.name] = gangGrade, } OnPlayerData('groups', PlayerData.groups) end if data.metadata.ishandcuffed then PlayerData.cuffed = true LocalPlayer.state:set('invBusy', true, false) Weapon.Disarm() elseif PlayerData.cuffed then PlayerData.cuffed = false LocalPlayer.state:set('invBusy', false, false) end end) ---@diagnostic disable-next-line: duplicate-set-field function client.getPlayerData() local data = QBCore.Functions.GetPlayerData() local info = data.charinfo or {} local money = data.money or {} local job = data.job or {} return { name = ('%s %s'):format(info.firstname or '', info.lastname or ''), wallet = money.cash or 0, bank = money.bank or 0, 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 > 100 or value < -100 then value = value * 0.0001 end if name == 'hunger' then TriggerServerEvent('consumables:server:addHunger', QBCore.Functions.GetPlayerData().metadata.hunger + value) elseif name == 'thirst' then TriggerServerEvent('consumables:server:addThirst', QBCore.Functions.GetPlayerData().metadata.thirst + value) elseif name == 'stress' then if value > 0 then TriggerServerEvent('hud:server:GainStress', value) else TriggerServerEvent('hud:server:RelieveStress', math.abs(value)) end end end end AddStateBagChangeHandler('inv_busy', ('player:%s'):format(cache.serverId), function(_, _, value) LocalPlayer.state:set('invBusy', value, false) end) local function export(exportName, func) AddEventHandler(('__cfx_export_%s_%s'):format(string.strsplit('.', exportName, 2)), function(setCB) setCB(func or function() error(("export '%s' is not supported when using ox_inventory"):format(exportName)) end) end) end export('qb-inventory.HasItem', function(items, amount) amount = amount or 1 if type(items) == 'table' then for _, v in pairs(items) do if Inventory.GetItemCount(v) < amount then return false end end return true end return Inventory.GetItemCount(items) >= amount end)