Steamworks 文献库
Steam 库存物品配饰
物品配饰让玩家可以自定义自己的游戏内物品,为您游戏内的常见物品打造出更有价值、更有趣味、更为独特的版本。

附加配饰在社区的库存视图中可见,且在 Steam 社区市场中上架时,将创建“独特”(非商品)物品。

要支持哪种配饰类型,以及不同的配饰类型又会带来何种饰品及游戏玩法效果,全由您来决定。 您也可以选择让自己游戏中不同类型的物品支持不同类型的配饰。

backpackcomic_resize30.png

为了给大家展示一个实例,我们来看看如何给贴纸(sticker)这一各位颇为熟悉的配饰物品类型进行定义。

Unique_backpack.png

在此实例中,前缀“独特”会自动添加。

将某物品标记为可自定义

只有您将某物品明确配置为可以附加某种类型的配饰,玩家才可以这样做。 若要将某物品标记为可自定义,用属性 "accessory_tag" 对 ItemDef 进行更新,这一属性的值是每物品标签类别的标记。

示例 -
"accessory_tag": "sticker",

对此 ItemDef 而言,类别为“sticker”的每物品标签将会被作为附加配饰来对待。 每物品标签的 value 将会是该配饰物品的 ItemDefID。

在物品的整个存续期间,每物品标签都将存在,即便物品易主也是如此。

如上述示例所示,每个物品可以有多个附加配饰。 您可以用属性 "accessory_limit" 限制单个物品上配饰的数量:

"accessory_limit": 3,

默认的限制数量为 4。 我们不推荐使用更大的限制数量。

在游戏内,如果某物品可自定义,您可以通过检查每物品标签(用属性名称 “tags” 来调用 SDK 方法 ISteamInventory::GetResultItemProperty())来找到附加的配饰。

定义配饰

每个配饰其实就是一个 ItemDef,因此,您可以使用已有的工具来定义配饰的外观——包括最为重要的 icon_url 属性和本地化名称。

自定义物品生成的描述将使用来自 ItemDef 的信息。 如果您对 ItemDef 进行更改,已在用户库存中的配饰也会更新。

以下是一个简单的贴纸定义:
{ "appid": 480, "name": "Blue Star", "description": "A blue star sticker with mysterious powers", "icon_url": ...

创建一次性配饰

任何添加每物品标签的方法都可以用来附加配饰。 其中最有趣的例子莫过于定义玩家可以获得或购买、交易并使用的可消耗配饰。

这一功能由 "tag_tool" 物品类型提供。 为了修改目标物品,tag_tool 会被消耗。

首先,若要启用 tag tool,我们需要为可自定义物品启用配饰标签(在我们的例子中,该物品为背包):
{ "appid": 480, "itemdefid": 2000, "type": "item", "name": "Everyday backpack", "description": "A good place to keep things, with lots of room for stickers.", "icon_url":..., "accessory_tag": "sticker", "accessory_limit": 3, "allowed_tags_from_tools": "sticker" }

每个贴纸类型都是通过将 "type" 设置为 "tag_tool" 创建的。 tag tool 会应用配饰标签,而此贴纸的 itemdef 将作为参数。 这样一来,我们贴纸的 ItemDef 看起来会是这样:
{ "appid": 480, "itemdefid": 1001, "name": "Blue Star", "description": "A blue star sticker with mysterious powers", "price_category": "1;VLV25", "icon_url"..., "type": "tag_tool", "tags": "sticker:1001", }

请注意,"tags" 的值将会把此贴纸的 ItemDef ID 应用于目标物品。

另请注意,配饰物品支持所有的普通库存操作和掉落方法——包括定义价格类别和在物品商店进行出售。

使用配饰

若要将此贴纸应用于某物品,从 SteamWorks SDK(或通过受信任的服务器上的 WebAPI)调用 ExchangeItems(合成)方法。
将贴纸和可自定义物品作为材料传递,并将目标 ItemDep 类型设置为与初始的可自定义物品相符。 这将会应用 tag_tool 并更新目标。

如果该请求有效,ExchangeItems 调用会自动消耗贴纸,并更新目标物品上的标签。

每物品标签也可以通过其他方式设置,包括通过生成器——请参见物品标签页面

本地化和外观

配饰会自动在网页视图中渲染,包括用户的背包和社区市场。 描述区块将包含每个附加配饰图标的缩小版本,并列出每个配饰的本地化名称。

和以往一样,通过在 ItemDef 架构中提供值来对物品名称进行本地化。

请参考“Steam 库存服务”页面的“物品标签”章节来为内部名称提供本地化文字。 在我们的示例中,只是在所有支持语言内都将内部名称“sticker”映射为了“Sticker”。

您也可以输入特别的文案,以在前述的特别描述区块之前显示。 只需为物品描述添加 accessory_description_<language> 属性即可。

示例:


如果(附有“贴纸”配饰的)物品实例将动态属性 num_times_stickered 设为 123,那么如下所示在贴纸的物品定义中明述这一点时,

{ "accessory_description_schinese": "贴纸被应用 %num_times_stickered% 次" }

网页视图中将显示以下文字:

Stickers applied 123 times

移除或替换配饰

配饰物品消耗后,无法通过将其从可自定义物品上移除来恢复。 当然,配饰可以被移除——请参见每物品标签文档以了解从物品上移除标签的方法。

至于用户自定义,您可以选择提供一个其目的仅为移除已有配饰的 tag_tool。

目前尚不支持将同一饰品添加到单个物品上两次。 这样的尝试将会导致 ExchangeItems 调用失败,且不会消耗配饰物品。