/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. Незаданный порог означает «недоступно», а не «доступно всем» — иначе смена ключа мгновенно раздала бы все награды. Ждёт чисел от геймдизайна.