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

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

Метод 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.

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

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

Ответ:
  • result
    • success — true, если метод успешен. Если сервер ресурсов возвращает false, будет также возвращено поле error с объяснением.

      Обратите внимание:если success = false, если ответ некорректен или если время на обработку запроса истекло, Steam попробует послать запрос TradeSetUnowned снова, до тех пор, пока не получит success = true. Если ошибка является постоянным сбоем (к примеру, предмет больше не существует), необходимо приравнять should_retry к 0.
    • should_retry — по умолчанию Steam будет отправлять запросы TradeSetUnowned, пока не получит success = true. Это делается для того, чтобы удостовериться, что состояние предмета непротиворечиво, прежде чем система примет решение о том, что делать дальше. Тем не менее, для постоянных сбоев, когда вам известно, что повторные попытки не изменят ответ (к примеру, если предмет больше не существует), это поле можно приравнять к нулю.

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

      Это поле требуется, потому что существует вероятность, что сервер ресурсов получит два разных запроса TradeSetUnowned с одним и тем же assetid, но с разными audit_reference. К примеру, пользователь может попытаться обменять предмет и одновременно выставить его на Торговой площадке.
      Сервер ресурсов должен принять первый запрос TradeSetUnowned, но отклонить второй, поскольку пользователь больше не владеет предметом. В данном примере, ответ на второй запрос должен содержать параметр should_retry, равный нулю, поскольку запрос не был выполнен и никогда не будет выполнен.

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

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

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