forked from Simnation/Main
113 lines
No EOL
3 KiB
Lua
113 lines
No EOL
3 KiB
Lua
FM.inventory = {}
|
|
|
|
local function isNewQBInv()
|
|
local version = GetResourceMetadata(Resources.QBInv or 'qb-inventory', 'version', 0)
|
|
if not version then return false end
|
|
|
|
local vNums = {}
|
|
|
|
for num in version:gmatch("(%d+)") do
|
|
vNums[#vNums + 1] = tonumber(num)
|
|
end
|
|
|
|
return vNums and vNums[1] >= 2
|
|
end
|
|
|
|
--- Currently only working for qb-inventory
|
|
---@param type 'otherplayer'
|
|
---@param id string | number
|
|
function FM.inventory.open(type, id)
|
|
if not type or not id then return end
|
|
|
|
if QBInv then
|
|
TriggerServerEvent("inventory:server:OpenInventory", type, id)
|
|
end
|
|
end
|
|
|
|
---@param stashId string | number
|
|
---@param owner? string | boolean
|
|
---@param weight? number
|
|
---@param slots? number
|
|
function FM.inventory.openStash(stashId, owner, weight, slots)
|
|
if not stashId then FM.console.err('No stash ID provided') return end
|
|
|
|
if OXInv then
|
|
OXInv:openInventory('stash', { id = stashId, owner = owner })
|
|
elseif QBInv or QSInv or PSInv then
|
|
if QBInv and isNewQBInv() then
|
|
TriggerServerEvent('fm:internal:openStash', stashId, owner, weight, slots)
|
|
else
|
|
if QSInv then
|
|
QSInv:RegisterStash(stashId, slots, weight)
|
|
end
|
|
|
|
TriggerServerEvent('inventory:server:OpenInventory', 'stash', stashId, {
|
|
maxweight = weight,
|
|
slots = slots,
|
|
})
|
|
TriggerEvent('inventory:client:SetCurrentStash', stashId)
|
|
end
|
|
end
|
|
end
|
|
|
|
function FM.inventory.getItemsAmounts()
|
|
local items = FM.inventory.getItems()
|
|
local amounts = {}
|
|
|
|
for slot, item in pairs(items) do
|
|
if amounts[item.name] then
|
|
amounts[item.name] = amounts[item.name] + item.amount
|
|
else
|
|
amounts[item.name] = item.amount
|
|
end
|
|
end
|
|
|
|
return amounts
|
|
end
|
|
|
|
-- TODO: test for qbcore
|
|
function FM.inventory.getItems()
|
|
local inventory = {}
|
|
|
|
if OXInv then
|
|
local items = OXInv:GetPlayerItems()
|
|
for slot, item in pairs(items) do
|
|
inventory[slot] = {
|
|
name = item.name,
|
|
label = item.label,
|
|
amount = item.count
|
|
}
|
|
end
|
|
elseif ESX then
|
|
local items = ESX.GetPlayerData().inventory
|
|
for slot, item in pairs(items) do
|
|
inventory[slot] = {
|
|
name = item.name,
|
|
label = item.label,
|
|
amount = item.count
|
|
}
|
|
end
|
|
elseif QB then
|
|
local items = QB.Functions.GetPlayerData().items
|
|
for slot, item in pairs(items) do
|
|
inventory[slot] = {
|
|
name = item.name,
|
|
label = item.label,
|
|
amount = item.amount
|
|
}
|
|
end
|
|
end
|
|
|
|
return inventory
|
|
end
|
|
|
|
---@param state boolean
|
|
function FM.inventory.setWeaponWheel(state)
|
|
if OXInv then
|
|
OXInv:weaponWheel(state)
|
|
elseif QSInv then
|
|
QSInv:WeaponWheel(state)
|
|
end
|
|
end
|
|
|
|
FM.inv = {} |