Skip to content

Exports & API

Core Inventory exposes a comprehensive set of exports for integration with other scripts. All server exports accept either a player source ID or an inventory name string.

TIP

When you pass a player source ID (number), the script automatically resolves it to content-{citizenid}. You can also pass inventory names directly like stash-police1 or big_trunk-ABC123.

Server Exports

Adding & Removing Items

serverexports['core_inventory']:addItem(inventory, item, amount, metadata, inventoryType)

Adds an item to the specified inventory. Handles stacking, metadata, money sync, and inventory creation automatically.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
amountnumberAmount to add
metadatatableOptional metadata (e.g., {durability = 100})
inventoryTypestringOptional inventory type for auto-creation
Returns: boolean
Example
lua
-- Add 5 bread to a player
exports['core_inventory']:addItem(source, 'bread', 5)

-- Add a weapon with metadata
exports['core_inventory']:addItem(source, 'weapon_pistol', 1, {
    ammo = 12,
    durability = 100.0
})

-- Add to a named inventory
exports['core_inventory']:addItem('stash-police1', 'bandage', 10, {}, 'stash')
serverexports['core_inventory']:removeItem(inventory, item, amount, inventoryType)

Removes an item from the specified inventory. Removes from the first matching slot found.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
amountnumberAmount to remove
inventoryTypestringOptional inventory type
Returns: boolean
Example
lua
exports['core_inventory']:removeItem(source, 'bread', 2)
serverexports['core_inventory']:removeItemExact(inventory, item, amount)

Removes an item from a specific slot index rather than searching by name.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemnumberSlot index to remove from
amountnumberAmount to remove
Returns: boolean
Example
lua
exports['core_inventory']:removeItemExact(source, 3, 1) -- Remove 1 from slot 3
serverexports['core_inventory']:setItem(inventory, item, amount, metadata)

Sets an item to an exact amount. If amount is higher, adds the difference. If lower, removes the difference.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
amountnumberTarget amount
metadatatableOptional metadata
Returns: void
Example
lua
-- Ensure player has exactly 10 water
exports['core_inventory']:setItem(source, 'water', 10)

Querying Items

serverexports['core_inventory']:hasItem(inventory, items, amount)

Checks if the inventory contains the specified item(s) in the required amount. Accepts a single item string or a table of items.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemsstring|tableItem name or table of item names
amountnumberRequired amount (default 1)
Returns: boolean
Example
lua
if exports['core_inventory']:hasItem(source, 'lockpick', 1) then
    -- Player has at least 1 lockpick
end

-- Check multiple items
if exports['core_inventory']:hasItem(source, {'bread', 'water'}, 1) then
    -- Player has at least 1 of each
end
serverexports['core_inventory']:getItem(inventory, item)

Returns the first matching item data found in the inventory.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
Returns: table|nil
Example
lua
local item = exports['core_inventory']:getItem(source, 'weapon_pistol')
if item then
    print('Durability:', item.metadata.durability)
    print('Ammo:', item.metadata.ammo)
end
serverexports['core_inventory']:getItems(inventory, item)

Returns all matching items of the given name across all slots.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
Returns: table
Example
lua
local allBread = exports['core_inventory']:getItems(source, 'bread')
for _, slot in pairs(allBread) do
    print('Slot has', slot.amount, 'bread')
end
serverexports['core_inventory']:getItemCount(inventory, items)

Returns the total count of an item across all slots. Accepts a single item or table of items.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemsstring|tableItem name or table of item names
Returns: number
Example
lua
local count = exports['core_inventory']:getItemCount(source, 'bread')
print('Player has', count, 'bread total')
serverexports['core_inventory']:getItemBySlot(inventory, slot)

Returns the item data at a specific slot index.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
slotnumberSlot index
Returns: table|nil
Example
lua
local item = exports['core_inventory']:getItemBySlot(source, 1)
serverexports['core_inventory']:getSlotsByItem(inventory, item)

Returns all slot indices containing the specified item.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
Returns: table
Example
lua
local slots = exports['core_inventory']:getSlotsByItem(source, 'bread')
serverexports['core_inventory']:getFirstSlotByItem(inventory, item)

Returns the first slot index containing the specified item.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
Returns: number|nil
Example
lua
local slot = exports['core_inventory']:getFirstSlotByItem(source, 'phone')
serverexports['core_inventory']:getItemsList()

Returns the full registered items table (all item definitions).

Returns: table
Example
lua
local allItems = exports['core_inventory']:getItemsList()
serverexports['core_inventory']:canCarry(inventory, item, amount, metadata)

Checks if the inventory has enough space to hold the specified item and amount.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
itemstringItem name
amountnumberAmount to check
metadatatableOptional metadata
Returns: boolean
Example
lua
if exports['core_inventory']:canCarry(source, 'bread', 10) then
    exports['core_inventory']:addItem(source, 'bread', 10)
end
serverexports['core_inventory']:search(inventory, search, items, metadata)

Advanced search across an inventory. Supports searching by item names and metadata filters.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
searchstringSearch type
itemsstring|tableItem name(s) to search for
metadatatableOptional metadata filter
Returns: table
Example
lua
local results = exports['core_inventory']:search(source, 'count', 'bread')

Inventory Management

serverexports['core_inventory']:getInventory(inventory)

Returns the full inventory data including all slots and content.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
Returns: table|nil
Example
lua
local inv = exports['core_inventory']:getInventory(source)
if inv then
    for slot, item in pairs(inv.content) do
        print(slot, item.name, item.amount)
    end
end
serverexports['core_inventory']:clearInventory(inventory, source)

Clears all items from the inventory. Respects SoulboundItems — those items are kept.

ParameterTypeDescription
inventorynumber|stringInventory name
sourcenumberOptional player source for notification
Returns: void
Example
lua
exports['core_inventory']:clearInventory(source)
serverexports['core_inventory']:clearAllInventory(source)

Clears ALL player inventories — pockets, weapon holders, and clothing slots.

ParameterTypeDescription
sourcenumberPlayer source
Returns: void
Example
lua
exports['core_inventory']:clearAllInventory(source)
serverexports['core_inventory']:confiscatePlayerInventory(source)

Confiscates all items from a player's inventory (stores them for later return).

ParameterTypeDescription
sourcenumberPlayer source
Returns: void
Example
lua
exports['core_inventory']:confiscatePlayerInventory(source)
serverexports['core_inventory']:returnPlayerInventory(source)

Returns previously confiscated items back to the player.

ParameterTypeDescription
sourcenumberPlayer source
Returns: void
Example
lua
exports['core_inventory']:returnPlayerInventory(source)
serverexports['core_inventory']:confiscateInventory(inventory)

Confiscates all items from a named inventory.

ParameterTypeDescription
inventorystringInventory name
Returns: void
Example
lua
exports['core_inventory']:confiscateInventory('stash-evidence1')
serverexports['core_inventory']:returnInventory(inventory)

Returns previously confiscated items to a named inventory.

ParameterTypeDescription
inventorystringInventory name
Returns: void
Example
lua
exports['core_inventory']:returnInventory('stash-evidence1')

Opening Inventories

serverexports['core_inventory']:openInventory(source, inventory, inventoryType, label, restrictedTo, openForSource)

Opens or creates an inventory and optionally displays it to a player.

ParameterTypeDescription
sourcenumber|nilPlayer source (nil to just create)
inventorystringUnique inventory name
inventoryTypestringInventory type from Config.Inventories
labelstringOptional display label override
restrictedTotableOptional category restrictions
openForSourcebooleanWhether to open UI for the player
Returns: void
Example
lua
-- Open a stash for a player
exports['core_inventory']:openInventory(source, 'mystash-1', 'stash', 'My Stash', nil, true)
serverexports['core_inventory']:openOtherPlayerInventory(source, target)

Opens another player's inventory for searching/transfer.

ParameterTypeDescription
sourcenumberPlayer who is searching
targetnumberPlayer being searched
Returns: void
Example
lua
exports['core_inventory']:openOtherPlayerInventory(copSource, suspectSource)
serverexports['core_inventory']:openHolder(source, inventory, inventoryType)

Opens a holder-type inventory (single item slot).

ParameterTypeDescription
sourcenumberPlayer source
inventorystringHolder inventory name
inventoryTypestringHolder type
Returns: void
Example
lua
exports['core_inventory']:openHolder(source, 'primary-' .. citizenid, 'primary')
serverexports['core_inventory']:openLoot(source, inventoryType, lootTable, minItems, maxItems, inventory)

Opens a randomized loot inventory. Items are randomly selected from the loot table.

ParameterTypeDescription
sourcenumberPlayer source
inventoryTypestringInventory type
lootTabletableTable of possible items with chances
minItemsnumberMinimum items to spawn
maxItemsnumberMaximum items to spawn
inventorystringOptional fixed inventory name
Returns: void
Example
lua
exports['core_inventory']:openLoot(source, 'stash', {
    {item = 'bread', amount = 3, chance = 80},
    {item = 'lockpick', amount = 1, chance = 20},
}, 1, 3)
serverexports['core_inventory']:openLootAdvanced(source, inventoryType, lootTable, addAllSameItem, inventory, shouldRegenerate)

Advanced loot with control over item duplication and regeneration.

ParameterTypeDescription
sourcenumberPlayer source
inventoryTypestringInventory type
lootTabletableLoot items
addAllSameItembooleanAdd all items at once
inventorystringOptional fixed name
shouldRegeneratebooleanRegenerate loot on each open
Returns: void
Example
lua
exports['core_inventory']:openLootAdvanced(source, 'stash', lootTable, true, 'dumpster-1', false)

Metadata & Durability

serverexports['core_inventory']:updateMetadata(inventory, slot, metadata)

Replaces the metadata of an item at a specific slot.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
slotnumberSlot index
metadatatableNew metadata table
Returns: void
Example
lua
exports['core_inventory']:updateMetadata(source, 1, { durability = 50, uses = 3 })
serverexports['core_inventory']:setMetadata(inventory, slotid, metadata)

Sets metadata on an item by slot ID.

ParameterTypeDescription
inventorynumber|stringPlayer source or inventory name
slotidnumberSlot index
metadatatableMetadata to set
Returns: void
Example
lua
exports['core_inventory']:setMetadata(source, 5, { quality = 'legendary' })
serverexports['core_inventory']:setDurability(inventory, slot, value)

Sets the durability of an item at a specific slot (0-100).

ParameterTypeDescription
inventorystringInventory name
slotnumberSlot index
valuenumberDurability value (0-100)
Returns: void
Example
lua
exports['core_inventory']:setDurability('content-ABC123', 3, 100)
serverexports['core_inventory']:removeDurability(inventory, slot, amount)

Reduces the durability of an item by the specified amount.

ParameterTypeDescription
inventorystringInventory name
slotnumberSlot index
amountnumberAmount to reduce
Returns: void
Example
lua
exports['core_inventory']:removeDurability('content-ABC123', 3, 10)

Saving & Loading

serverexports['core_inventory']:savePlayerInventory(source)

Saves all player inventories to the database.

ParameterTypeDescription
sourcenumberPlayer source
Returns: void
Example
lua
exports['core_inventory']:savePlayerInventory(source)
serverexports['core_inventory']:saveInventory(inventory)

Saves a specific inventory to the database.

ParameterTypeDescription
inventorystringInventory name
Returns: void
Example
lua
exports['core_inventory']:saveInventory('stash-police1')
serverexports['core_inventory']:loadPlayerInventory(source)

Loads a player's inventories from the database.

ParameterTypeDescription
sourcenumberPlayer source
Returns: void
Example
lua
exports['core_inventory']:loadPlayerInventory(source)
serverexports['core_inventory']:updateInventorySize(inventory, slots, rows)

Dynamically updates the slot count and row layout of an inventory.

ParameterTypeDescription
inventorystringInventory name
slotsnumberNew slot count
rowsnumberNew row count
Returns: void
Example
lua
exports['core_inventory']:updateInventorySize('stash-vip', 200, 10)

Dynamic Items

serverexports['core_inventory']:registerDynamicItem(itemname, itemData, force)

Registers a new item at runtime without requiring a restart.

ParameterTypeDescription
itemnamestringItem name to register
itemDatatableItem definition table
forcebooleanOverwrite if exists
Returns: boolean
Example
lua
exports['core_inventory']:registerDynamicItem('custom_item', {
    name = 'custom_item',
    label = 'Custom Item',
    weight = 100,
    type = 'item',
    image = 'custom_item.png',
    unique = false,
    useable = true,
    shouldClose = false,
    description = 'A custom item'
}, false)

Client Exports

clientexports['core_inventory']:openInventory()

Opens the player's inventory UI.

Returns: void
Example
lua
exports['core_inventory']:openInventory()
clientexports['core_inventory']:closeInventory()

Closes the inventory UI.

Returns: void
Example
lua
exports['core_inventory']:closeInventory()
clientexports['core_inventory']:isInventoryOpen()

Returns whether the inventory UI is currently open.

Returns: boolean
Example
lua
if exports['core_inventory']:isInventoryOpen() then
    -- Inventory is open
end
clientexports['core_inventory']:weaponWheel(enable)

Enables or disables the GTA weapon wheel.

ParameterTypeDescription
enablebooleantrue to enable, false to disable
Returns: void
Example
lua
exports['core_inventory']:weaponWheel(false) -- Disable weapon wheel
clientexports['core_inventory']:getWeaponEquiped()

Returns data about the currently equipped weapon.

Returns: table|nil
Example
lua
local weapon = exports['core_inventory']:getWeaponEquiped()
if weapon then
    print('Equipped:', weapon.name)
end
clientexports['core_inventory']:getWeaponData()

Returns the full data table of the current weapon.

Returns: table|nil
Example
lua
local data = exports['core_inventory']:getWeaponData()
clientexports['core_inventory']:getWeaponAmmo()

Returns the current ammo count and max capacity of the equipped weapon.

Returns: number, number
Example
lua
local ammo, capacity = exports['core_inventory']:getWeaponAmmo()
print('Ammo:', ammo, '/', capacity)
clientexports['core_inventory']:openShop(shopId)

Opens a shop UI by its config key.

ParameterTypeDescription
shopIdstringShop ID from Config.Shops
Returns: void
Example
lua
exports['core_inventory']:openShop('247')