/dev/arena/season-regroup

Запустить перекомплектацию групп — то же, что плановая задача.

Адрес метода

/dev/arena/season-regroup

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

Только не-прод или админ

Весь раздел /dev/arena доступен, если сервер не продовый либо у игрока стоит флаг админа.

Параметры

Параметр Обязательный Тип Описание
limit НЕТ int(0+) сколько лиг обработать за прогон; 0 — размер пачки по умолчанию

Результат

{
    "response": { "success": 1, "leagues": 4, "groups": 11, "members": 1001, "remaining": 0 }
}

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

За методом тот же код, что за плановой задачей cli://arena/season-regroup.

Что делает. По каждой лиге с ограничением размера берёт всех участников текущего сезона, считает раскладку (ceil(n / size) групп, недобор в хвост) и рассаживает случайно — ТЗ требует «группы формируются из диапазона случайным образом, не учитываются соседи игрока по группе из прошлого сезона».

Зачем отдельным проходом, а не при рассадке. Правило ТЗ коллективное, а рассадка ленивая: игроки приходят по одному, и n в момент посадки первого никому не известно. Рассадка гарантирует только «лимит не превышен», ровную раскладку делает этот проход.

Порядок важен: запускать ПОСЛЕ season-catch-up. Иначе проход разложит только тех, кто переехал сам, а остальные приедут позже и сядут страховкой — раскладка снова окажется неровной.

Идемпотентен. Лигу, уже разложенную ровно, проход не трогает: иначе недельный крон дёргал бы игроков между группами каждую неделю, а состав группы — это то, по чему игрок считает своё место.

Лиги без ограничения размера не трогаются вовсе — там одна группа на всех по ТЗ.

Раскладка идёт в пределах мира и сервера, а не всей лиги: они входят в ключ группы. Сейчас значения вырожденны (всегда 0), но с появлением территорий проход обязан их уважать, иначе смешает игроков разных территорий.