Dungeon
Расширение Dungeon предоставляет полноценный фреймворк для создания и управления инстанс-подземельями с определением комнат на основе полигонов, глобальными/групповыми меню, сундуками добычи и синхронизацией группы.
Возможности
- Инстанс-миры — Выделенные миры, создаваемые для каждого прохождения подземелья, с генерацией на основе шаблона.
- Комнаты и триггеры — Комнаты на основе полигонов с триггерами onEnter/onLeave, приоритетом и критериями.
- Система меню — Глобальный обозреватель подземелий + групповое лобби с полной настройкой раскладки интерфейса.
- Сундуки добычи — Случайные сундуки с якорями NPC, ручными триггерами и виртуальными блоками на стороне клиента.
- Система группы — Встроенное лобби с состояниями готов/не готов. Опциональные адаптеры для MMOCore, Parties.
- Редактор комнат — Визуальный внутриигровой редактор комнат с рёбрами из частиц, манипуляцией узлами и панелью инструментов.
Права
| Permission | Описание |
|---|---|
typewriter.dungeon.admin | Администрировать подземелья и редактор комнат. |
Зависимости
| Extension | Обязательно | Назначение |
|---|---|---|
| GUI Extension | Обязательно | Все меню используют систему раскладки GUI (layoutPool, mainLayoutId). Без неё ни одно меню не откроется. |
| QuestExtension | Обязательно | Зависимость времени выполнения для интеграции квестов (Ref<QuestEntry>). |
| PartyExtension | Опционально | Внешний плагин групп (Parties, MMOCore). У Dungeon есть встроенное лобби, работающее автономно. |
| PlaceholderAPI | Опционально | Для разрешения плейсхолдеров @Placeholder в сообщениях. |
Архитектура
Записи
- Определения — Dungeon Instance: правила, стоимость и конфигурация группы. Category: группирует подземелья в меню. Room: полигональный контур с триггерами входа/выхода. Room Config: набор комнат + точка появления. Loot Chest: контейнеры случайных наград.
- Действия — Global Menu: просмотр всех подземелий. Party Menu: координация лобби. Enter: логика входа игрока. Leave: логика выхода игрока. Close: завершить инстанс. Loot Chest Trigger: ручная активация сундука.
- Факты — InDungeon Fact: проверить, находится ли игрок в подземелье. InDungeonInstance Fact: проверить конкретное подземелье.
Руководство по быстрому старту
Шаг 1 — Определите комнату
Используйте /dungeon room my_room edit, чтобы войти в визуальный редактор комнат. Расставьте узлы, чтобы задать полигональную границу. Сохраните лаймовым красителем.
dungeon_room:
id: "boss_room"
name: "Boss Arena"
nodes:
- {x: 10, y: 64, z: 10}
- {x: 20, y: 64, z: 10}
- {x: 20, y: 64, z: 20}
- {x: 10, y: 64, z: 20}
priority: 1
onEnter:
- "boss_spawn_trigger"
Шаг 2 — Сгруппируйте комнаты в конфигурацию
dungeon_room_config:
id: "dungeon_layout"
name: "Default Layout"
rooms:
- "boss_room"
- "entrance_room"
spawnPoint:
x: 15
y: 65
z: 15
world: "dungeon_template"
Шаг 3 — Определите инстанс подземелья
dungeon_instance:
id: "ancient_temple"
name: "Ancient Temple"
templateWorld: "dungeon_template"
roomConfigurations:
- "dungeon_layout"
minPartySize: 1
maxPartySize: 4
cooldownSeconds: 300
Шаг 4 — Создайте категорию и меню
dungeon_category:
id: "main_dungeons"
name: "Main Dungeons"
instances:
- dungeonInstance: "ancient_temple"
unlockedItem: STONE_BRICKS
unlockedName: "<gold>Ancient Temple</gold>"
unlockedLore:
- "<gray>Players: {players}/{max}"
dungeon_global_menu:
id: "dungeon_hub"
category: "main_dungeons"
inventoryTitle: "<bold><gold>⚔ Dungeons</gold></bold>"
layoutPool:
- id: "main"
type: simple
items: []
Шаг 5 — Откройте меню
Из любого действия, команды, диалога NPC или триггера входа:
action:
type: dungeon_global_menu
id: "open_dungeons"
globalMenu: "dungeon_hub"
Или через команду: /dungeon global-menu main_dungeons
Команды
| Команда | Описание |
|---|---|
/dungeon global-menu <category> | Открыть глобальный обозреватель подземелий |
/dungeon party-menu <instance> | Открыть групповое лобби для конкретного инстанса |
/dungeon room <room> edit | Войти в визуальный редактор комнат |
/dungeon room <room> addvertex | Добавить узел на целевой блок |
/dungeon room <room> removevertexat <index> | Удалить узел по индексу |
/dungeon room <room> save | Сохранить комнату и выйти из редактора |
/dungeon room <room> cancel | Отменить редактирование |
Плейсхолдеры
Все плейсхолдеры используют префикс %typewriter_dungeon_%.
| Плейсхолдер | Описание |
|---|---|
%typewriter_dungeon_players% | Количество игроков в текущем подземелье. |
%typewriter_dungeon_attempts% | Всего попыток в этом подземелье (артефакт по игроку). |
%typewriter_dungeon_completions% | Количество прохождений (артефакт по игроку). |
%typewriter_dungeon_best_time% | Лучшее время прохождения в отформатированном виде (артефакт по игроку). |