/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.