feat (shared): Added modular shared tables

This commit is contained in:
Idris Dev
2022-02-13 23:05:58 +11:00
committed by GitHub
4 changed files with 167 additions and 0 deletions
+13
View File
@@ -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)
+1
View File
@@ -31,6 +31,7 @@ server_scripts {
'server/player.lua',
'server/events.lua',
'server/commands.lua',
'server/exports.lua',
'server/debug.lua'
}
+144
View File
@@ -0,0 +1,144 @@
-- Single add job function which should only be used if you planning on adding a single job
local function AddJob(jobName, job)
if type(jobName) ~= "string" then
return false, "invalid_job_name"
end
if QBCore.Shared.Jobs[jobName] ~= nil then
return false, "job_exists"
end
QBCore.Shared.Jobs[jobName] = job
TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1,'Jobs', jobName, job)
TriggerEvent('QBCore:Server:UpdateObject')
return true, "success"
end
QBCore.Functions.AddJob = AddJob
exports('AddJob', AddJob)
-- Multiple Add Jobs
local function AddJobs(jobs)
local shouldContinue = true
local message = "success"
local errorItem = nil
for key, value in pairs(jobs) do
if type(key) ~= "string" then
message = 'invalid_job_name'
shouldContinue = false
errorItem = jobs[key]
break
end
if QBCore.Shared.Jobs[key] ~= nil then
message = 'job_exists'
shouldContinue = false
errorItem = jobs[key]
break
end
QBCore.Shared.Jobs[key] = value
end
if not shouldContinue then return false, message, errorItem end
TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Jobs', jobs)
TriggerEvent('QBCore:Server:UpdateObject')
return true, message, nil
end
QBCore.Functions.AddJobs = AddJobs
exports('AddJobs', AddJobs)
-- Single add item
local function AddItem(itemName, item)
if type(itemName) ~= "string" then
return false, "invalid_item_name"
end
if QBCore.Shared.Items[itemName] ~= nil then
return false, "item_exists"
end
QBCore.Shared.Items[itemName] = item
TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1, 'Items', itemName, item)
TriggerEvent('QBCore:Server:UpdateObject')
return true, "success"
end
QBCore.Functions.AddItem = AddItem
exports('AddItem', AddItem)
-- Multiple Add Items
local function AddItems(items)
local shouldContinue = true
local message = "success"
local errorItem = nil
for key, value in pairs(items) do
if type(key) ~= "string" then
message = "invalid_item_name"
shouldContinue = false
errorItem = items[key]
break
end
if QBCore.Shared.Items[key] ~= nil then
message = "item_exists"
shouldContinue = false
errorItem = items[key]
break
end
QBCore.Shared.Items[key] = value
end
if not shouldContinue then return false, message, errorItem end
TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Items', items)
TriggerEvent('QBCore:Server:UpdateObject')
return true, message, nil
end
QBCore.Functions.AddItems = AddItems
exports('AddItems', AddItems)
-- Single Add Gang
local function AddGang(gangName, gang, source)
if type(gangName) ~= "string" then
return false, "invalid_gang_name"
end
if QBCore.Shared.Gangs[gangName] ~= nil then
return false, "gang_exists"
end
QBCore.Shared.Gangs[gangName] = gang
TriggerClientEvent('QBCore:Client:OnSharedUpdate', -1,'Gangs', gangName, gang)
TriggerEvent('QBCore:Server:UpdateObject')
return true, "success"
end
QBCore.Functions.AddGang = AddGang
exports('AddGang', AddGang)
-- Multiple Add Gangs
local function AddGangs(gangs)
local shouldContinue = true
local message = "success"
local errorItem = nil
for key, value in pairs(gangs) do
if type(key) ~= "string" then
message = "invalid_gang_name"
shouldContinue = false
errorItem = items[key]
break
end
if QBCore.Shared.Gangs[key] ~= nil then
message = "gang_exists"
shouldContinue = false
errorItem = items[key]
break
end
QBCore.Shared.Gangs[key] = value
end
if not shouldContinue then return false, message, errorItem end
TriggerClientEvent('QBCore:Client:OnSharedUpdateMultiple', -1, 'Gangs', gangs)
TriggerEvent('QBCore:Server:UpdateObject')
return true, message, nil
end
QBCore.Functions.AddGangs = AddGangs
exports('AddGangs', AddGangs)
+9
View File
@@ -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