first commit

This commit is contained in:
2026-07-18 23:32:11 +03:00
commit d401e9009c
9 changed files with 496 additions and 0 deletions

109
memory_bank/domain_model.md Normal file
View File

@@ -0,0 +1,109 @@
# Предметная модель
## Основные сущности
### Player
Игрок связан с Discord-аккаунтом и имеет отображаемое имя и собственный рейтинг для каждой роли: Tank, Damage, Support. Игрок редактирует свои рейтинги самостоятельно; организатор может видеть время последнего изменения. Дополнительно можно хранить предпочитаемые роли, BattleTag и историю участия.
### 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;
- предпочтения игроков;
- запрет повторения составов при регулярных играх;
- заранее заданные пары или ограничения «вместе/раздельно».
Алгоритм должен возвращать не только составы, но и понятную оценку качества и причины оставшегося дисбаланса.
## Доменные события
- EventCreated;
- PlayerJoinedEvent;
- EventRegistrationChanged;
- TeamsBalanced;
- TeamCaptainAssigned;
- CoinTossResolved;
- MapBanned;
- MapSelected;
- HeroBanned;
- MapResultRecorded;
- MapResultCorrected;
- SeriesCompleted;
- BracketAdvanced.