/arena/rewards
Состояние наград арены: прогресс сундуков за победы, лестница наград за достижение и итог сезона.
Адрес метода
/arena/rewards
Требует сессию пользователя
Параметры
Нет.
Результат
{
"response": {
"success": 1,
"league_cid": "derevo",
"best_rank": 15,
"win_progress": 7,
"season_id": 27,
"rank_states": {"rank_d_15": 2, "rank_d_10": 0},
"win_states": {"win_10": 1, "win_50": 0},
"season_state": {"cid": "season_d_1_5", "place": 3, "league_cid": "derevo", "season_id": 27, "granted_at": 1788777763},
"daily_state": {"state": "claimable", "place": 3, "cid": "daily_d_1_10", "potential_cid": ""}
}
}
Состояния: 0 — недоступна, 1 — можно забрать, 2 — уже забрана.
season_state — справка о начисленном, а не состояние клейма: сезонная награда приходит сама.
null — начислений ещё не было.
daily_state — состояние ежедневной награды, и её как раз забирают кнопкой. Три состояния из
ТЗ:
state |
когда | что показывать |
|---|---|---|
pending |
сутки идут | place — текущее место, potential_cid — награда за него; кнопка не кликабельна |
claimable |
сутки кончились, не скликнуто | place — зафиксированное место, cid — награда; кнопка активна |
pending |
скликнуто | ТЗ требует показать первое состояние, поэтому после клейма снова pending |
potential_cid заполнен только в pending, cid — только в claimable. Разделение намеренное: в
pending место живое и ещё изменится, в claimable оно уже зафиксировано.
Что важно знать
До завершения онбординга ни одна награда не показывается доступной (rank_states без состояния 1), а клейм отказывает кодом 10061.
Ответ отдаёт только состояния по cid. Сами награды и их пороги клиент берёт из своей копии конфига — сервер не дублирует конфиг в ответе.
Сезонная награда не забирается кнопкой — она уже начислена. Сервер выдаёт её в момент смены
сезона, без участия игрока и без захода на арену: ТЗ требует «нельзя не получить», а заход на арену
не гарантирован. Попап приезжает через /event/list.
season_state читается из реестра выдач, а не из аренной строки. Место в аренной строке живёт
одним слотом, который перезаписывает следующий ролловер; в реестре оно заморожено на момент
начисления. Поэтому экран покажет то же, что показал попап, даже спустя сезоны.
Награда считается по лиге, в которой сезон отыгран, а не по текущей — продвинувшийся игрок уже в следующей.
Выдаётся начиная с того конца сезона, при котором строка конфига уже существует. Задним числом не начисляется: место известно только в момент ролловера.
Ежедневная награда не накапливается. Не забрал за сутки — она заменяется новой на следующей границе. «У вас 3 несобранных ежедневных награды» нарисовать нельзя: их всегда максимум одна.
Место для ежедневной фиксируется при первом обращении к арене после границы суток. Кто в этот день не заходил, награду за него не получает — решение заказчика; точная фиксация в секунду границы требовала бы суточного прохода по всем группам.
Пустой лист конфига означает, что награда не выдаётся никому — осознанный fail-closed, тот же, что у незаполненных порогов AP. Строка с нулевой нижней границей диапазона считается незаполненной. Пересечение диапазонов внутри лиги — ошибка конфига: сервер не выбирает одну из строк, а не выдаёт ничего и сообщает об этом в админку.
Награда за достижение считается по AP, а не по занятому месту. Право даёт максимум AP за сезон
(season_best_ap в объекте arena). По месту это было дырой: в начале сезона AP
у всех сброшены в стартовое значение, и первый выигравший бой поднимался на первое место и забирал
всю лестницу почти даром.
Клеймы сезонные: каждый сезон награды обновляются и берутся заново.
Пока пороги не заданы, награды за достижение недоступны
Порог живёт в колонке apThreshold листа arenaRankRewards. Незаданный порог означает
«недоступно», а не «доступно всем» — иначе смена ключа мгновенно раздала бы все награды. Ждёт
чисел от геймдизайна.