Документация Steamworks
Экономика Steam

Введение

Экономика Steam — название набора функций, которые позволяют внутриигровым предметам из нескольких игр работать вместе в единой общей системе в Steam. Внутриигровые предметы экономики Steam могут приобретаться при помощи микротранзакций, зарабатываться с помощью достижений Steam, передаваться в игре или выдаваться в ответ на различные виды внутриигрового продвижения. Пользователи могут просматривать свой внутриигровой инвентарь в сообществе Steam, отправлять ссылки на предметы в чатах и обмениваться предметами с другими пользователями. Steam предоставляет пользовательский интерфейс и выполняет тяжёлую работу по реализации этих функций, но оставляет за игрой контроль над самими предметами.

Внутриигровые предметы в экономике Steam называются ресурсы (assets) и представляют собой всё, чем пользователь может владеть в игре. К примеру, снаряжение, транспорт, персонажи, домашние животные, ингредиенты для предметов и проч. Игра сообщает Steam, как отображать ресурс пользователю, но какие именно действия выполняет ресурс, определяет игра. Игра также должна отслеживать, какой пользователь какими ресурсами владеет, и сообщать эту информацию как пользователям, так и сотрудникам службы поддержки Steam. Игра также должна определять, какие ресурсы могут быть обменены, какие ограничения наложены на пользовательские хранилища предметов, а кроме того, сообщать эту информацию сотрудникам службы поддержки всю эту информацию.

Для управления информацией в игре должен быть реализован API ресурсов (Steam Asset API). Он представляет собой набор функций веб-API, необходимых Steam для доступа к серверу. Полная документация API ресурсов приведена ниже.

Требования

Для того, чтобы реализовать в игре экономику Steam, необходимо выполнить несколько требований.

  • У игры должен быть сервер ресурсов, чтобы они хранились не в игровом клиенте. Потребуется своего рода база данных, которая хранится в дата-центре. Дата-центром может владеть издатель или разработчик, а также он может располагаться на серверах хостинговой компании. В Steam есть бесплатная служба инвентаря, которая может использоваться в качестве постоянного хранилища предметов для вашей игры.
  • В игре должны быть определены контекстные номера (Context ID), которые задают контейнеры, в которых пользователи держат ресурсы.
  • В игре должны быть заданы постоянные 64-битные номера каждого ресурса (AssetID), который может быть обменян с другим пользователем. Как минимум, этот AssetID должен быть уникален для контекста, в котором находится ресурс.
  • Для всех внутриигровых ресурсов через веб-сервер должны быть предоставлены иконки инвентаря. Эти иконки должны быть в форматах jpg, png или gif, их размеры — 96 на 96 и 200 на 200 пикселей. Steam обеспечит пропускную способность, необходимую для доставки этих иконок пользователям.
  • В игре должны быть реализованы методы, включённые в систему обмена Steam (Steam Trading), по меньшей мере перечисленные ниже.
  • В игре также должны быть реализованы методы интеграции инструмента службы поддержки (Support Tool).

Читайте дальше, только если...

Вы планируете создать собственную службу учёта ресурсов. В остальной части этого документа описаны необходимые функции веб-API.
Если же вы планируете использовать службу инвентаря Steam, вам не нужно читать далее.

Система обмена Steam

Система обмена Steam использует веб-интерфейс для проведения обменов и просмотра инвентарей. Эти веб-страницы заполняются результатами запросов GetContexts, GetContextContents, GetAssetClass и GetAssetClassInfo к API ресурсов. Как только оба пользователя подтвердили обмен, во всех затронутых обменом играх происходит трёхфазная фиксация результата. Вся логика фиксации и отката обмена задаётся сервером экономики Steam. Эти действия приводят к смене владения в играх с помощью методов TradeSetUnowned и TradeSetOwned.
GETGetContexts/v0001Возвращает список контекстов пользователя.
GETGetContextContents/v0001Возвращает класс ресурса для каждого из ресурсов пользователя и валюту для показа в окне обмена или в сообществе Steam.
GETGetAssetClass/v0001Возвращает класс ресурса и владельца списка ресурсов для показа в окне обмена или в сообществе Steam.
GETGetAssetClassInfo/v0001Возвращает информацию одного класса ресурса для показа пользователю.
POSTTradeSetUnowned/v0001Вызывается, когда серверу экономики необходимо, чтобы игра забрала ресурс или средства у пользователя.
POSTTradeSetOwned/v0001Вызывается, когда серверу экономики необходимо, чтобы игра отдала пользователю существующий ресурс, которым никто не владеет.

Интеграция инструмента службы поддержки

Инструмент службы поддержки представляет собой систему, которую сотрудники службы поддержки Steam используют для устранения проблем с ресурсами пользователей (а также для других вопросов, связанных с аккаунтами в Steam). Реализация этих функций позволяет обеим формам инструмента службы поддержки иметь доступ к ресурсам в игре.

Инструмент службы поддержки получает доступ к играм в экономике Steam через две страницы: «Экономика» и «История». Страница «Экономика» взаимодействует с ресурсами в контексте с GetContextContents и GetAssetClassInfo. Страница «История» использует GetUserHistory, GetHistoryCommandDetails и HistoryExecuteCommands. Обе страницы отображают данные ресурса с результатами SupportGetAssetHistory. ContextCommand используется для выполнения сотрудниками службы поддержки действий на уровне контекста и на уровне ресурса.
POSTContextCommand/v0001Выполняет контекстную команду из инструмента службы поддержки.
GETGetUserHistory/v0001Возвращает касающиеся пользователя записи для использования в инструменте службы поддержки.
GETGetHistoryCommandDetails/v0001Возвращает сотруднику службы поддержки подробный список возможных действий по отношению к истории пользователя.
POSTHistoryExecuteCommand/v0001Выполняет в отношении истории пользователя несколько действий, выбранных сотрудником службы поддержки.
GETSupportGetAssetHistory/v0001Возвращает информацию об истории ресурса для показа в инструменте службы поддержки.

Веб-покупки

Вы можете разрешить пользователям покупать внутриигровые предметы по сети, реализовав следующие методы.
POSTStartWebAssetTransaction/v0001Начинает транзакцию со списком предметов от имени пользователя. Вызывает ISteamMicroTxn/InitTxn, чтобы Steam приготовил транзакцию и получил URL для переадресации.
POSTFinalizeWebAssetTransaction/v0001Вызывается после того, как пользователь заплатил за предметы, указанные в транзакции. Необходимо вызвать ISteamMicroTxn/FinalizeTxn прежде, чем передавать предметы пользователю.
GETGetAssetPrices/v0001Возвращает цены и категории предметов, которые могут приобрести пользователи.

Возврат средств

Положение о возврате средств в Steam позволяет пользователям возвращать деньги за покупку предметов в течение 48 часов, если предметы не были использованы, изменены или переданы другим пользователям. К этой практике можно присоединиться, внедрив следующие методы.
GETQueryRefundAllowed/v0001Вызывается для проверки статуса каждого предмета во внутриигровой покупке.
POSTRefundPurchase/v0001Вызывается, когда возврат средств одобрен либо автоматически, либо сотрудником службы поддержки.

Чужие ресурсы

Если игра импортирует ресурсы из другой игры, она может вызвать GetExportedAssets для их получения.
GETGetExportedAssets/v0001Возвращает список предметов, экспортированных другой игрой в Steam.

Версии интерфейса

Чтобы позволить существование будущих версий API ресурсов, сервер экономики добавит номер версии к каждой вызываемой ссылке. В данный момент все методы представляют собой первую версию, так что "/v0001" будет добавлено к каждой ссылке. Так что если URL вашего сервера ресурсов — https://api.mygame.com/assetapi, тогда метод GetContexts будет вызван как https://api.mygame.com/assetapi/GetContexts/v0001, за которым последуют параметры GET
этого метода.

Ключи API

Если вы зададите ключ API на вкладке «Экономика» раздела управления настройками приложения, этот ключ будет передаваться с каждым вызовом, сделанным сервером экономики.
Ключ будет содержаться в параметре key запроса GET или POST (в зависимости от типа запроса). При получении запроса удостоверьтесь, что этот ключ соответствует тому, которые вы задали на вкладке «Экономика», чтобы убедиться, что вызов действительно исходит с сервера экономики.

Частые вопросы

В. Что такое экономика Steam?

О. В платформу Steam встроены надёжные и безопасные функции обмена, всемирной торговой площадки, обеспеченной реальной валютой, возможность изучения предметов извне игр в сообществе Steam и многое другое. Вы можете использовать одну или несколько из этих функций.

В. Каковы преимущества участия в экономике Steam?

О. Предметы для игр, вовлеченных в экономику, являются более ценными, чем те предметы, которые используются в одиночных играх, что делает потребителей более счастливыми.

Игроки могут размещать ссылки на предметы в профиле Steam и в чате. Это обеспечивает бесплатную дополнительную рекламу как игре, так и относящимся к ней предметам. В играх, где реализован обмен, предметы представляют собой ценность не только для своих нынешних владельцев, но и для всех активных игроков и возможных новичков. Это, к примеру, означает, что все игры, которые используют экономику Steam, немедленно становятся более интересными и более ценными для игроков, которые играют в другие игры, где реализована экономика (к примеру, Team Fortress 2 и Dota 2).

В дополнение к этому вы можете использовать существующую инфраструктуру транзакций обмена или покупок, а также бесплатно внедрить будущие функции, если они появятся.

В. Каковы требования для участия в экономике?

О. У игры должен быть сервер ресурсов (aka сервер предметов), чтобы они хранились не в игровом клиенте: потребуется своего рода база данных, которая хранится в дата-центре.
Дата-центром может владеть издатель или разработчик, а также он может располагаться на серверах хостинговой компании. В Steam есть бесплатная служба инвентаря, которая может использоваться в качестве постоянного хранилища предметов для вашей игры. На сервере должны быть реализованы несколько веб-API-функций, чтобы Steam мог обмениваться с ним информацией.

В. Можно ли участвовать в некоторых частях экономики, но не во всех?

О. WebAPI-функции, вызываемые Steam, представляют собой единый общий интерфейс для просмотра предметов в сообществе Steam, обмена и Торговой площадки. Вы можете как пойти широким путём, отключив целые функции (к примеру, включив обмен, но отключив все транзакции на Торговой площадке), так и настроить всё на микроуровне (к примеру, все предметы можно просматривать в Сообществе, некоторые можно обменивать, но только отдельные предметы можно выставить на Торговой площадке). Эти настройки можно изменить на уровне отдельных предметов в любое время.

В. Есть ли у Valve постоянный сервер предметов, который можно использовать как часть Steamworks?

О. Для использования доступна служба инвентаря Steam.