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

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

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

backpackcomic_resize30.png

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

Unique_backpack.png

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

将某物品标记为可自定义

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

示例 -
"accessory_tag": "贴纸",

对于此 ItemDef 而言,任何类别为“贴纸”的单件物品标签都将被作为附加配饰来对待。 单件物品标签的是该配饰物品的 ItemDefID。

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

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

"accessory_limit": 3,

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

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

定义配饰

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

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

以下是一个简单的贴纸定义:
{ "appid": 480, "name": "蓝星", "description": "具有神秘力量的蓝星贴纸", "icon_url": ...

创建一次性配饰

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

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

首先,若要启用 tag tool,我们需要为可自定义物品启用配饰标签(在我们的例子中,该物品为背包):
{ "appid": 480, "itemdefid": 2000, "type": "item", "name": "日常背包", "description": "存放物品的好地方,还有超多位置可以贴贴纸。", "icon_url":..., "accessory_tag": "贴纸", "accessory_limit": 3, "allowed_tags_from_tools": "贴纸" }

每个贴纸类型的饰品都是通过将“type”设置为“tag_tool”而创建的。 tag tool 会应用配饰标签,而此贴纸的 itemdef 将作为参数。 这样一来,我们贴纸的 ItemDef 看起来会是这样:
{ "appid": 480, "itemdefid": 1001, "name": "蓝星", "description": "具有神秘力量的蓝星贴纸", "price_category": "1;VLV25", "icon_url"..., "type": "tag_tool", "tags": "贴纸:1001", }

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

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

使用配饰

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

若请求有效,ExchangeItems 调用将以原子操作方式消耗贴纸并更新目标物品的标签。

单件物品标签也可以通过其他方式设置,包括通过物品生成器(item generator)设置——请参见物品标签页面

本地化和外观

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

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

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

您还可以指定特殊文本,该内容将显示在上述特殊描述区块之前。 只需在物品描述中添加一个 accessory_description_<language> 属性,其中 <language> 是 API 支持的语言代码。结合 动态属性功能,您可设置将被动态属性值替换的替代符。

示例:


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

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

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

贴纸被应用 123 次

移除或替换配饰

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

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

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