Документация Steamworks
TradeSetOwned/v0001
Вызывается, когда серверу экономики Steam необходимо передать в инвентарь пользователя ресурс или порцию валюты, состояние которых ранее было изменено на «без владельца». Сервер ресурсов самостоятельно обязан убедиться, что это действие применимо по отношению к данному ресурсу или типу валюты. Он должен проверить, что состояние ресурса действительно «без владельца», что ресурс или валюту можно обменивать, и что запрошенный объём доступен.

Для ресурсов и валют, у которых есть множество копий (stackable), в данном запросе может быть указано меньшее число ресурсов или валют, чем изначально переведено в состояние «без владельца». В этом случае число ресурсов или валют без владельца должно быть уменьшено, и должен быть создан новый ресурс.

Это произойдёт, если в игре есть предмет, у которого есть множество копий, и он может быть выставлен на Торговой площадке. К примеру, если пользователь выставит на продажу большое число одинаковых предметов в одном лоте, а затем покупатели будут покупать эти предметы маленькими порциями.

Сервер ресурсов получит один запрос TradeSetUnowned при создании лота и затем по одному TradeSetOwned на каждую покупку. Когда один из пользователей совершает первую покупку предметов из данного лота, значение audit_reference в вызове TradeSetOwned совпадает со значением audit_reference в TradeSetUnowned. Последующие покупки из этого лота будут иметь другие значения audit_reference, но тот же самый assetid. Если лот отменён, значением audit_reference в итоговом TradeSetOwned будет значение, которое ранее не использовалось в других TradeSetOwned, и, как следствие, не будет совпадать со значением, использованном в TradeSetUnowned при создании лота.

Вызывается: системой обмена

Метод HTTP: POST

Параметры:

НазваниеТипОбязательно?Описание
keystringЭто ключ сервера ресурсов, который вы предоставили в настройках экономики Steam своего приложения на партнёрском сайте.
appiduint3232-битный номер приложения, к которому относятся ресурсы.
owneruint6464-битный SteamID нового владельца ресурса или валюты.
contextiduint6464-битный номер контекста, где находится этот ресурс или валюта.
assetiduint6464-битный номер передаваемого ресурса. Чтобы показать, состояние какого объекта необходимо изменить на «имеет владельца», будет указан либо assetid, либо currencyid.
currencyiduint3232-битный номер удаляемой валюты. Чтобы показать, состояние какого рода объекта необходимо изменить на «имеет владельца», будет указан либо assetid, либо currencyid.
amountuint32Число передаваемых ресурсов или валют. Для уникальных ресурсов без копий (non-stackable) это число всегда равно 1.
Это значение всегда меньше или равно объёму ресурсов или валют, которые, как считает сервер экономики Steam, существуют в данном контексте. По умолчанию равно 1.
trade_start_timeuint32Время начала сессии, ответственной за данное действие, прошедшее с 1 января 1970 года, в секундах.
audit_actionuint3232-битное число, указывающее на то, какое учётное действие изменяет состояние ресурса или валюты на «имеет владельца».
audit_referenceuint6464-битное число, указывающее на то, какое событие связано с действием. Сервер ресурсов может записать это число для целей учёта и отладки.
leave_originalboolЕсли этот параметр равен 1 (для обозначения истинности), значит у сервера ресурсов просят создать дубликат предмета и создать владеемый предмет, являющийся копией указанного ресурса. Этот параметр будет равняться true только в случае односторонней отмены обмена сотрудником службы поддержки. По умолчанию равно 0 (false).
request_repeatedboolЕсли этот параметр равен 1 (для обозначения истинности), сервер экономики Steam показывает, что ранее он уже делал запрос, идентичный данному, но не получил чёткий ответ об успехе или сбое. Если окажется, что состояние ресурса или валюты уже изменено на «имеет владельца» для тех же параметров audit_action и audit_reference, тогда сервер ресурсов должен вернуть ответ success со значениями полей new_assetid и new_contextid, равными тому, что было возвращено во время первого запроса.
is_marketboolЕсли этот параметр равен 1 (для обозначения истинности), значит, этот запрос отправлен в ответ на действия на торговой площадке Steam. Если audit_action равен 101 (выполнение обмена), это означает, что пользователь купил данный предмет. Если audit_action равен 102, это означает, что пользователь отменил лот или предмет возвращается пользователю из-за ошибки при создании лота.

Возвращаемые значения

Результат этого метода кодируется в .json.

Ответ:
  • result
    • success — true, если метод успешен. Если сервер ресурсов возвращает false, будет также возвращено поле error с объяснением.
    • error — объяснение сбоя. Это сообщение будет записано в журнал ошибок, который увидеть во вкладке «Экономика» раздела «Сообщество» настроек приложения.
    • new_assetid (необязательно) — 64-битный AssetID версии «без владельца» данного ресурса. Это значение устанавливается только при передаче ресурса. Это
      может быть как новый AssetID, так и тот же самый, что и в запросе, в зависимости от того, как это реализовано на сервере ресурсов.
      По умолчанию — тот же самый, что и в запросе.


      Обратите внимание: в целях учёта мы рекомендуем реализовать это таким образом, что сервер ресурсов создаёт новую копию ресурса и возвращает новый AssetID в ответ на TradeSetOwned. Мы находим, что данный подход помогает предотвратить ошибки, поскольку он означает, что если ресурс был удалён или лишён владельца, он остаётся в этом состоянии навсегда. Также может оказаться полезным отслеживание связи между старым и новым ресурсами (к примеру, можно сохранять некий OriginalAssetID, который будет неизменным с момента создания ресурса). Эти подходы не являются обязательными, мы просто находим их полезными.
    • new_contextid (не обязательно) — 64-битный ContextID новой версии ресурса или валюты. Это может быть как новый ContextID, так и тот же самый, что и в запросе, в зависимости от того, как это реализовано на сервере ресурсов. По умолчанию — тот же самый, что и в запросе.

Учётные действия

Это текущий список учётных действий, которые могут быть переданы с данным методом. В любой момент в этот список могут быть добавлены новые действия, так что сервер ресурсов должен быть готов справиться с любым 32-битным числом без знака.
  • 101 — Выполнение обмена (Trade Commit). Запрос отправляется как часть обмена. Поле audit_reference является номером обмена (TradeID).
  • 102 — Отмена обмена (Trade Rollback). Запрос отправляется как часть отмены обмена. Поле audit_reference является номером обмена (TradeID).