mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 00:01:20 +00:00
feat(es_extended): refresh/add items during runtime
This commit is contained in:
@@ -85,7 +85,7 @@ end
|
||||
function ESX.SetPlayerData(key, val)
|
||||
local current = ESX.PlayerData[key]
|
||||
ESX.PlayerData[key] = val
|
||||
if key ~= "inventory" and key ~= "loadout" then
|
||||
if key ~= "loadout" then
|
||||
if type(val) == "table" or val ~= current then
|
||||
TriggerEvent("esx:setPlayerData", key, val, current)
|
||||
end
|
||||
|
||||
@@ -57,6 +57,10 @@ ESX.SecureNetEvent("esx:setMaxWeight", function(newMaxWeight)
|
||||
ESX.SetPlayerData("maxWeight", newMaxWeight)
|
||||
end)
|
||||
|
||||
ESX.SecureNetEvent("esx:setInventory", function(newInventory)
|
||||
ESX.SetPlayerData("inventory", newInventory)
|
||||
end)
|
||||
|
||||
local function onPlayerSpawn()
|
||||
ESX.SetPlayerData("ped", PlayerPedId())
|
||||
ESX.SetPlayerData("dead", false)
|
||||
|
||||
@@ -36,11 +36,9 @@ end
|
||||
|
||||
MySQL.ready(function()
|
||||
Core.DatabaseConnected = true
|
||||
|
||||
if not Config.CustomInventory then
|
||||
local items = MySQL.query.await("SELECT * FROM items")
|
||||
for _, v in ipairs(items) do
|
||||
ESX.Items[v.name] = { label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove }
|
||||
end
|
||||
ESX.RefreshItems()
|
||||
end
|
||||
|
||||
ESX.RefreshJobs()
|
||||
|
||||
@@ -635,6 +635,79 @@ if not Config.CustomInventory then
|
||||
TriggerClientEvent("esx:createPickup", -1, pickupId, label, coords, itemType, name, components, tintIndex)
|
||||
Core.PickupId = pickupId
|
||||
end
|
||||
|
||||
local function refreshPlayerInventories()
|
||||
for i, xPlayer in ipairs(ESX.GetExtendedPlayers()) do
|
||||
local minimalInv = xPlayer.getInventory(true)
|
||||
|
||||
for itemName, itemCount in pairs(minimalInv) do
|
||||
if not ESX.Items[itemName] then
|
||||
xPlayer.setInventoryItem(itemName, 0)
|
||||
minimalInv[itemName] = nil
|
||||
end
|
||||
end
|
||||
|
||||
xPlayer.inventory = {}
|
||||
for itemName, itemData in pairs(ESX.Items) do
|
||||
xPlayer.inventory[#xPlayer.inventory+1] = {
|
||||
name = itemName,
|
||||
count = minimalInv[itemName] or 0,
|
||||
label = itemData.label,
|
||||
weight = itemData.weight,
|
||||
usable = Core.UsableItemsCallbacks[itemName] ~= nil,
|
||||
rare = itemData.rare,
|
||||
canRemove = itemData.canRemove,
|
||||
}
|
||||
end
|
||||
|
||||
TriggerClientEvent("esx:setInventory", xPlayer.source, xPlayer.inventory)
|
||||
end
|
||||
end
|
||||
|
||||
function ESX.RefreshItems()
|
||||
ESX.Items = {}
|
||||
|
||||
local items = MySQL.query.await("SELECT * FROM items")
|
||||
for _, v in ipairs(items) do
|
||||
ESX.Items[v.name] = { label = v.label, weight = v.weight, rare = v.rare, canRemove = v.can_remove }
|
||||
end
|
||||
|
||||
refreshPlayerInventories()
|
||||
end
|
||||
|
||||
---@param name string
|
||||
---@param label string
|
||||
---@param weight number
|
||||
---@param rare boolean?
|
||||
---@param canRemove boolean?
|
||||
function ESX.AddItem(name, label, weight, rare, canRemove)
|
||||
assert(type(name) == "string", "Item name must be a string")
|
||||
assert(type(label) == "string", "Item label must be a string")
|
||||
assert(type(weight) == "number", "Item weight must be a number")
|
||||
assert(type(rare) == "boolean" or rare == nil, "Item rare must be a boolean or nil")
|
||||
assert(type(canRemove) == "boolean" or canRemove == nil, "Item canRemove must be a boolean or nil")
|
||||
|
||||
if ESX.Items[name] then
|
||||
return
|
||||
end
|
||||
|
||||
MySQL.insert.await("INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES (?, ?, ?, ?, ?)", {
|
||||
name,
|
||||
label,
|
||||
weight,
|
||||
rare or false,
|
||||
canRemove or false,
|
||||
})
|
||||
|
||||
ESX.Items[name] = {
|
||||
label = label,
|
||||
weight = weight,
|
||||
rare = rare or false,
|
||||
canRemove = canRemove or false,
|
||||
}
|
||||
|
||||
refreshPlayerInventories()
|
||||
end
|
||||
end
|
||||
|
||||
---@param job string
|
||||
|
||||
@@ -438,6 +438,10 @@ ESX.RegisterCommand("refreshjobs", "admin", function()
|
||||
ESX.RefreshJobs()
|
||||
end, true, { help = TranslateCap("command_clearall") })
|
||||
|
||||
ESX.RegisterCommand("refreshitems", "admin", function()
|
||||
ESX.RefreshItems()
|
||||
end, true, { help = TranslateCap("command_clearall") })
|
||||
|
||||
if not Config.CustomInventory then
|
||||
ESX.RegisterCommand(
|
||||
"clearinventory",
|
||||
|
||||
Reference in New Issue
Block a user