diff --git a/client/events.lua b/client/events.lua index 82d93b4..955c14f 100644 --- a/client/events.lua +++ b/client/events.lua @@ -140,3 +140,16 @@ RegisterNetEvent('QBCore:Command:ShowMe3D', function(senderId, msg) end end) end) + +-- Listen to Shared being updated +RegisterNetEvent('QBCore:Client:OnSharedUpdate', function(tableName, key, value) + QBCore.Shared[tableName][key] = value + TriggerEvent('QBCore:Client:UpdateObject') +end) + +RegisterNetEvent('QBCore:Client:OnSharedUpdateMultiple', function(tableName, values) + for key, value in ipairs(values) do + QBCore.Shared[tableName][key] = value + end + TriggerEvent('QBCore:Client:UpdateObject') +end) \ No newline at end of file diff --git a/fxmanifest.lua b/fxmanifest.lua index f654d19..b63a753 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -30,6 +30,7 @@ server_scripts { 'server/player.lua', 'server/events.lua', 'server/commands.lua', + 'server/exports.lua', 'server/debug.lua' } diff --git a/server/exports.lua b/server/exports.lua new file mode 100644 index 0000000..69b25cc --- /dev/null +++ b/server/exports.lua @@ -0,0 +1,62 @@ +-- Single add job function which should only be used if you planning on adding a single job +local function AddJob(jobName, job) + QBCore.Shared.Jobs[jobName] = job + TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1,'Jobs', jobName, job) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddJob = AddJob +exports('AddJob', AddJob) + +-- Multiple Add Jobs +local function AddJobs(jobs) + for key, value in pairs(jobs) do + QBCore.Shared.Jobs[key] = value + end + + TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Jobs', jobs) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddJobs = AddJobs +exports('AddJobs', AddJobs) + +-- Single add item +local function AddItem(itemName, item) + QBCore.Shared.Items[itemName] = item + TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Items', itemName, item) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddItem = AddItem +exports('AddItem', AddItem) + +-- Multiple Add Items +local function AddItems(items) + for key, value in pairs(items) do + QBCore.Shared.Items[key] = value + end + + TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Items', items) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddItems = AddItems +exports('AddItems', AddItems) + +-- Single Add Gang +local function AddGang(gangName, gang) + QBCore.Shared.Gangs[gangName] = gang + TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1,'Gangs', gangName, gang) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddGang = AddGang +exports('AddGang', AddGang) + +-- Multiple Add Gangs +local function AddGangs(gangs) + for key, value in pairs(gangs) do + QBCore.Shared.Gangs[key] = value + end + + TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Gangs', gangs) + TriggerEvent('QBCore:Server:UpdateObject') +end +QBCore.Functions.AddGangs = AddGangs +exports('AddGangs', AddGangs) \ No newline at end of file diff --git a/server/player.lua b/server/player.lua index f9ed6ad..e4f1820 100644 --- a/server/player.lua +++ b/server/player.lua @@ -549,6 +549,8 @@ end QBCore.Player.LoadInventory = function(PlayerData) PlayerData.items = {} local inventory = MySQL.Sync.prepare('SELECT inventory FROM players WHERE citizenid = ?', { PlayerData.citizenid }) + local missingItems = {} + if inventory then inventory = json.decode(inventory) if next(inventory) then @@ -571,11 +573,18 @@ QBCore.Player.LoadInventory = function(PlayerData) slot = item.slot, combinable = itemInfo['combinable'] } + else + missingItems[#missingItems+1] = item.name:lower() end + end end end end + + if #missingItems > 0 then + print(("%s the following items removed as they no longer exist: %s"):format(GetPlayerName(PlayerData.source), json.encode(missingItems))) + end return PlayerData end