/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), но с появлением территорий проход обязан их уважать, иначе смешает игроков разных территорий.