Initial project setup: Paper plugin scaffold
This commit is contained in:
commit
32da611c63
15 changed files with 1325 additions and 0 deletions
523
DBD_Plugin_TZ.md
Normal file
523
DBD_Plugin_TZ.md
Normal file
|
|
@ -0,0 +1,523 @@
|
|||
# DEAD BY DAYLIGHT — Minecraft Plugin
|
||||
## Техническое Задание (ТЗ)
|
||||
> Полная реализация механик оригинальной игры 4v1
|
||||
|
||||
---
|
||||
|
||||
## Содержание
|
||||
|
||||
1. [Общее описание проекта](#1-общее-описание-проекта)
|
||||
2. [Распределение ролей и старт игры](#2-распределение-ролей-и-старт-игры)
|
||||
3. [Механики выжившего](#3-механики-выжившего-survivor)
|
||||
4. [Генераторы](#4-генераторы-generators)
|
||||
5. [Механики киллера](#5-механики-киллера-killer)
|
||||
6. [Паллеты и окна](#6-паллеты-pallets-и-окна-windows)
|
||||
7. [Выходные ворота и люк](#7-выходные-ворота-exit-gates-и-люк-hatch)
|
||||
8. [Предметы для выживших](#8-предметы-items-для-выживших)
|
||||
9. [Bloodpoints и прогрессия](#9-bloodpoints-и-прогрессия)
|
||||
10. [Система перков](#10-система-перков-perks)
|
||||
11. [Эндгейм и итоги матча](#11-эндгейм-и-итоги-матча)
|
||||
12. [Пользовательский интерфейс](#12-пользовательский-интерфейс-hud)
|
||||
13. [Конфигурация](#13-конфигурация-configyml)
|
||||
14. [Команды и права](#14-команды-и-права)
|
||||
15. [Архитектура плагина](#15-архитектура-плагина)
|
||||
16. [Приоритет разработки](#16-приоритет-разработки)
|
||||
|
||||
---
|
||||
|
||||
## 1. Общее описание проекта
|
||||
|
||||
### 1.1 Цель плагина
|
||||
|
||||
Плагин реализует полноценную мини-игру Dead by Daylight (4v1) на Minecraft-сервере. Используется готовая карта, предоставленная заказчиком. Плагин управляет всем игровым процессом: распределением ролей, механиками выживших и киллера, победными условиями, интерфейсом и звуками.
|
||||
|
||||
### 1.2 Технические требования
|
||||
|
||||
| Параметр | Значение |
|
||||
|---|---|
|
||||
| Платформа | Paper / Spigot 1.20.x+ |
|
||||
| Язык | Java 17+ |
|
||||
| Зависимости | ProtocolLib, Citizens2 (опционально), PacketEvents |
|
||||
| Кол-во игроков | 5 (1 киллер + 4 выживших) |
|
||||
| Карта | Предоставляется отдельно (worldname задаётся в `config.yml`) |
|
||||
| Gamemode | Adventure mode на протяжении всей игры |
|
||||
|
||||
---
|
||||
|
||||
## 2. Распределение ролей и старт игры
|
||||
|
||||
### 2.1 Лобби и ожидание
|
||||
|
||||
- Лобби-мир отдельный от игровой карты.
|
||||
- Минимум для старта: 5 игроков (настраивается: `min_players`, `max_players`).
|
||||
- Таймер ожидания: 60 секунд после набора минимума (`countdown_seconds`).
|
||||
- Если игроков < минимума — таймер сбрасывается.
|
||||
- В лобби показывается статус: сколько игроков зашло / нужно.
|
||||
|
||||
### 2.2 Назначение ролей
|
||||
|
||||
- Один игрок случайно становится **Киллером (Killer)**.
|
||||
- Остальные 4 становятся **Выжившими (Survivors)**.
|
||||
- Реализовать систему очереди: если игрок давно не был киллером — шанс повышается.
|
||||
- Роли объявляются через Title + Subtitle (красный текст для киллера, белый для выжившего).
|
||||
- Роль киллера не раскрывается другим выжившим до спавна (5-секундная задержка перед телепортом киллера).
|
||||
|
||||
### 2.3 Спавн
|
||||
|
||||
- Спавн-точки прописаны в `config.yml` (4 точки для выживших + 1 для киллера).
|
||||
- Выжившие телепортируются одновременно.
|
||||
- Киллер телепортируется через **5 секунд** после выживших (grace period).
|
||||
- Во время grace period киллер видит таймер в ActionBar.
|
||||
- Генераторы, хуки, выходы и другие объекты расставляются при старте игры по координатам из `config.yml`.
|
||||
|
||||
> ⚠ Все координаты (спавны, хуки, генераторы, выходы, подвал) задаются в `config.yml` — не хардкодятся в коде.
|
||||
|
||||
---
|
||||
|
||||
## 3. Механики выжившего (Survivor)
|
||||
|
||||
### 3.1 Состояния здоровья
|
||||
|
||||
Выживший имеет три состояния — переходы строго последовательные:
|
||||
|
||||
| Состояние | Описание | Визуал в Minecraft |
|
||||
|---|---|---|
|
||||
| **Healthy** (здоров) | Может бежать, прыгать, взаимодействовать | Полное здоровье, без эффектов |
|
||||
| **Injured** (ранен) | Оставляет следы крови, издаёт стоны, скорость чуть снижена | Частицы крови, звук боли каждые 3 сек |
|
||||
| **Downed** (повален) | Ползёт по полу, не может бежать или взаимодействовать | Crawl-анимация (Sneak + замедление), скорость 30% |
|
||||
| **Hooked** (на крюке) | Привязан к крюку, ждёт спасения | Заморожен, анимация качания на крюке |
|
||||
| **Dead** (мёртв) | Выбывает из игры | Spectator mode |
|
||||
|
||||
### 3.2 Переходы состояний
|
||||
|
||||
- **Healthy → Injured:** одно попадание от киллера.
|
||||
- **Injured → Downed:** второе попадание от киллера.
|
||||
- **Downed → Hooked:** киллер подбирает (ПКМ) и несёт к крюку.
|
||||
- **Hooked → Dead:** истекло 2 стадии крюка, никто не спас.
|
||||
- **Injured → Healthy:** использование аптечки или спасение с крюка.
|
||||
|
||||
### 3.3 Передвижение
|
||||
|
||||
- **Healthy:** обычная скорость + возможность спринта.
|
||||
- **Injured:** скорость снижена на 5% (speed effect).
|
||||
- **Downed:** только ползти — отрицательный Speed, принудительный Sneak, без прыжков.
|
||||
- **Спринт (Exhaustion):** можно спринтовать конечное время (`exhaustion_seconds`, по умолчанию 3 сек спринта, затем 5 сек кулдауна).
|
||||
|
||||
> ⚠ Спринт — ключевая механика для чейса. Реализовать через `isSprinting()` + кастомный кулдаун.
|
||||
|
||||
### 3.4 Исцеление (Healing)
|
||||
|
||||
- **Аптечка (Med-Kit):** зажать ПКМ 10 секунд, прогресс-бар в ActionBar.
|
||||
- **Исцеление другим выжившим:** подойти вплотную, зажать ПКМ 16 секунд (медленнее, чем аптечкой).
|
||||
- Если движение прервалось (игрок отошёл, получил удар) — прогресс сбрасывается.
|
||||
- Иконка прогресса в ActionBar: `[████░░░░░░] Исцеление 40%`
|
||||
|
||||
### 3.5 Механика крюка (Hook)
|
||||
|
||||
После того как киллер повесил выжившего на крюк:
|
||||
|
||||
| Стадия | Длительность | Событие |
|
||||
|---|---|---|
|
||||
| Stage 1 | 60 секунд | Выживший висит. Можно спасти. В ActionBar — таймер. |
|
||||
| Stage 1 → 2 | Автоматически | Если не спасли за 60 сек — переход на Stage 2. |
|
||||
| Stage 2 | 60 секунд | Выживший борется с Сущностью. Каждые 2 сек — Skill Check (QTE). |
|
||||
| Stage 2 провален | Мгновенно | Выживший умирает — переход в Spectator. |
|
||||
| Спасение с крюка | 2 секунды | Другой выживший снимает с крюка (прогресс-бар). Стадия запоминается. |
|
||||
|
||||
- Один и тот же выживший может быть повешен максимум **3 раза** (`hook_count`). На 3-й раз — мгновенная смерть.
|
||||
- Крюки в подвале (Basement) не уничтожаются и дают бонусные Bloodpoints.
|
||||
|
||||
> ⚠ Skill Check на Stage 2 — случайное появление индикатора в Title. Игрок должен нажать Shift или Drop в нужный момент. Промах — мгновенная смерть.
|
||||
|
||||
### 3.6 Спасение с крюка
|
||||
|
||||
- Выживший подходит к крюку с союзником на расстояние 2 блока.
|
||||
- Зажимает ПКМ (или Sneak) в течение 2 секунд — прогресс в ActionBar.
|
||||
- Спасённый получает статус Injured (или остаётся Injured).
|
||||
- Спасатель не получает защиты — может быть немедленно атакован.
|
||||
- **Borrowed Time:** если киллер стоит рядом с крюком в момент спасения — спасённый получает 10 сек защиты Endurance (не переходит в Downed с первого удара).
|
||||
|
||||
### 3.7 Ползание (Dying State)
|
||||
|
||||
- Повалённый выживший ползёт со скоростью 30% от нормальной.
|
||||
- Может ползти к другому выжившему — тот может его поднять (Recovery, 4 секунды).
|
||||
- После Recovery выживший встаёт в статусе Injured.
|
||||
- Самовосстановление невозможно без специального перка.
|
||||
- Повалённый выживший издаёт стоны (слышимые киллеру).
|
||||
|
||||
---
|
||||
|
||||
## 4. Генераторы (Generators)
|
||||
|
||||
### 4.1 Общие правила
|
||||
|
||||
- На карте спавнится **7 генераторов**, нужно починить **5**.
|
||||
- Количество настраивается: `total_generators`, `required_generators` в `config.yml`.
|
||||
- Починённые генераторы светятся (частицы + звук).
|
||||
- Киллер видит ауру всех непочиненных генераторов (через частицы или Sidebar).
|
||||
|
||||
### 4.2 Процесс починки
|
||||
|
||||
- Выживший подходит к генератору и зажимает ПКМ — начинается починка.
|
||||
- Прогресс отображается в ActionBar.
|
||||
- Базовое время починки: **80 секунд** (один выживший).
|
||||
- Два выжившего на генераторе: скорость ×1.5 (`gen_coop_multiplier`).
|
||||
- Три и более: скорость ×2.0 (ограничено).
|
||||
- Если выживший отошёл или получил удар — прогресс частично откатывается (regression).
|
||||
|
||||
### 4.3 Skill Checks (Проверки навыка)
|
||||
|
||||
- В Title показывается круговой индикатор (симулируется через Title-анимации).
|
||||
- Игрок должен нажать **Drop (Q)** в нужный момент (попасть в зелёную зону).
|
||||
- **Успешный Skill Check:** +5% к прогрессу генератора + бонусные Bloodpoints.
|
||||
- **Провальный Skill Check:** взрыв — генератор теряет 10% прогресса, громкий звук (слышен киллеру в радиусе 40 блоков).
|
||||
- Частота skill check: раз в 20–40 секунд (рандомно).
|
||||
|
||||
> ⚠ Звук провального skill check — важнейший инструмент для киллера. Реализовать через `playSound()` с большим радиусом.
|
||||
|
||||
### 4.4 Регрессия генератора
|
||||
|
||||
- Если все выжившие отошли от работающего генератора — он начинает откатываться (0.25% в секунду).
|
||||
- Киллер может ударить по генератору (ПКМ) — **Kick:** мощная регрессия 2.5% в секунду на 30 секунд.
|
||||
- Регрессию можно остановить — выживший подходит и нажимает ПКМ.
|
||||
- Взорванный генератор издаёт звук и выбрасывает частицы взрыва.
|
||||
|
||||
---
|
||||
|
||||
## 5. Механики киллера (Killer)
|
||||
|
||||
### 5.1 Базовые характеристики
|
||||
|
||||
| Параметр | Значение | Настройка |
|
||||
|---|---|---|
|
||||
| Скорость | 115% от скорости выжившего | `killer_speed` |
|
||||
| Terror Radius | 32 блока | `terror_radius` |
|
||||
| Урон атаки | Переводит в Injured / Downed | Не числовой — по состоянию |
|
||||
| Кулдаун атаки | 2.5 секунды | `attack_cooldown` |
|
||||
| Перенос выжившего | 92% скорости | `carry_speed` |
|
||||
|
||||
### 5.2 Terror Radius и Red Stain
|
||||
|
||||
- **Terror Radius** — зона 32 блока вокруг киллера. Выжившие в этой зоне слышат сердцебиение.
|
||||
- Интенсивность звука увеличивается при сближении (3 уровня: далеко / близко / рядом).
|
||||
- **Red Stain** — красное свечение на земле за киллером (частицы). Показывает направление взгляда.
|
||||
- Реализация Red Stain: каждые 0.5 сек спавнить Dust-частицы красного цвета позади головы киллера.
|
||||
|
||||
### 5.3 Атака и удар
|
||||
|
||||
- **Базовая атака:** ЛКМ по выжившему. Урон по состояниям (Healthy→Injured или Injured→Downed).
|
||||
- После удара — кулдаун 2.5 сек (замедление на 0.5 сек).
|
||||
- Нельзя атаковать сквозь окна / паллеты (проверка LineOfSight).
|
||||
- **Bloodlust:** если киллер преследует выжившего >15 секунд без попадания — бонус скорости:
|
||||
- Тир 1: +3%
|
||||
- Тир 2: +5%
|
||||
- Тир 3: +8%
|
||||
- Тиры сбрасываются при ударе или смене цели.
|
||||
|
||||
### 5.4 Подъём и перенос выжившего
|
||||
|
||||
- Когда выживший Downed — киллер нажимает ПКМ для подъёма (2.5 сек анимации).
|
||||
- Во время переноса: киллер замедлен до 92% скорости, не может атаковать.
|
||||
- Выживший сидит на киллере (через ArmorStand или Mount).
|
||||
- Чтобы повесить: киллер подходит к хуку и нажимает ПКМ.
|
||||
- **Wiggle (вырывание):** выживший нажимает Sneak/Jump быстро — прогресс побега в ActionBar. При 100% — выживший падает рядом в Downed статусе.
|
||||
- Время вырывания: **16 секунд** (`wiggle_duration`).
|
||||
|
||||
### 5.5 Взаимодействие с генераторами
|
||||
|
||||
- Киллер нажимает ПКМ на генератор — **Kick** (регрессия, см. раздел 4.4).
|
||||
- Киллер видит ауру всех незаконченных генераторов в Sidebar (иконки + расстояние).
|
||||
|
||||
### 5.6 Подвал (Basement)
|
||||
|
||||
- Специальная зона на карте с 4 крюками.
|
||||
- Крюки в подвале **нельзя саботировать**.
|
||||
- Перевод выжившего в подвал засчитывается быстрее + бонус Bloodpoints.
|
||||
|
||||
---
|
||||
|
||||
## 6. Паллеты (Pallets) и Окна (Windows)
|
||||
|
||||
### 6.1 Паллеты
|
||||
|
||||
- Паллеты — деревянные барьеры на карте (блоки, отмеченные в конфиге).
|
||||
- Выживший подходит к паллете и нажимает ПКМ — паллета падает (standing → dropped).
|
||||
- Если киллер коснулся упавшей паллеты — **Stun 2.5 сек** (звук, частицы).
|
||||
- Киллер может **сломать паллету**: зажать ПКМ на 3 секунды. Паллета исчезает навсегда.
|
||||
- Количество паллет на карте конечно. Статус каждой хранится в памяти.
|
||||
- Выживший может пробежать через упавшую паллету (Vault, 0.6 сек).
|
||||
|
||||
### 6.2 Окна (Windows)
|
||||
|
||||
- Окна — прыжковые зоны в стенах карты (координаты в конфиге).
|
||||
- Выживший запрыгивает в окно: **1 секунда** анимации Vault (замедление → ускорение).
|
||||
- Киллер тоже может прыгнуть в окно, но медленнее (1.5 сек).
|
||||
- **Fake Vault (Mindgame):** игрок может зайти в начало вота и выйти обратно.
|
||||
|
||||
> ⚠ Паллеты и окна — основа loop-механики чейса. Без правильного расположения на карте игра будет несбалансированной.
|
||||
|
||||
---
|
||||
|
||||
## 7. Выходные ворота (Exit Gates) и Люк (Hatch)
|
||||
|
||||
### 7.1 Выходные ворота
|
||||
|
||||
- После починки 5 генераторов активируются **2 выходных ворот** (`gate_locations`).
|
||||
- Рубильник ворот загорается (смена блока, звук).
|
||||
- Выживший взаимодействует с рубильником **20 секунд** (прогресс в ActionBar).
|
||||
- Если прервать — прогресс **не откатывается** (в отличие от генераторов).
|
||||
- Открытые ворота остаются открытыми навсегда.
|
||||
- Выживший пересекает границу выхода → **ESCAPED!** (Title).
|
||||
- **Эндгейм-коллапс:** через 2 минуты после открытия первых ворот — все оставшиеся выжившие умирают.
|
||||
|
||||
### 7.2 Люк (Hatch)
|
||||
|
||||
- Люк появляется, когда выживших меньше, чем непочиненных генераторов.
|
||||
- Правило: если X выживших живы и < X генераторов починено — люк открыт.
|
||||
- Последний выживший **всегда** видит открытый люк.
|
||||
- Координата люка — `hatch_location` в конфиге.
|
||||
- Прыжок в люк = Escape (побег через люк).
|
||||
- Киллер может **закрыть люк** (ПКМ). После этого активируется End Game Collapse.
|
||||
- Закрытый люк можно открыть выжившим с **Ключом (Key)** за 2.5 секунды.
|
||||
|
||||
---
|
||||
|
||||
## 8. Предметы (Items) для выживших
|
||||
|
||||
Предметы выдаются игрокам перед игрой или находятся в Сундуках (Chests) на карте. Максимум **1 предмет** в руках.
|
||||
|
||||
| Предмет | Действие | MC-предмет | Ограничение |
|
||||
|---|---|---|---|
|
||||
| **Med-Kit** | Лечит Injured → Healthy за 10 сек | Red Dye / Custom | 1 заряд |
|
||||
| **Flashlight** | Слепит киллера (Blindness 2 сек) | Glowstone Dust / Custom | 8 использований |
|
||||
| **Toolbox** | Ускоряет починку гена на 30% | Iron Pickaxe / Custom | 1 генератор |
|
||||
| **Key** | Открывает закрытый люк | Gold Nugget / Custom | 1 использование |
|
||||
| **Map** | Показывает ауру генераторов выжившим | Paper / Custom | Пассивно |
|
||||
|
||||
### 8.1 Сундуки
|
||||
|
||||
- На карте расставлено N сундуков (`chest_locations` в конфиге).
|
||||
- Каждый сундук при открытии выдаёт случайный предмет (весовая таблица в `loot_table.yml`).
|
||||
- Открытие: **3 секунды** (прогресс-бар). Один сундук — один предмет навсегда.
|
||||
- Киллер может видеть ауры сундуков (опционально, через перк).
|
||||
|
||||
---
|
||||
|
||||
## 9. Bloodpoints и прогрессия
|
||||
|
||||
Bloodpoints — внутриигровая валюта, начисляется за действия в раунде. Хранятся в базе данных (SQLite или YAML).
|
||||
|
||||
| Действие | Выживший (BP) | Киллер (BP) |
|
||||
|---|---|---|
|
||||
| Починить генератор (полностью) | +1000 | — |
|
||||
| Успешный Skill Check | +150 | — |
|
||||
| Спасти с крюка | +800 | — |
|
||||
| Исцелить союзника | +600 | — |
|
||||
| Сбежать | +5000 | — |
|
||||
| Повесить выжившего на крюк | — | +800 |
|
||||
| Повалить выжившего | — | +500 |
|
||||
| Пожертвовать выжившего (3 стадии) | — | +2000 |
|
||||
| Сломать паллету | — | +200 |
|
||||
| Ударить по генератору (Kick) | — | +100 |
|
||||
|
||||
- Bloodpoints отображаются в Title после окончания матча.
|
||||
- Статистика сохраняется в базе данных.
|
||||
|
||||
---
|
||||
|
||||
## 10. Система перков (Perks)
|
||||
|
||||
Перки — пассивные и активные способности. Каждый игрок берёт **4 перка** перед матчем (в GUI-меню выбора).
|
||||
|
||||
### 10.1 Перки Выживших (минимум 10)
|
||||
|
||||
| Перк | Эффект |
|
||||
|---|---|
|
||||
| **Self-Care** | Позволяет лечить себя без аптечки (вдвое медленнее) |
|
||||
| **Dead Hard** | При нажатии Sneak во время спринта — кратковременный рывок (0.5 сек неуязвимости) |
|
||||
| **Borrowed Time** | После спасения с крюка — 10 сек защита Endurance |
|
||||
| **Sprint Burst** | При начале спринта — ускорение ×1.5 на 3 сек (кулдаун 40 сек) |
|
||||
| **Iron Will** | Убирает звуки стонов в Injured состоянии |
|
||||
| **Spine Chill** | Предупреждение (иконка + звук), если киллер смотрит на выжившего с 36 блоков |
|
||||
| **Resilience** | В Injured/Downed — скорость починки +9%, скорость вота +9% |
|
||||
| **Kindred** | После повешения на крюк — все союзники видят ауру киллера |
|
||||
| **Prove Thyself** | За каждого выжившего на генераторе — скорость +15% (стакается) |
|
||||
| **Adrenaline** | При открытии 5-го генератора — мгновенно Healthy + Sprint Burst 5 сек |
|
||||
|
||||
### 10.2 Перки Киллера (минимум 10)
|
||||
|
||||
| Перк | Эффект |
|
||||
|---|---|
|
||||
| **Hex: Ruin** | Все генераторы регрессируют вдвое быстрее (пока горит тотем) |
|
||||
| **Corrupt Intervention** | 3 самых дальних генератора заблокированы 2 минуты в начале игры |
|
||||
| **Pop Goes the Weasel** | После повешения — следующий Kick откатывает 25% прогресса гена |
|
||||
| **Deadlock** | После починки любого гена — самый прогрессивный ген блокируется на 30 сек |
|
||||
| **No Way Out** | После повешения — добавляется задержка при открытии ворот (+12/24/36 сек) |
|
||||
| **Scourge Hook: Pain Resonance** | Повешение на Scourge Hook взрывает ближайший ген (−25%) |
|
||||
| **Nowhere to Hide** | После Kick гена — ауры выживших видны 4 сек в радиусе 24 блоков |
|
||||
| **Lethal Pursuer** | В начале игры — видеть ауры всех выживших 7 секунд |
|
||||
| **BBQ & Chili** | После повешения — видеть ауры выживших >40 блоков на 4 сек |
|
||||
| **Tinkerer** | Когда ген достигает 70% — уведомление + Undetectable на 12 сек |
|
||||
|
||||
> ⚠ Перки реализовать через EventListener. Каждый перк — отдельный класс, реализующий интерфейс `IPerk` с методами `onEquip()`, `onTrigger()`, `onRemove()`.
|
||||
|
||||
### 10.3 Тотемы (Totems)
|
||||
|
||||
- На карте **5 тотемов** (`totem_locations` в конфиге).
|
||||
- **Dull Totem:** выживший ломает за 14 секунд — начисляются Bloodpoints.
|
||||
- **Hex Totem:** активируется при использовании Hex-перка. Пока горит — перк активен.
|
||||
- При уничтожении Hex Totema — связанный перк деактивируется навсегда.
|
||||
|
||||
---
|
||||
|
||||
## 11. Эндгейм и итоги матча
|
||||
|
||||
### 11.1 Условия победы
|
||||
|
||||
| Сторона | Победа | Поражение |
|
||||
|---|---|---|
|
||||
| **Выжившие** | Минимум 2 выживших сбежали (ворота или люк) | Все выжившие мертвы до побега |
|
||||
| **Киллер** | Все 4 выжившие принесены в жертву / умерли | 2+ выжившие сбежали |
|
||||
|
||||
### 11.2 Экран результатов
|
||||
|
||||
- Все игроки телепортируются в лобби.
|
||||
- В Chat выводится таблица: игрок, роль, Bloodpoints, статус (Escaped / Sacrificed).
|
||||
- Title на 5 секунд: **ПОБЕДА / ПОРАЖЕНИЕ**.
|
||||
- Личная статистика матча: генераторы, спасения, хуки, урон.
|
||||
|
||||
### 11.3 Эндгейм Коллапс (End Game Collapse)
|
||||
|
||||
- Активируется при: открытии ворот ИЛИ закрытии люка.
|
||||
- Таймер **120 секунд** показывается всем в ActionBar красным текстом.
|
||||
- По истечении — все оставшиеся выжившие мгновенно умирают.
|
||||
|
||||
---
|
||||
|
||||
## 12. Пользовательский интерфейс (HUD)
|
||||
|
||||
### 12.1 ActionBar
|
||||
|
||||
- Постоянно: статус игрока (`❤ Healthy` / `🩸 Injured` / `💀 Downed`).
|
||||
- При взаимодействии: прогресс-бар починки / лечения / спасения.
|
||||
- Эндгейм Коллапс: красный таймер обратного отсчёта.
|
||||
|
||||
### 12.2 Sidebar (Scoreboard)
|
||||
|
||||
- **Выжившие:** количество починенных генераторов (`⚡ 2/5`), сколько выживших живо (`👥 3/4`).
|
||||
- **Киллер:** сколько выживших на крюке / мертво, прогресс генераторов.
|
||||
|
||||
### 12.3 Title / Subtitle
|
||||
|
||||
- Оповещения: генератор починен, выживший на крюке, ворота открыты.
|
||||
- Начало игры: роль + краткая инструкция.
|
||||
- Skill Check: вспышка в Title с таймером.
|
||||
|
||||
### 12.4 Звуки
|
||||
|
||||
- **Terror Radius:** нарастающее сердцебиение по мере приближения киллера (3 уровня).
|
||||
- **Генератор:** звук работы при починке, взрыв при провале skill check или Kick.
|
||||
- **Спасение с крюка:** звук успеха.
|
||||
- **Люк:** звук открытия / закрытия.
|
||||
- **Ворота:** звук активации, гудение.
|
||||
|
||||
> ⚠ Рекомендуется базовый Resource Pack для кастомных звуков. Без него — стандартные MC-звуки как замена.
|
||||
|
||||
---
|
||||
|
||||
## 13. Конфигурация (config.yml)
|
||||
|
||||
| Секция | Ключ | Тип | По умолчанию |
|
||||
|---|---|---|---|
|
||||
| `game` | `min_players` | int | 5 |
|
||||
| `game` | `max_players` | int | 5 |
|
||||
| `game` | `countdown_seconds` | int | 60 |
|
||||
| `game` | `world_name` | string | `dbd_map` |
|
||||
| `game` | `lobby_world` | string | `lobby` |
|
||||
| `killer` | `killer_speed` | double | 1.15 |
|
||||
| `killer` | `terror_radius` | int | 32 |
|
||||
| `killer` | `attack_cooldown` | double | 2.5 |
|
||||
| `killer` | `carry_speed` | double | 0.92 |
|
||||
| `killer` | `wiggle_duration` | double | 16.0 |
|
||||
| `survivor` | `sprint_duration` | double | 3.0 |
|
||||
| `survivor` | `sprint_cooldown` | double | 5.0 |
|
||||
| `survivor` | `heal_self_time` | double | 10.0 |
|
||||
| `survivor` | `heal_other_time` | double | 16.0 |
|
||||
| `generator` | `total_generators` | int | 7 |
|
||||
| `generator` | `required_generators` | int | 5 |
|
||||
| `generator` | `repair_time` | double | 80.0 |
|
||||
| `generator` | `gen_coop_multiplier` | double | 1.5 |
|
||||
| `generator` | `regression_rate` | double | 0.25 |
|
||||
| `hook` | `stage1_duration` | int | 60 |
|
||||
| `hook` | `stage2_duration` | int | 60 |
|
||||
| `hook` | `max_hook_count` | int | 3 |
|
||||
| `endgame` | `collapse_duration` | int | 120 |
|
||||
|
||||
**Дополнительные файлы конфигурации:**
|
||||
- `locations.yml` — все спавн-точки, координаты генераторов, хуков, тотемов, сундуков, ворот, люка.
|
||||
- `loot_table.yml` — весовая таблица предметов в сундуках.
|
||||
- `perks.yml` — настройки перков (кулдауны, длительности).
|
||||
|
||||
---
|
||||
|
||||
## 14. Команды и права
|
||||
|
||||
| Команда | Описание | Право |
|
||||
|---|---|---|
|
||||
| `/dbd join` | Войти в очередь на игру | `dbd.play` |
|
||||
| `/dbd leave` | Выйти из очереди / матча | `dbd.play` |
|
||||
| `/dbd forcestart` | Принудительно запустить игру | `dbd.admin` |
|
||||
| `/dbd stop` | Принудительно остановить игру | `dbd.admin` |
|
||||
| `/dbd setkiller <игрок>` | Назначить игрока киллером | `dbd.admin` |
|
||||
| `/dbd setspawn <killer\|survivor1..4>` | Установить спавн-точку (по курсору) | `dbd.admin` |
|
||||
| `/dbd setgen <id>` | Отметить блок как генератор | `dbd.admin` |
|
||||
| `/dbd sethook <id>` | Отметить блок как крюк | `dbd.admin` |
|
||||
| `/dbd setgate <1\|2>` | Отметить зону ворот | `dbd.admin` |
|
||||
| `/dbd sethatch` | Отметить блок как люк | `dbd.admin` |
|
||||
| `/dbd reload` | Перезагрузить конфиг | `dbd.admin` |
|
||||
| `/dbd stats [игрок]` | Посмотреть статистику | `dbd.play` |
|
||||
|
||||
---
|
||||
|
||||
## 15. Архитектура плагина
|
||||
|
||||
### 15.1 Структура пакетов
|
||||
|
||||
| Пакет | Назначение |
|
||||
|---|---|
|
||||
| `com.dbd.plugin.core` | Главный класс, GameManager, EventBus |
|
||||
| `com.dbd.plugin.game` | GameSession, GameState, RoleAssigner, RoundTimer |
|
||||
| `com.dbd.plugin.roles` | KillerController, SurvivorController, PlayerState |
|
||||
| `com.dbd.plugin.mechanics` | GeneratorManager, HookManager, PalletManager, HatchManager, GateManager |
|
||||
| `com.dbd.plugin.perks` | IPerk, PerkRegistry, PerkLoader, [все перки] |
|
||||
| `com.dbd.plugin.items` | IItem, ItemRegistry, ChestManager |
|
||||
| `com.dbd.plugin.ui` | HUDManager, ActionBarManager, TitleManager, SoundManager |
|
||||
| `com.dbd.plugin.data` | DatabaseManager, PlayerStats, LocationsConfig |
|
||||
| `com.dbd.plugin.commands` | DBDCommand, TabCompleter |
|
||||
|
||||
### 15.2 Ключевые принципы
|
||||
|
||||
- Каждый раунд — отдельный объект `GameSession` со своим состоянием.
|
||||
- Все механики управляются через `BukkitScheduler` (tick-based системы).
|
||||
- Перки реализованы через Event-Driven подход (не хардкод в механиках).
|
||||
- Конфиги не перезаписывают пользовательские настройки при обновлении (`saveDefaultConfig`).
|
||||
- Логирование всех событий в отдельный лог-файл (`logs/dbd.log`).
|
||||
|
||||
> ⚠ Плагин должен корректно обрабатывать disconnect игрока во время матча — замена ботом или перераспределение ролей.
|
||||
|
||||
---
|
||||
|
||||
## 16. Приоритет разработки
|
||||
|
||||
| Этап | Функционал | Статус |
|
||||
|---|---|---|
|
||||
| **MVP (Этап 1)** | Старт/стоп игры, роли, спавн, базовые состояния выжившего, атака киллера | 🔴 В разработке |
|
||||
| **Этап 2** | Генераторы (починка, прогресс, регрессия, skill check), хуки (все стадии) | 🔴 В разработке |
|
||||
| **Этап 3** | Паллеты, окна, перенос, вырывание, люк, ворота, эндгейм | 🔴 В разработке |
|
||||
| **Этап 4** | Предметы, сундуки, тотемы, базовые перки (10 survivor + 10 killer) | 🔴 В разработке |
|
||||
| **Этап 5** | Полный HUD, звуки, Terror Radius, Red Stain, Bloodpoints, база данных | 🔴 В разработке |
|
||||
| **Этап 6** | Балансировка, все остальные перки, тест-раунды, оптимизация | 🔴 В разработке |
|
||||
|
||||
---
|
||||
|
||||
*ТЗ подготовлено с учётом всех оригинальных механик Dead by Daylight (4v1) | Версия 1.0*
|
||||
Loading…
Add table
Add a link
Reference in a new issue