/arena/targets

Список целей для атаки — набор соперников, который держится до собственного боя игрока или до суточной границы.

Адрес метода

/arena/targets

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

Параметры

Нет.

Результат

{
    "response": {
        "success": 1,
        "count": 5,
        "items": [
            {
                "member_id": 4136, "name": "Player 4136", "rank": 12, "prev_rank": 14,
                "ap": 1080, "skin_id": "skin_cardboardknight", "avatar_id": "avatar_cardboardknight",
                "avatar_frame_id": "frame_none", "defense_strength": 3450,
                "defense": [{"skill_id": 11, "skill_cid": "overload", "stars": 3, "level": 7}],
                "attackable": true
            }
        ],
        "self": {"...ranking entry"},
        "valid_until": 1788527400,
        "refreshes_used": 0
    }
}

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

До завершения онбординга список пуст: items = [], next_refresh.allowed = false, self = null: игрока нет в группе. Отказа нет — это чтение. Ростер при этом не заводится.

Игроков без онбординга в списке не бывает: у них нет места в группе, а цели берутся из группы.

Состав списка заморожен, а данные в нём живые. Кого выдал матчмейкер — фиксируется, но AP, место и сила защиты в ответе всегда текущие: они меняются от боёв самих соперников.

Состав собирается заново на суточной границе, по платному /arena/targets/refresh и после каждой собственной атаки игрока — победы, поражения, выхода, тайм-аута, брошенного боя, ответного боя. Новый набор строится от места игрока после боя: до этого после пары побед над ним оставались одни топы. Когда на игрока напали, его список не меняется. Пересборка после боя не сбрасывает счётчик обновлений (next_refresh). Список, полученный до боя, держать у себя нельзя: противника, которого нет в новом списке, /arena/fight/start отобьёт.

valid_until — ближайшее из истечения TTL списка и суточной границы, а не сама граница. Клиент кэширует список ровно до этого момента, поэтому суточная граница здесь заставила бы его сутки показывать устаревшие числа.

Атаковать можно только того, кто есть в этом списке и помечен attackable. Проверки на принадлежность группе недостаточно: группа низшей лиги по ТЗ не ограничена по размеру, и без проверки ростера игрок мог бы атаковать любого в лиге, минуя матчмейкинг и платные обновления.

В список входят фиксированный топ лиги, несколько соперников выше и несколько ниже. При нехватке с одной стороны недобор компенсируется с другой.

next_refresh — цена следующего обновления списка, считает сервер:

"next_refresh": {
    "free": false, "currency": "soft", "cost": 300,
    "used": 3, "limit": 10, "left": 7, "allowed": true
}

ТЗ требует от кнопки «при бесплатных обновлениях иконку рефреша, при платных иконку валюты и количество» — для этого и нужны free, currency, cost. Выводить их самому нельзя: цена задана листом по номеру платного обновления.

left приходит null, если лимит не задан. Ноль означает «больше нельзя» — путать эти два смысла нельзя.