/v2/gacha/chest/claim
Метод забирает награду за один сундук прогресс-бара ивентовой гачи.
Адрес метода
/v2/gacha/chest/claim
Требует сессию пользователя
Параметры
| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
| gacha_id | ДА | string | Идентификатор гачи из gachaAutomat.id. У гачи должен быть настроен chestProgress. |
| event_id | ДА | string | Идентификатор текущего запуска из gacha.items.{gacha_id}.event_id профиля. |
| chest_id | ДА | string | Идентификатор сундука из gacha.items.{gacha_id}.progress.chests[].id. |
Правила
- Забрать можно сундук в состоянии
available: прогресс игрока в этом запуске не меньше порога сундука, награда ещё не выдана. - Награда берётся из таблицы
rewardsпоchestProgress.chests[].reward. Случайные слоты (variable,oneOfGroup,bonus) разыгрываются в момент выдачи. - Заявка на сундук записывается в журнал
member_gacha_chestдо начисления, ключ уникален по(игрок, гача, запуск, сундук), поэтому второй запрос на тот же сундук получает10084. Состояниеclaimedв профиле означает, что заявка принята. - Выдача возобновляемая: выпавший набор сохраняется в журнале до первой выплаты, каждый выплаченный элемент отмечается. Если процесс оборвался, невыданное доводится при следующем обращении игрока к гаче (профиль, крутка, claim), а игрок получает награду событием
reward. Параллельный запрос не вмешивается, пока выдачу ведёт другой (аренда на 30 секунд). Выплата элемента и его отметка в журнале проходят в одной транзакции БД: если процесс оборвался, откатывается и то, и другое, а если зафиксировалось, то оба, поэтому элемент не начисляется дважды и не теряется. Фрагменты приёма сверх лимита, которые превращаются в синтез-сферы, раскладываются на два шага до выплаты (фрагменты и сферы), и каждый шаг оплачивается и отмечается отдельно. - Если набор наград сундука не найден в конфиге, claim отбивается ошибкой до записи заявки, а заявка автовыдачи остаётся в журнале и выдаётся, когда конфиг восстановлен.
- Награда сундука не влияет на гаранты гачи и на прогресс.
- Метод проверяет активность гачи и совпадение
event_idс текущим запуском с учётомtime_shiftигрока.
Результат
{
"response": {
"gacha_id": "event_gacha",
"event_id": "event_gacha_october",
"chest_id": "step_10",
"progress": {
"current": 55,
"max": 170,
"chests": [
{ "id": "step_10", "required_points": 10, "state": "claimed", "reward": "event_gacha_step_10" },
{ "id": "step_30", "required_points": 30, "state": "available", "reward": "event_gacha_step_30" }
]
},
"rewards": [
{ "type": "skill_virabhadrasana", "amount": 2 }
]
},
"update": {
"member": {
"gacha": {...gacha},
"wallet": [{...currency}],
"skills": [{...skill}]
}
},
"events": [
{
"type": "reward",
"payload": {
"reasonType": "gacha_chest_claim",
"reasonId": "step_10",
"gachaId": "event_gacha",
"rewards": [{ "type": "skill_virabhadrasana", "amount": 2 }]
}
}
]
}
rewards содержит награды, которые были выданы. Клиент показывает их общим попапом награды по событию reward с reasonType = gacha_chest_claim.
Автовыдача
Если запуск закончился, а игрок не забрал заработанные сундуки, сервер выдаёт их сам при первом обращении игрока к гаче: запросе профиля, крутке или claim. Выдаются все сундуки, порог которых достигнут и которые не были забраны; незаработанные не выдаются. Награда берётся из текущего конфига и разыгрывается в момент выдачи, поэтому конфиг chestProgress и rewards живого события менять нельзя.
Для каждого заработанного и не забранного сундука сначала записываются заявки в member_gacha_chest, и только когда все они записаны, прогресс закончившегося запуска закрывается. Ошибка хранилища на этом шаге прерывает обращение и ничего не стирает. Сами выдачи ведутся как у ручного claim, возобновляемо, поэтому повторное обращение не начисляет дважды, а невыданное доводится позже. Игроку награда приходит событием reward в /event/list: reasonType = gacha_progress_auto_claim, reasonId - event_id закончившегося запуска, chestId - сундук, rewards - выданное. Событие подтверждается через /event/ack. Прогресс хранится только по последнему запуску, в котором игрок играл, и закрывается при первом обращении в новом, поэтому пропущенные запуски без круток ничего не теряют.
Ошибки
| Код | Когда |
|---|---|
| 10080 | Гача ещё не началась или уже закончилась |
| 10081 | event_id не совпадает с текущим запуском |
| 10082 | Сундука с таким chest_id нет в гаче |
| 10083 | Порог сундука ещё не достигнут |
| 10084 | Награда сундука уже выдана |
Неизвестная гача или гача без chestProgress отбивается стандартной ошибкой Invalid parameter gacha_id.