#steam #steam-web-api
#Steam #steam-web-api
Вопрос:
В схеме Dota2 элементам присваивается «defindex», который, по-видимому, является уникальным идентификатором. Я использовал следующий вызов, чтобы получить схему. http://api.steampowered.com/IEconItems_570/GetSchema/v0001/?key=XXXX
Однако, когда кто-то читает рюкзак пользователя из steam, предметы с одинаковым «defindex» имеют разные качества. Здесь вызов, используемый для получения элементов пользователяhttp://api.steampowered.com/IEconItems_570/GetPlayerItems/v0001?key=XXXamp;SteamID=YYY
Например, вот определение элемента с defindex = 4122 в вызове GetSchema.
{ "name": "Seafarer's Shoes", "defindex": 4122, "item_class": "dota_item_wearable", "item_type_name": "#DOTA_WearableType_Shoes", "item_name": "#DOTA_Item_Seafarers_Shoes", "item_description": "#DOTA_Item_Desc_Seafarers_Shoes", "proper_name": false, "item_quality": 4, "image_inventory": "econ/items/kunkka/legs_admirableadmiral", "min_ilevel": 1, "max_ilevel": 1, "image_url": "http://cdn.dota2.com/apps/570/icons/econ/items/kunkka/legs_admirableadmiral.e679e41f99350070d812fe5cd57acda4c83a99a0.png", "image_url_large": "http://cdn.dota2.com/apps/570/icons/econ/items/kunkka/legs_admirableadmiral_large.5a9acb228f9cae6c2d6cb1199ad2bba2f54955d6.png", "item_set": "kunkka_admirable_admiral", "capabilities": { "nameable": true, "can_craft_mark": true, "can_be_restored": true, "strange_parts": true, "paintable_unusual": true, "autograph": true, "can_consume": true, "can_have_sockets": true } }, { "name": "Seafarer's Shoes", "defindex": 4122, "item_class": "dota_item_wearable", "item_type_name": "#DOTA_WearableType_Shoes", "item_name": "#DOTA_Item_Seafarers_Shoes", "item_description": "#DOTA_Item_Desc_Seafarers_Shoes", "proper_name": false, "item_quality": 4, "image_inventory": "econ/items/kunkka/legs_admirableadmiral", "min_ilevel": 1, "max_ilevel": 1, "image_url": "http://cdn.dota2.com/apps/570/icons/econ/items/kunkka/legs_admirableadmiral.e679e41f99350070d812fe5cd57acda4c83a99a0.png", "image_url_large": "http://cdn.dota2.com/apps/570/icons/econ/items/kunkka/legs_admirableadmiral_large.5a9acb228f9cae6c2d6cb1199ad2bba2f54955d6.png", "item_set": "kunkka_admirable_admiral", "capabilities": { "nameable": true, "can_craft_mark": true, "can_be_restored": true, "strange_parts": true, "paintable_unusual": true, "autograph": true, "can_consume": true, "can_have_sockets": true } },
И вот два экземпляра предметов, оба с defindex = 4122 в рюкзаке пользователя:
{ "id": xxxx, "original_id": yyyy, "defindex": 4122, "level": 1, "quality": 4, "inventory": 157, "quantity": 1 }, { "id": zzzz, "original_id": wwww, "defindex": 4122, "level": 1, "quality": 12, "inventory": 172, "quantity": 1, "attributes": [ { "defindex": 185, "value": 1374925866, "float_value": 130837463040 }, { "defindex": 312, "value": 95566398, "float_value": 1.6760434356454931e-035, "account_info": { "steamid": fffff, "personaname": "fly fly" } }, { "defindex": 313, "value": 86741690, "float_value": 8.0673307729579346e-036, "account_info": { "steamid": ggggg, "personaname": "???????" } }, { "defindex": 315, "value": 0, "float_value": 0 }, { "defindex": 316, "value": 0, "float_value": 0 }, { "defindex": 317, "value": 2, "float_value": 2.8025969286496341e-045 }, { "defindex": 318, "value": 254535695, "float_value": 8.4756437840051154e-030 }, { "defindex": 320, "value": 1155752210, "float_value": 1819.033447265625 }, { "defindex": 389, "value": 59, "float_value": 8.2676609395164207e-044 }, { "defindex": 396, "value": 1115, "float_value": 1.562447787722171e-042 }, { "defindex": 397, "value": 1073741824, "float_value": 2 } ]
},
Вы можете заметить, что два предмета в рюкзаке пользователя имеют разные
качества (4 и 12 соответственно, вероятно, из-за того, что второй предмет имеет атрибуты, которые относятся к другим предметам.
Вопрос в том, что нужно, чтобы определить предмет пользователя достаточно точно для торговых целей?
Недостаточно сказать, что я предлагаю предмет с defindex=4122. Из приведенного выше примера кажется, что мне нужно сказать: «Я предлагаю предмет с defindex = 4122 и quality = 12». Но достаточно ли этого? Могут быть и другие характеристики, которые необходимо указать, чтобы точно определить предмет Dota2.
Кто-нибудь знает, где найти такую информацию / документацию?
Ответ №1:
Вы сделали два ключевых элемента ваших экземпляров предметов анонимными, чтобы опубликовать этот вопрос. Элементы id
и original_id
однозначно идентифицируют конкретный предмет.
original_id
это идентификатор, который присваивается объекту при первом предоставлении пользователю. Этот идентификатор никогда не меняется в течение срока службы предмета. id
Поле меняется каждый раз, когда предмет модифицируется или меняет владельца (т. Е. продается).
С помощью original_id
можно отслеживать историю предмета по мере его прохождения через экономику. Вот как сайты backpack получают исторические данные о владельцах. Если вы торгуете, id
достаточно, поскольку он не изменится, если пользователь не сделает что-либо для его изменения (например: в мире TF2 добавьте тег с именем или нарисуйте его). Это id
также то, что проект SteamBot использует для завершения сделок.
Одно очень важное замечание (по крайней мере, в мире TF2): есть очень редкие случаи, когда id
может быть дублирован. Это результат эксплойтов, которые существовали и использовались до исправления (на данный момент нет известных эксплойтов дублирования) или результат вмешательства службы поддержки Steam в попытки мошенничества. Я полагаю, что служба поддержки Steam изменила свою политику простого дублирования элемента, вместо этого повторно предоставляя новый элемент, но я не могу найти надежных ссылок.
Редактировать на основе вопроса в комментарии Мой опыт работы с DOTA ограничен, но я могу дать ответ на основе TF2 и, глядя на макет схемы и макет рюкзака, сделать несколько обоснованных предположений. Два поля, которые легче всего изменить в TF2, — это quality
и attributes
список.
Качество может быть изменено путем применения странных деталей и обновления комплектов kill streak. Атрибуты могут быть изменены путем применения к предмету косметических элементов (тег имени, тег описания, краска и т.д.).
Пользователь не имеет никакого контроля над двумя различными полями идентификатора, упомянутыми выше, уровнем (который в большинстве случаев в любом случае является случайным числом), количеством или значением в поле инвентаря.
Большая часть этой информации взята отсюда.
Комментарии:
1. Согласен и приношу извинения за анонимность идентификаторов.
2. Вот еще один способ сформулировать вопрос: «элементы» в опубликованной схеме Dota2 основывают свое описание, изображение и некоторые характеристики на defindex. Я имею в виду, идентификатор в рюкзаке пользователя не содержит изображения или описания предмета; он полагается на схему для получения этой информации. Однако другие характеристики идентификаторов, которые используют один и тот же defindex, могут отличаться при просмотре отдельных идентификаторов в рюкзаках пользователей. Качество является одним из них. Тогда возникает вопрос, какие характеристики уникальны (или заблокированы) для defindex, а какие могут меняться по мере того, как пользователи возятся со своими предметами. @Andy
Ответ №2:
‘defindex’ — это ключ, который представляет определенный элемент в определенном массиве.
Например, 396 существует дважды в схеме:
Один раз для «Плаща теневого демона» и другой для «времени событий». Но они находятся в отдельных массивах («элементы» для «Плаща теневого демона», а «атрибуты» содержат «время события»).
Схема предоставляет информацию об «атрибутах», которые находятся в схеме в массиве «атрибут». Предмет с качеством «турнир»: 12 имеет атрибуты, связанные с турниром.:
{
"name": "tournament killer id",
"defindex": 312,
"attribute_class": "tournament_killer_id",
"description_string": "#Attrib_TournamentKillerID",
"description_format": "value_is_account_id",
"effect_type": "positive",
"hidden": true,
"stored_as_integer": true
}
{
"name": "tournament id",
"defindex": 315,
"attribute_class": "tournament_id",
"description_string": "#Attrib_TournamentID",
"description_format": "value_is_additive",
"effect_type": "positive",
"hidden": true,
"stored_as_integer": true
}
Качество имеет большое значение, поскольку некоторые качества не подлежат обмену, см.:http://dota2.gamepedia.com/Quality
item_quality соответствует этому массиву в схеме:
"qualities": {
"normal": 0,
"genuine": 1,
"vintage": 2,
"unusual": 3,
"unique": 4,
"community": 5,
"developer": 6,
"selfmade": 7,
"customized": 8,
"strange": 9,
"completed": 10,
"haunted": 11,
"tournament": 12,
"favored": 13,
"ascendant": 14,
"autographed": 15,
"legacy": 16,
"exalted": 17,
"frozen": 18,
"corrupted": 19,
"lucky": 20
}