/expedition/claim
Метод выдаёт награду за завершённую экспедицию и тут же подменяет слот новым предложением из пула: паузы между экспедициями нет. Новое предложение роллится с нуля — тир выбирается по весам полосы, а не наследуется от забранной экспедиции.
Выдаётся та награда, что была зафиксирована при роле предложения (base_rewards / bonus_rewards в состоянии), а не та, что полагается полосе на момент клейма: перешедший в другую полосу игрок получает за старое предложение старую награду.
Если объявленная награда не выдаётся в текущей версии конфига, метод отказывает до того, как заберёт слот: проверяются и сама наградная таблица, и ресурсы, которые она называет. Начисление на битой ссылке не падает — оно молча платит ноль, — поэтому без проверки игрок терял бы и экспедицию, и награду без ошибки и без возможности повторить. Пустая выдача при этом остаётся законной по контракту: слоты с шансом имеют право не сработать, и клейм в этом случае проходит без наград.
Готовый слот забирается условным переходом состояния, поэтому два одновременных клейма выдадут награду ровно один раз: проигравший получает отказ и до выдачи не доходит. Освобождение приёмов идёт в той же транзакции, что и сам переход.
Начисление наград выполняется после этого и не может быть откачено вместе со слотом: записи по валютам коммитятся сами по себе. Поэтому сбой на начислении теряет награду, а не выплачивает её дважды — это осознанный выбор. Гарантия «ровно один раз» требует идемпотентного начисления, а это общий наградный путь, не эта фича.
Клейм — единственное, что снимает блокировку с назначенных приёмов. Пока награда не забрана, приёмы остаются занятыми, даже если экспедиция уже завершилась по таймеру или была ускорена.
Дополнительные условия проверяются в момент клейма, по актуальному состоянию приёмов, а не фиксируются на старте: приём, прокачанный за время экспедиции, засчитывается. Отобрать награду это не может — звёздность приёмов только растёт, цвет и фракция не меняются.
Адрес метода
/expedition/claim
Требует сессию пользователя
Параметры
| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
| slot_index | НЕТ | int | Номер слота, 0-based. По умолчанию 0. |
Результат
Возвращает то же состояние, что и /expedition/list, уже с новым предложением в слоте.
Награды приходят одним событием в секции events: базовая и дополнительная слиты в один список, одинаковые ресурсы просуммированы. Отдельного события на бонус нет — различить их клиент может по bonus_qualified слота до клейма.
{
"response": {
"success": 1,
"unlocked": true,
"max_slots": 2,
"slots": [
{
"slot_index": 0,
"expedition_cid": "easy_cool_1star",
"status": 0,
"skill_cids": [],
"started_at": 0,
"ends_at": 0,
"bonus_qualified": false,
"skip_price": 0,
"base_rewards": [
{ "type": "soft", "amount": 400 }
],
"bonus_rewards": [
{ "type": "particleOfPower", "amount": 1 }
]
}
],
"rerolls_used": 0,
"rerolls_reset_at": 1788296400,
"paid_reroll_limit": 1,
"reroll_price": null
},
"update": {
"member": {
"wallet": []
}
},
"events": [
{
"type": "reward",
"payload": {
"reasonType": "expedition_claim",
"reasonId": "easy_any_1star",
"rewards": [
{ "type": "soft", "amount": 400 },
{ "type": "particleOfPower", "amount": 1 }
]
}
}
]
}
Кошелёк обновляется через update.member как обычно, поэтому награда доедет и до клиента, который событие проигнорирует.
Ошибки
| Код | Условие |
|---|---|
| 10001 | Слот не найден, экспедиция в нём не завершена, либо награду уже забрал параллельный запрос. |
| 10405 | Фича закрыта по уровню, шаблон экспедиции пропал из текущей версии конфига, либо награда в этой версии не выдаётся: не резолвится наградная таблица (в контексте reward) или названный в ней ресурс (в контексте resource). В обоих случаях слот остаётся забираемым. |