34 KiB
DEAD BY DAYLIGHT — Minecraft Plugin
Техническое Задание (ТЗ)
Полная реализация механик оригинальной игры 4v1
Содержание
- Общее описание проекта
- Распределение ролей и старт игры
- Механики выжившего
- Генераторы
- Механики киллера
- Паллеты и окна
- Выходные ворота и люк
- Предметы для выживших
- Bloodpoints и прогрессия
- Система перков
- Эндгейм и итоги матча
- Пользовательский интерфейс
- Конфигурация
- Команды и права
- Архитектура плагина
- Приоритет разработки
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