114 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			No EOL
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| FM.inventory = {}
 | |
| 
 | |
| ---@param itemName string
 | |
| ---@param cb function
 | |
| function FM.inventory.registerUsableItem(itemName, cb)
 | |
|     if ESX then
 | |
|         ESX.RegisterUsableItem(itemName, function(src, item)
 | |
|             cb(src, item)
 | |
|         end)
 | |
|     elseif QB then
 | |
|         QB.Functions.CreateUseableItem(itemName, function(src, item)
 | |
|             cb(src, item)
 | |
|         end)
 | |
|     end
 | |
| end
 | |
| 
 | |
| local cachedItemLabels = {}
 | |
| ---@param item string
 | |
| ---@return string label
 | |
| --- Currently not working for weapons in ESX & OXInv
 | |
| function FM.inventory.getItemLabel(item)
 | |
|     if not item then return end
 | |
| 
 | |
|     if OXInv then
 | |
|         if cachedItemLabels[item] then return cachedItemLabels[item]
 | |
|         else
 | |
|             for itemName, v in pairs(OXInv:Items()) do
 | |
|                 cachedItemLabels[itemName] = v.label
 | |
|             end
 | |
| 
 | |
|             return cachedItemLabels[item]
 | |
|         end
 | |
|     elseif ESX then return ESX.GetItemLabel(item)
 | |
|     elseif QB then return QB.Shared.Items[item].label end
 | |
| end
 | |
| 
 | |
| ---@param inv string inventory name/player source
 | |
| ---@param slot? number slot number
 | |
| function FM.inventory.getMetaDataBySlot(inv, slot)
 | |
|     if OXInv then return OXInv:GetSlot(inv, slot)?.metadata
 | |
|     elseif COREInv then return COREInv:getItemBySlot(inv, slot)?.metadata
 | |
|     elseif QSInv then
 | |
|         local items = QSInv:GetInventory(inv)
 | |
|         for _, item in pairs(items) do
 | |
|             if item.slot == slot then return item.info end
 | |
|         end
 | |
|     elseif QBInv then return QBInv:GetItemBySlot(inv, slot)?.info end
 | |
| end
 | |
| 
 | |
| ---@param inv string inventory name/player source
 | |
| ---@param itemName string item name
 | |
| function FM.inventory.getSlotIDByItem(inv, itemName)
 | |
|     if OXInv then return OXInv:GetSlotIdWithItem(inv, itemName)
 | |
|     elseif QBInv then return QBInv:GetFirstSlotByItem(QB.Functions.GetPlayer(inv).PlayerData.Items, itemName)
 | |
|     elseif COREInv then return COREInv:getFirstSlotByItem(inv, itemName)
 | |
|     elseif QSInv then
 | |
|         local items = QSInv:GetInventory(inv)
 | |
|         for name, item in pairs(items) do
 | |
|             if name == itemName then return item.slot end
 | |
|         end
 | |
|     elseif PSInv then return PSInv:GetFirstSlotByItem(FM.player.get(inv).getItems(), itemName) end
 | |
| end
 | |
| 
 | |
| ---@param inv string inventory name/player source
 | |
| ---@param slot number slot number
 | |
| ---@param metadata table metadata
 | |
| function FM.inventory.setMetaDataBySlot(inv, slot, metadata)
 | |
|     if OXInv then OXInv:SetMetadata(inv, slot, metadata)
 | |
|     elseif COREInv then COREInv:setMetadata(inv, slot, metadata)
 | |
|     elseif QSInv then QSInv:SetItemMetadata(inv, slot, metadata)
 | |
|     elseif QBInv then QBInv:SetMetaData(inv, slot, metadata) end
 | |
| end
 | |
| 
 | |
| --- Only necessary for ox-inventory
 | |
| ---@param stash { id: string | number, label: string, slots: number, weight: number, owner?: string | boolean, groups?: table, coords?: vector3 | vector3[] }
 | |
| function FM.inventory.registerStash(stash)
 | |
|     if OXInv then
 | |
|         OXInv:RegisterStash(stash.id, stash.label, stash.slots, stash.weight, stash.owner, stash.groups, stash.coords)
 | |
|     end
 | |
| end
 | |
| 
 | |
| --- Only necessary for ox-inventory
 | |
| ---@param stashId string | number
 | |
| ---@param newWeight? number
 | |
| ---@param newSlots? number
 | |
| function FM.inventory.upgradeStash(stashId, newWeight, newSlots)
 | |
|     if newWeight then
 | |
|         if OXInv then OXInv:SetMaxWeight(stashId, newWeight) end
 | |
|     end
 | |
| 
 | |
|     if newSlots then
 | |
|         if OXInv then OXInv:SetSlotCount(stashId, newSlots) end
 | |
|     end
 | |
| end
 | |
| 
 | |
| --[[
 | |
|     INTERNAL EVENT HANDLERS
 | |
|     DO NOT USE
 | |
| --]]
 | |
| 
 | |
| RegisterNetEvent('fm:internal:openStash', function(stashId, owner, weight, slots)
 | |
|     local src = source
 | |
|     exports['qb-inventory']:OpenInventory(src, stashId, {
 | |
|         maxweight = weight,
 | |
|         slots = slots,
 | |
|     })
 | |
| end)
 | |
| 
 | |
| -- Compatibility bridge for older versions
 | |
| FM.inventory.getSlotIDWithItem = FM.inventory.getSlotIDByItem
 | |
| FM.inventory.getMetaData = FM.inventory.getMetaDataBySlot
 | |
| 
 | |
| -- Aliases
 | |
| FM.inv = FM.inventory | 
