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
推薦閱讀:
※為什麼有人不喜歡《巫師3》?
※奧特曼格鬥版都有哪些奧特曼?
※植物大戰殭屍單機版里都可以使用什麼角色?
※《我的世界1.1》下載後你發現什麼更新了?
※絕地求生全軍出擊手游手柄攻略,這十大技巧肯定有你不知道的!