InventoryItem
InventoryItem is an Object which implements the Item interface. It represents an Item stored in an Inventory and has no 3D representation in the world.
Properties
| Property Name | Return Type | Description | Tags | 
|---|---|---|---|
| itemAssetId | string | Asset ID defining this Item's properties. | Read-Only | 
| itemTemplateId | string | Asset reference that is spawned as a child of an ItemObject when spawned in the world. May be nil. | Read-Only | 
| maximumStackCount | integer | The maximum number of items in one stack of this item. Zero or negative numbers indicate no limit. | Read-Only | 
| count | integer | The number of items this object represents. | Read-Write | 
| inventory | Inventory | The Inventory which owns this item. | Read-Only | 
| slot | integer | The slot number to which this item has been assigned within its owning Inventory. | Read-Only | 
| name | string | The name of this item, inherited from the Item asset. | Read-Only | 
Functions
| Function Name | Return Type | Description | Tags | 
|---|---|---|---|
| GetCustomProperties() | table | Returns a table containing the names and values of all custom properties on this item. Initial values are inherited from the Item asset defining this item. | None | 
| GetCustomProperty(string propertyName) | value,boolean | Returns the value of a specific custom property or nilif the Item does not possess the custom property. The second return value istrueif the property is found orfalseif it is not. Initial values are inherited from the Item asset defining this item. | None | 
| IsCustomPropertyDynamic(string propertyName) | boolean | Returns trueif the named custom property exists and is marked as dynamic. Otherwise, returnsfalse. | None | 
| SetCustomProperty(string propertyName, value) | boolean | Sets the value of a custom property. The value must match the existing type of the property. Returns trueif the property was successfully set. If the property could not be set, returnsfalseor raises an error depending on the cause of the failure. | None | 
Examples
Example using:
GetCustomProperty
SetCustomProperty
In this example, a pair of server/client scripts are placed under an Inventory. If any of the inventory items has a dynamic custom property called "Freshness", then that item becomes less fresh over time, until the "Freshness" property reaches zero. The server script is responsible for changing the freshness, while the client script listens for the changes and prints them to the Event Log.
-- SERVER SCRIPT:
local INVENTORY = script:FindAncestorByType("Inventory")
local DECAY_PERIOD = 5
function Tick()
    Task.Wait(DECAY_PERIOD)
    for _,item in ipairs(INVENTORY:GetItems()) do
        local value, hasProperty = item:GetCustomProperty("Freshness")
        if hasProperty and value > 0 then
            item:SetCustomProperty("Freshness", value - 1)
        end
    end
end
-- CLIENT SCRIPT:
local INVENTORY = script:FindAncestorByType("Inventory")
function OnPropertyChanged(inventory, item, propertyName)
    local value = item:GetCustomProperty(propertyName)
    print("Item ".. item.name ..":".. propertyName .." = ".. tostring(value))
    if propertyName == "Freshness" then
        if value == 1 then
            print("One of your items is almost rotten!")
        elseif value == 0 then
            print(item.name .." is now rotten.")
        end
    end
end
INVENTORY.itemPropertyChangedEvent:Connect(OnPropertyChanged)
See also: Inventory.itemPropertyChangedEvent | CoreObject.FindAncestorByType | Task.Wait
Example using:
itemAssetId
itemTemplateId
maximumStackCount
count
inventory
slot
name
In this example, a client script prints to the Event Log all the contents of the local player's inventory. If the inventory contents change, the new list of contents is printed. In case the player has more than one inventory only the first one will be printed.
local VERBOSE = false
local player = Game.GetLocalPlayer()
local currentInventory = nil
function RefreshInventoryUI()
    print("\nInventory:")
    for i = 1, currentInventory.slotCount do
        local item = currentInventory:GetItem(i)
        if item then
            print(item.name .." x"..item.count)
            if VERBOSE then
                print("  itemAssetId: "..item.itemAssetId)
                print("  itemTemplateId: "..item.itemTemplateId)
                print("  maxStackCount: "..item.maximumStackCount)
                print("  inventory: "..item.inventory.name)
                print("  slot: "..item.slot)
            end
        end
    end
end
while currentInventory == nil do
    currentInventory = player:GetInventories()[1]
    if currentInventory then
        currentInventory.changedEvent:Connect(RefreshInventoryUI)
        RefreshInventoryUI()
    else
        Task.Wait()
    end
end
See also: Inventory.GetItem | Player.GetInventories | Task.Wait | Game.GetLocalPlayer