/arena/info

Полное состояние арены игрока: рейтинг, лига, наборы приёмов, косметика, сезон и часть конфига.

Адрес метода

/arena/info

Требует сессию пользователя

Параметры

Нет.

Результат

{
    "response": {
        "success": 1,
        "arena": {"...arena"},
        "attack_set":  {"type": 1, "available": 5, "slot_1": 11, "slot_1_cid": "overload", "...": "..."},
        "defense_set": {"type": 2, "available": 5, "slot_1": 11, "slot_1_cid": "overload", "...": "..."},
        "cosmetics": {"skin": {"...cosmetic"}, "avatar": {"...cosmetic"}, "frame": {"...cosmetic"}},
        "league": {"...league"},
        "onboarding": {"onboarded": 0, "level_cid": "c000l001_arena", "zucker_beaten": 0},
        "name": {"min_length": 3, "max_length": 16, "one_alphabet_per_word": 0, "change_available_at": 0, "forced": 0},
        "season_result": null,
        "season": {
            "season_id": 27, "started": true,
            "start_at": 1788480000, "end_at": 1789084800,
            "freeze_at": 1789084800, "unfreeze_at": 1789086600
        },
        "config": {
            "free_attempts_max": 5, "battle_time_limit_sec": 600,
            "target_free_refresh": 2, "refresh_soft_cost": 100,
            "ap_min": 0, "ap_max": 9999
        }
    }
}

Описание полей arena — объект arena.

Что важно знать

onboarding — состояние онбординга. onboarded = 0 — игрок не победил Цукера и в боях не участвует; level_cid — уровень, который запускать для боя с Цукером; zucker_beaten = 1 — победа уже засчитана (игрок мог победить и закрыть игру до выбора облика и имени), осталось /arena/onboarding/complete. Сервер старше этого блока его не присылает — отсутствие означает «онбординга нет, игрок участник».

name — настраиваемые правила имени, которые клиент проверяет сам (длина в символах; one_alphabet_per_word = 1 — включено правило «один алфавит на слово», выключатель в админке, по умолчанию 0), момент, когда смена имени снова доступна (0 — сейчас), и forced = 1, если имя заменила поддержка.

Метод не только читает. Любое обращение к арене прогоняет отложенную работу: перенос в текущий сезон, если игрок не заходил с прошлой недели, долив попыток на суточной границе и пересадку в группу. Поэтому «прочитать состояние, ничего не меняя» этим методом нельзя.

Наборы приёмов отдаются в двух представлениях. slot_N — числовой identity приёма, slot_N_cid — его cid. Хранится только cid; число выводится из него для клиента, который пока читает числа.

season_result не пусто только один раз — при первом заходе после границы сезона, для попапа продвижения. Подтверждается через /arena/season/ack.

prev_rank и status в нём — итог на КОНЕЦ сезона, а не на момент запроса. Расстановка группы фиксируется один раз, целиком, когда кончается окно заморозки; поэтому значения не зависят ни от того, когда игрок зашёл, ни от того, сколько участников уже переехало в новый сезон. Клиенту ничего пересчитывать не нужно и нельзя: место в закончившейся группе после переезда уже не воспроизводится.

config.replay_upload — рубильник сбора реплеев, 1 записывать бой и грузить запись, 0 не делать ни того, ни другого. Не игровой баланс, а эксплуатационная настройка (grape.settings, галочка на странице реплеев в админке), поэтому её нет в листах конфига и она меняется без импорта. Поля может не быть вовсе — сервер старше рубильника; отсутствие означает «записывать», то есть прежнее поведение. Решение обязано приниматься клиентом: к моменту, когда отказал бы сервер, payload уже ушёл с устройства и трафик игрока потрачен.

freeze_at равен end_at при нулевом freeze_before_sec — заморозка начинается ровно на границе сезона.