Now in
beta is the ability to define "tool" items that you can use to modify
Steam Inventory Item Tags on other items.
Using the
ISteamInventory::ExchangeItems call, you then pass in both the tool and the target item--tags will be transferred or generated and a new item (copied from the target item) will be created.
These tags are automatically sent along with other item attributes to the Steam Client and can be retrieved by calling ISteamInventory::GetResultItemProperty() with the property name "tags". The tags will be returned in the provided string buffer, delimited by the
;
character.
Simple Example
Here is an example of a tool that can apply a "paint" color to another item.
First, you'll need an item definition for the tool. Note that you'll probably want to remove the tags using the
tags_to_remove_on_tool_use
property, otherwise you may get duplicate tags or tag categories on your item if multiple tools have been applied to it. Any matching tags will be removed first before any new ones are applied.
itemdefid: 100
type: tag_tool
name: Red Paint Can
tags: paint_color:red
tags_to_remove_on_tool_use: paint_color
On the target item, you'll need to specify that it can take the tag "paint_color":
itemdefid: 200
type: item
name: Hat
allowed_tags_from_tools: paint_color
Then using
ISteamInventory::ExchangeItems call, a user could apply the "Red Paint Can" tool to their "Hat" and the resulting item should have the tag "paint_color:red". Note that the expected item definition id should match the target item's item definition id.
SteamItemInstanceID_t inputItems[2] = { unPaintCanItemDefID, unHatItemDefID };
uint32 inputQuantities[2] = { 1, 1 };
SteamItemDef_t outputItems[1] = { unHatItemDefID };
uint32 outputQuantity[1] = { 1 };
SteamInventoryResult_t resultHandle;
SteamInventory()->ExchangeItems( &resultHandle, outputItems, outputQuantity, 1, inputItems, inputQuantities, 2 );
If you wanted to have a tool that just removed a tag, you can define something like this "Paint Stripper." You would call
ISteamInventory::ExchangeItems in the same manner described above. Your item definition would just have the
tags_to_remove_on_tool_use
property set.
itemdefid: 300
type: tag_tool
name: Paint Stripper
tags_to_remove_on_tool_use: paint_color
Tag Generator Example
Instead of a specific paint color, you can set up a tool that can apply tags from a
tag_generator
item definition.
itemdefid: 500
type: tag_generator
name: Tag Generator Paint
tag_generator_name: paint_color
tag_generator_values: red:33;blue:33;green:33;gold:1
itemdefid: 100
type: tag_tool
name: Random Paint Can
tag_generators: 500
tags_to_remove_on_tool_use: paint_color
Then when a user applies the "Random Paint Can" tool to their "Hat" using the
ISteamInventory::ExchangeItems call, they have a 33% chance to get either "red," "green," or "blue" and a 1% chance to get "gold."
Dynamic Properties Restriction Example
You can restrict the modification of certain
dynamic properties on an item using tags. With a
tag_tool
, you can now allow those properties to be set on an item where previously it would not be allowed if that item did not have the required tags. Here's an example of an item that keeps track of kills on a rocket launcher.
itemdefid: 100
type: item
name: Rocket Launcher
itemdefid: 200
type: tag_tool
name: Kill Stat Tracker
tags: stat_tracker:kills
tags_to_remove_on_tool_use: stat_tracker:kills
Using the Steamworks API you can have the client update properties on the Rocket Launcher for the dynamic property "kills." However, in the configuration for that dynamic property you can restrict that to items that have the "stat_tracker" tag either on the item or its associated item definition. Once the "Kill Stat Tracker" has been applied to the Rocket Launcher, the dynamic property "kills" can be set on the Rocket Launcher as well.