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 = {} |