Steam道具属性值详解

Steam道具属性值详解

 

Steam中道具的属性有时候令人费解,一个特定的道具有几种不同类型的ID,以及许多模糊的专有名词。本指南旨在为您解决这些问题。

首先声明,Steam道具的“官方”含义是asset。当我说“Steam道具”时,我的意思是道具的一个特定副本。我不是指道具的定义,名称,图片或任何其它东西。我指的是该道具的特定唯一副本。

一般来说,Steam上的每个道具都属于一个app。“app”是一款游戏,软件或Steam上的任何其它内容。每个app都有唯一的appid。你可以通过访问其商店页面或社区中心并查看网址来找到特定游戏的appid。例如,TF2的appid是440,所以TF2的商店页面可以在http://store.steampowered.com/app/440找到。CS:GO是730,Dota 2是570,等等。请注意,Steam社区物品,Steam礼物和其他“Steam”道具属于appid为753的“Steam”app。要识别一个道具,你需要知道它所属的游戏的appid。 当然,仅靠appid是不够的。你还需要两个其他的id。你有没有注意过一些游戏有多个不同的库?它们列出在一个下拉列表中。一个示例是Steam库存,其中有“礼物”,“优惠券”,“社区”等子库。这些“子库”被称为context,每个context都有自己的contextid。如果游戏没有下拉菜单来选择context,那并不意味着它没有context。这只意味着它只有一个可见的context。单一的context仍然有一个id。对于当前所有的Valve游戏,公开可见的context的contextid是2。

contextid可能有点棘手。它们的工作方式完全取决于游戏的开发人员。例如,Valve游戏采用“单一共享库存”模式,有一个所有人共享的contextid。在这个模式下,道具属于一个特定的context,而且永远不会改变。因此,道具的contextid从不改变。然而,游戏开发者可以任意设定context的工作方式。例如,Spiral Knights使用“每角色库存”模式,每个角色都有自己的contextid。创建一个新角色将创建一个新的contextid。这意味着,当用户交易道具时,道具的contextid将发生变化。

这是Steam中两种类型的“容器”。App包含着context,context包含着asset。除了appid和contextid之外,Steam上的每个asset都有一个assetid,该assetid在给定的AppID + ContextID组合内保证是唯一的。请注意,这意味着assetid在整个Steam中不唯一。甚至它们在特定的app中也不是唯一的。它们只在给定的context中是唯一的。例如,在同一游戏中可以有两个assetid为1的道具,只要它们具有不同的contextid。一个项目的assetid可简称为“id”

contextid和assetid由游戏开发者分配,并且可以遵循任何模式。交易时可以改变也可以不变。它们最多可达到64位。因此,Steam以JSON的形式返回它们(与所有其他64位值一样)为字符串。

到目前为止,我们所学到的内容让我们得出了这样的结论:为了唯一标识一个道具,你需要它的appid,它的contextid和它的assetid。你只有拥有了这三者,才能唯一标识它。实际上,这是链接到用户库存中特定道具的方式:http://steamcommunity.com/profiles/steamid/inventory#appid_contextid_assetid。示例:https://steamcommunity.com/profiles/76561198090809675/inventory/#730_2_14199010498 那么“classid”和“instanceid”是什么? 细心的读者可能已经注意到,一个特定道具会附加额外两个ID,我并没有提到它们。它们是“classid”和“instanceid”。这些ID用于将asset映射到它的description。 什么是description?一个description是为了显示道具所需要的属性。道具的description包含其名称,图像,颜色,market_name,是否可交易,是否可放入市场,等等。Steam上返回的代表assets的JSON对象,对象中的每个asset仅包含appid,contextid,assetid,classid,instanceid和amount。道具的amount表示它当前的堆叠数。不可堆叠道具的amount总是为1。可堆叠道具(如Steam宝石)可能拥有一个较大的amount。堆叠的道具总是具有相同的assetid。

classid和instanceid有什么区别?简而言之,一个classid“拥有”一个instanceid。classid是你获得道具总体概述所需要的。例如,具有相同classid的道具几乎总是具有相同的名称和图像。instanceid允许你获得细节,例如一把strange/ StatTrak武器上有多少击杀,或者自定义的名称/描述。

你可以通过 GetAssetClassInfo WebAPI将一对classid / instanceid转换为description。请注意,instanceid实际上是可选的:如果你只有classid,那么你将无法获得该道具的细节。

请注意,游戏开发者有可能完全刷新Steam的asset cache,这会改变每个道具的classid / instanceid。截至本帖发布之时,我并未得知这种情况曾经发生过。 Name? Market Name? Market Hash Name? Steam上的每个asset都有一个name。没有name,它就无法显示在你的库存中。道具的name是……它的name属性的描述。道具的name可以是本地化的,如果游戏开发者对此设定了的话。 每个可放入市场的道具还会有一个“market name”。market name可能与道具的name相同或不同。道具的market name是market_name属性的描述。这是Steam道具放入市场时显示在Steam社区市场上的名称。为什么有区别?有一些道具具有影响价值的数据,这些数据不在它的name中。例如,CS:GO皮肤有5个不同的“wear”,这不在它们的name中。而磨损度被附加到每个皮肤的market name上,以使得不同的磨损度在市场上分开。market name可能是本地化的,也可能不是本地化的,如果该项目不可放入市场,则market name可能不存在。这取决于游戏的开发人员。 最后,每一个可放入市场的道具还有一个“market hash name”,其依赖于market_hash_name属性。这个名称应该是该道具的market name的英文版本,但实际上它可能会有所不同。例如,Steam社区物品的market hash name的前面加上了它来源app的appid,但market name并没有如此。market hash name永远不会被本地化,并且如果该道具不可放入市场,则market hash name可能不存在。再次说明,这取决于游戏的开发人员。您可以使用以下URL公式查看任何可放入市场的道具的社区市场列表:http://steamcommunity.com/market/listings/appid/market_hash_name。示例:https://steamcommuni...upply Crate Key

请注意,社区市场没有context的概念。因此,对于指定的一类道具,market [hash] name在所有app中(以及所有context中)都是唯一的。这意味着对于可放入市场的道具,两个具有相同market hash name的道具价值大致相同(除了一些例外情况,例如异常的TF2道具)。

英文原文:Identifying Steam Items - Guides