/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, если лимит не задан. Ноль означает «больше нельзя» — путать эти два
смысла нельзя.