Files
mixmaker/memory_bank/domain_model.md
lemintare 1239fcee08
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / compose (push) Has been cancelled
Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
2026-07-19 00:17:31 +03:00

7.6 KiB
Raw Blame History

Предметная модель

Основные сущности

Player

Игрок связан с Discord-аккаунтом и имеет отображаемое имя и собственный Overwatch-ранг для каждой роли: Tank, Damage, Support. Лестница содержит 40 значений от Bronze 5 до Champion 1: Bronze, Silver, Gold, Platinum, Diamond, Master, Grandmaster, Champion, каждый с дивизионами 5 → 1. Для вычислений значения преобразуются в ordinal 140.

Игрок редактирует ранги самостоятельно; Admin может видеть время последнего изменения. Игрок выбирает любое число предпочитаемых ролей и до трёх желаемых союзников. Предпочтения являются мягкими пожеланиями, а не гарантией состава.

Account

Учётная запись Discord с глобальной ролью Player или Admin. Admin назначается только другим Admin либо через начальный список Discord ID в конфигурации развёртывания. Изменение роли записывается в аудит.

Event

Запланированный игровой вечер: название, дата и время, часовой пояс, описание, дедлайн регистрации, формат команд, регламент, турнир и текущее состояние.

EventRegistration

Отметка игрока в календаре со статусом Going, Maybe или NotGoing. Игрок меняет собственный статус, а Admin может изменить его за игрока. Регистрация хранит автора и время последнего изменения, чтобы интерфейс явно показывал административное действие. В момент закрытия регистрации Admin подтверждает список участников; только Going-игроки по умолчанию попадают в балансировку.

Team

Состав игроков, назначенный Admin капитан, цвет/название и рассчитанные показатели силы. Капитан должен входить в текущий состав команды; переназначение фиксируется в аудите.

  • общий средний рейтинг;
  • средний рейтинг по каждой роли;
  • распределение игроков по ролям;
  • оценка доверия к балансу.

Ruleset

Версионируемый набор правил серии:

  • формат Bo3;
  • последовательность режимов;
  • пулы карт по режимам;
  • порядок банов карт и героев;
  • лимиты банов по ролям;
  • ограничения повторных банов в серии.

Series

Матч двух команд в рамках события или турнирной сетки. Хранит жеребьёвку, порядок первого бана, карты, счёт, статус и итогового победителя.

MapResult

Исход отдельной карты: победившая команда либо ничья, счёт/заметка при необходимости и автор фиксации. Результат карты обновляет счёт серии; завершённый Bo3 определяет победителя автоматически. Организатор может исправить ошибочный результат, при этом изменение попадает в аудит.

MapDraft

Пошаговое исключение карт из пула выбранного режима до одной оставшейся карты. Для тайбрейкера ранее сыгранная Control-карта исключается.

HeroDraft

Четыре бана перед картой в порядке A → B → A → B. Каждая команда выбирает двух героев разных ролей. Героя, которого команда уже банила в этой серии, она не может забанить снова; героя, ранее забаненного соперником, банить можно.

Tournament

Формат и состояние турнирной сетки, участники, раунды, пары и продвижение победителей.

Правила текущего регламента

Карты

Базовая последовательность Bo3:

  1. Control;
  2. Hybrid или Escort;
  3. Control-тайбрейкер, если счёт 1:1.

Альтернативная последовательность: Control → Push → Escort.

Первый бан определяется жеребьёвкой. Затем команды по очереди исключают карты внутри пула режима, пока не останется одна.

Герои

  • перед каждой картой банятся четыре героя;
  • порядок: A → B → A → B;
  • каждая команда банит двух героев разных ролей;
  • один и тот же герой может быть забанен командой только один раз за серию;
  • бан героя соперником не расходует собственную возможность забанить этого героя позже.

Балансировка

Целевая функция должна учитывать не только близость общего среднего рейтинга команд, но и:

  • разницу средних рейтингов по ролям;
  • корректность состава 1 Tank / 2 Damage / 2 Support;
  • назначение игроков на предпочитаемые роли;
  • попадание выбранных игроком союзников в одну команду;
  • запрет повторения составов при регулярных играх;
  • заранее заданные пары или ограничения «вместе/раздельно».

Алгоритм должен возвращать не только составы, но и понятную оценку качества и причины оставшегося дисбаланса.

Жёсткие ограничения 1/2/2 и уникальности игроков всегда важнее предпочтений. Разница рейтингов имеет больший вес, чем пожелания. В MVP используется детерминированная эвристика: несколько начальных назначений, взвешенная целевая функция и локальные обмены игроков одной роли. Архитектура допускает замену на CP-SAT/MILP solver.

Доменные события

  • EventCreated;
  • PlayerJoinedEvent;
  • EventRegistrationChanged;
  • TeamsBalanced;
  • TeamCaptainAssigned;
  • CoinTossResolved;
  • MapBanned;
  • MapSelected;
  • HeroBanned;
  • MapResultRecorded;
  • MapResultCorrected;
  • SeriesCompleted;
  • BracketAdvanced.