Что идентифицирует элемент «Dota2» в Steam?

#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
        }