Dungeon
Обзор
Dungeon позволяет отряду пройти приватную копию подземелья. Каждое прохождение — это забег (run): у него свой мир (или свой слот общего мира), свои участники, свой лимит времени, свои сундуки, NPC и мобы, и он чисто завершается, отправляя всех обратно туда, откуда они пришли.
Подземелье описывается одной записью Dungeon Instance. Игроки выбирают его в глобальном меню (браузере подземелий, сгруппированных в категорию), входят в лобби в меню отряда, отмечают готовность и телепортируются, когда заканчивается обратный отсчёт. Персонал и квесты также могут отправить игрока сразу внутрь действием Dungeon Enter или командой.
Есть два вида подземелий:
- Фиксированное: вы строите подземелье один раз в шаблонном мире. Комнаты — это зоны, которые вы рисуете в игре, и всё происходит в заданных вами местах. Это классическое подземелье.
- Генерируемое: вы строите шаблоны комнат (небольшие постройки с дверями и маркерами), а генератор собирает новую планировку для каждого забега — от стартовой комнаты до комнаты босса. Один и тот же seed всегда даёт одно и то же подземелье. См. Генерируемые подземелья.
Оба вида используют одни и те же забеги, меню, сундуки, NPC, мобов, события и факты.
Dungeon рассчитан на Paper. Folia не поддерживается: официальный плагин Typewriter там не работает.
Возможности
- Забеги и группы: один забег на группу, несколько забегов одного подземелья одновременно (
maxSimultaneousInstances), лимит времени, стоимость входа, завершение забега по прохождению, истечению времени, пустому забегу или закрытию администратором. См. Забеги и изоляция мира. - Три режима изоляции:
SLIME_CLONE,WORLD_PER_RUNиSHARED_WORLD_SLOTS, выбираются для каждого подземелья полемisolation. - Фиксированные подземелья: комнаты с триггерами
onEnter/onLeave, модификаторами, критериями и приоритетом. - Генерируемые подземелья: шаблоны комнат, типы соединителей, пулы комнат, генератор, аффиксы и игровой редактор для захвата комнат и расстановки дверей и маркеров.
- Глобальное меню и меню отряда: макеты расширения GUI, обновляемые вживую, пока игроки входят в лобби и выходят из них.
- Сундуки с добычей: блочные сундуки или сундуки, привязанные к NPC, настоящие или клиентские, один инвентарь на игрока или общий, добыча со взвешенным выбором или независимая.
- NPC для каждого забега: NPC, который показывается только участникам одного забега, из любого определения сущности Typewriter. См. Сущности в подземельях.
- Боевые мобы: настоящие ванильные мобы, появляющиеся один раз за забег, со снаряжением, атрибутами, правилами выпадения и триггерами при смерти, ограниченные лимитом.
- События, факты и действия: события начала, завершения, входа в комнату, выхода из комнаты и смерти моба; факты «находится в подземелье» и «живые мобы»; действия для завершения забега, очистки комнаты и вызова волны.
- Статистика: 22 показателя на игрока (забеги, лучшее время, убийства мобов, нанесённый и полученный урон, смерти, зачищенные волны...), доступные через плейсхолдеры и факт и ранжируемые в рейтинге GUI. См. Статистика.
- Безопасно при перезагрузке:
typewriter reloadили Publish не прерывают забеги. Перезапуск сервера их завершает. - Отряды других плагинов: читает отряд MMOCore, Parties или расширения отрядов Typewriter, чтобы друзья входили вместе.
Установка
- Установите расширение GUI с его страницы. Оба меню Dungeon используют его макеты.
- Убедитесь, что установлено расширение TypeWriter Quest.
- Подготовьте то, что нужно вашему режиму изоляции (см. Забеги и изоляция мира):
- Фиксированное подземелье: шаблонный мир в виде папки в корне сервера (рядом с
world), напримерdungeon_temple. В имени допустимы буквы, цифры,_и-, до 64 символов. - Генерируемое подземелье: шаблонный мир не нужен. Расширение создаёт пустой мир для каждого забега.
- Slime clone: Advanced Slime Paper, шаблон — загруженный мир slime.
- Фиксированное подземелье: шаблонный мир в виде папки в корне сервера (рядом с
- Скачайте Dungeon в магазинах (см. кнопки в панели выше) и положите JAR-файл в
plugins/Typewriter/extensions/. - Перезапустите сервер.
- По желанию: установите MMOCore или Parties для поддержки внешних отрядов и PlaceholderAPI для плейсхолдеров.
Обновляетесь с 0.10? Сначала прочитайте заметку о миграции.
Быстрый старт
В этом руководстве создаётся одно фиксированное подземелье с меню лобби и сундуком. Для генерируемого подземелья начните с Генерируемых подземелий.
- В веб-панели откройте страницу manifest и добавьте Dungeon Room Config. Встаньте там, где должны появляться игроки, нажмите редактор содержимого
spawnPointи подтвердите. Мир, координаты и направление взгляда будут захвачены. - Добавьте Dungeon Instance. Задайте
templateWorldравным имени папки мира, добавьте конфигурацию комнаты вroomConfigurationsи задайтеminPartySizeиmaxPartySize. - Добавьте Dungeon Artifact (статистика) и Active Dungeon Instance Artifact (состояние забегов) и свяжите их в
artifactиruntimeArtifact. Без второго забеги хранятся в файлеruns.jsonрасширения, а при загрузке в лог пишется предупреждение. ПолеpartyLobbyArtifactбольше не используется: оставьте его пустым. - Добавьте Dungeon Category. В
instancesдобавьте слот, задайтеdungeonInstanceи выберите предметы для открытого и закрытого вида. - На странице sequence добавьте Dungeon Global Menu и Dungeon Party Menu. Оформите оба макета, как описано в разделе Меню.
- Запустите глобальное меню из диалога NPC, события-команды или любого другого триггера. Опубликуйте.
- Добавьте Dungeon Loot Chest для экземпляра. Встаньте там, где должен быть сундук, захватите
locationи заполнитеlootTable. - Добавьте действие Dungeon Complete там, где подземелье должно закончиться (например, в конце диалога после последнего сундука).
- Проверьте: откройте меню, кликните по подземелью, кликните по лобби, нажмите кнопку готовности.
Чтобы обойти меню и отправить одного игрока сразу внутрь, используйте Dungeon Enter или /typewriter dungeon enter <instance>. Это пропускает лобби, но не правила: проверяются размер группы (один игрок должен быть допустим по minPartySize), критерии, стоимость входа и число одновременных забегов.
Как это работает
Забег начинается, когда запускается лобби или выполняется действие Dungeon Enter. Расширение проверяет критерии и размер группы каждого игрока, резервирует место (двойной клик создаёт один забег), готовит мир, списывает стоимость входа (всё или ничего), телепортирует игроков, затем запускает onStart и применяет modifiers для каждого участника. Если что-то идёт не так, ничего не сохраняется: игроки остаются на месте, стоимость возвращается, а мир удаляется.
Забег заканчивается, когда выполняется Dungeon Complete, когда лимит времени доходит до нуля, когда выполняется Dungeon Close или /typewriter dungeon close, либо когда последний игрок выходит, меняет мир или отключается. onEnd срабатывает для каждого участника, сундуки, NPC и мобы забега удаляются, игроки телепортируются в точку выхода (или туда, откуда пришли), а мир освобождается.
Если одновременно происходит несколько завершений, побеждает только одно, поэтому вы никогда не получите два onEnd или двойной возврат.
Перезагрузки и перезапуски
typewriter reload или Publish не теряют забеги: они подхватываются заново вместе с участниками, миром, сроком, состоянием комнат (комната once остаётся израсходованной), открытыми сундуками и уже вызванными мобами. onStart, модификаторы и сундуки не выполняются повторно. Генерируемое подземелье перестраивается в памяти по его seed.
Перезапуск сервера завершает забеги: миры забегов исчезают, игроки отправляются домой при следующем входе, а оставшиеся папки миров очищаются. Лобби не восстанавливаются ни тем, ни другим.
Отключения
Участник, потерявший соединение с идущим подземельем, сохраняет своё место на время reconnectGrace у Dungeon Instance (по умолчанию 2 минуты). Всё это время забег не закрывается, а статистика участника не выплачивается. Вернувшийся вовремя участник появляется там, где был, с прежними сайдбаром, скрытыми слотами и режимом игры. Когда время истекает, он покидает забег и при следующем входе возвращается туда, откуда вошёл. Лимит времени забега продолжает идти.
Участник, которого ждут, остаётся участником: если забег тем временем заканчивается, он получает его исход как остальные, включая прохождение и лучшее время, тогда как триггеры onEnd выполняются только для участников в сети. 0 означает отсутствие ожидания: при отключении игрок убирается сразу. typewriter reload во время ожидания прекращает его для тех, кого ждут.
Если установлен MMOProfiles, возвращение проверяется заново после выбора профиля. Игрок, который не находится ни в одном забеге и которого профиль помещает в мир подземелья, возвращается туда, откуда вошёл, а режим игры, изменённый подземельем, возвращается независимо от того, какой режим восстановил профиль. Игрок, который находится в своём забеге (в периоде ожидания), просто продолжает. Без MMOProfiles ничего не меняется.
Меню
В Dungeon два меню. Оба — действия с layoutPool GUI и mainLayoutId. Предметы в макетах работают как любые предметы GUI. Предметы, у которых buttonType равен одному из значений ниже, заполняются Dungeon: ваш предмет (материал, имя, описание) сохраняется, и к нему добавляется поведение при клике. Пишите buttonType заглавными буквами, точно как в списке. Оставьте buttonPrefix пустым.
Оба меню перерисовываются каждые autoRefreshTicks (по умолчанию 20, в пределах от 10 до 1200) и сразу же для каждого игрока, у которого они открыты, всякий раз, когда меняется лобби показываемых в них подземелий. Игрок видит, как входит другой игрок, без клика.
О типах макетов, полях предметов (x, y, count, direction, gap, repeatY) и действиях по клику читайте в руководстве по GUI. Пошаговая сборка — в разделе Оформление меню.
Глобальное меню
Dungeon Global Menu показывает подземелья одной category. Оно открывается при срабатывании действия или командой /typewriter dungeon global-menu <category>.
buttonType | Поведение |
|---|---|
DUNGEON_INSTANCE_SLOT | Отмечает, где появляется подземелье. Ставьте по одному на подземелье или используйте count, direction, gap и repeatY, чтобы отметить ряд или блок. Каждый маркер заменяется следующим подземельем категории. Лишние маркеры остаются пустыми. |
DUNGEON_FIND_PARTY | Левый клик входит в первое непустое лобби, где ещё есть место, среди открытых подземелий категории, и открывает меню отряда. Если игрок уже в лобби этой категории, он выходит из него. |
DUNGEON_INFO | Только отображение. Используйте для предмета-подсказки. |
Как рисуются подземелья:
- Подземелья упорядочиваются по
categoryPriority(сначала меньшее), затем по id записи. - Слот показывается с
unlockedItem,unlockedNameиunlockLore, когда егоcriteriaподходят игроку (пустой список подходит всегда). Клик по нему открывает меню отряда для этого подземелья. - Слот, чьи
criteriaне подходят, показывается в закрытом виде и не может быть открыт. Критерии вычисляются для каждого игрока, открывающего меню, и ещё раз при клике. - В именах и описаниях можно использовать
{dungeon_name},{players}и{max}, а также плейсхолдеры PlaceholderAPI.{players}— размер первого лобби подземелья. - Размещайте маркеры
DUNGEON_INSTANCE_SLOTв макетахsimple,paginatedилиscrollable. Если базовый макет прокручиваемый, подземелья прокручиваются вместе с ним. - Без маркеров
DUNGEON_INSTANCE_SLOTни одно подземелье не отображается.
Меню отряда
Dungeon Party Menu — это лобби. Оно открывается, когда игрок кликает по подземелью в глобальном меню, и командой /typewriter dungeon instance-menu <instance>. Срабатывание самого действия ничего не делает, кроме вывода подсказки, поэтому не привязывайте его к NPC.
Какое меню обслуживает какое подземелье. Меню отряда, у которого dungeonInstance называет подземелье, обслуживает его. Меню отряда с пустым dungeonInstance обслуживает все подземелья, которые не называет ни одно другое меню. Меню, написанное для другого подземелья, никогда не открывается вместо нужного: если ни одно не подходит, игрок получает сообщение, а в логе сервера пишется No dungeon_party_menu serves '<instance>'. Так что у вас может быть по меню на подземелье, одно общее меню или и то и другое.
У подземелья столько лобби, сколько указано в maxSimultaneousInstances. Каждое лобби — это предмет: lobbyItem с именем из lobbyName и описанием из lobbyLore. Где рисуются лобби:
- С маркерами
DUNGEON_LOBBY_SLOTв макетеsimple(так же, какDUNGEON_INSTANCE_SLOT; используйтеcount,directionиgap, чтобы отметить несколько) каждый маркер заменяется следующим лобби. - Без маркеров лобби
nпомещается в столбецlobbyOffsetX + (n mod 9)и строкуlobbyOffsetY + (n div 9), отсчёт с 0.
Клик по лобби входит в него.
Плейсхолдер в lobbyName и lobbyLore | Значение |
|---|---|
{index} | Номер лобби, с 1. |
{players}, {max} | Игроки в лобби и maxPartySize. |
{player_names} | Имена участников, обёрнутые в префикс и суффикс готовности или неготовности. Только в описании. |
{ready_players}, {not_ready_players} | Количества. Только в описании. |
readyPlayerPrefix, readyPlayerSuffix, notReadyPlayerPrefix и notReadyPlayerSuffix задают цвет имён в {player_names}.
buttonType | Поведение |
|---|---|
DUNGEON_LOBBY_SLOT | Отмечает, где появляется лобби. |
DUNGEON_READY | Переключает готовность. Если у игрока нет стоимости входа, никто не отмечается готовым, а лобби получает missingItemsMessage подземелья. |
DUNGEON_LEAVE | Выходит из лобби и возвращает в глобальное меню, откуда пришёл игрок. |
DUNGEON_AUTO_FILL | Входит в первое непустое лобби со свободным местом. |
Когда забег начинается:
- Все в лобби должны быть готовы, а в лобби должно быть не меньше
minPartySizeигроков. - Идёт обратный отсчёт
startCooldownSeconds. Он останавливается, если кто-то снимает готовность. При0забег начинается сразу. - Проверяются критерии каждого игрока, затем стоимость входа. При
entryCostModeLEADERплатит первый игрок лобби. ПриGROUPплатят все. Предметы забираются, только если у всех есть всё необходимое. - Забег создаётся, а игроки телепортируются в точку появления.
Лобби, которое ждёт без обратного отсчёта lobbyIdleKickSeconds (по умолчанию 120 секунд), очищается. Администратор может запустить лобби вручную командой /typewriter dungeon force-start <instance>, которая снимает ограничение минимального размера группы и критерии.
Пока игроки ждут, меню отряда может показывать скорборд ожидания (enableWaitingScoreboard, scoreboardTitle, scoreboardWaiting с {missing}, scoreboardCountdown с {time}).
Отряды других плагинов. Если установлен MMOCore (с его собственным модулем отрядов), Parties или расширение отрядов Typewriter, Dungeon читает их отряды и никогда не создаёт, не объединяет и не изменяет их. Когда игрок входит в лобби, весь его отряд входит вместе с ним, если в лобби хватает места для всех. Если MMOCore присутствует, используется только он.
Команды, используемые кнопками
Кнопки не используют серверную команду: они вызывают внутренний обработчик системы меню, поэтому игрокам не нужны права и вводить ничего вручную не требуется.
Настройка
У расширения нет файла конфигурации. Большинство настроек находится в записях. Сообщения записей-действий (Enter, Leave, Close, Complete) и экземпляра подземелья (missingItemsMessage) — это поля. Время простоя лобби — поле lobbyIdleKickSeconds экземпляра подземелья (по умолчанию 120, 2 минуты).
Любой другой текст, который читает игрок, — это сниппет Typewriter, поэтому в коде ничего не зашито: меняйте или переводите их в веб-панели (snippets). Значения в формате MiniMessage, а плейсхолдеры {...} подставляются, как указано. Оставьте значения по умолчанию, и ничего не изменится.
| Семейство | Ключи (после префикса) |
|---|---|
content.dungeon_menu. | invalid_action, action_failed, in_instance, party_in_instance, global_in_instance, locked, lobby_unavailable, left_lobby, not_in_lobby, no_lobby_available, left_party, no_party_found, no_party_menu ({dungeon}), no_category, party_needs_dungeon |
content.dungeon_lobby. | idle_kick ({seconds}, {minutes}), party_sync, missing_items_fallback ({PlayerName}, {MissingQuantity}, {ItemName}; используется, когда missingItemsMessage пуст), scoreboard_syncing |
content.dungeon_run.sidebar. | time_left ({seconds}), quest ({number}). Строка боковой панели — простой текст: теги MiniMessage удаляются. |
content.dungeon_chest. | default_title (заголовок сундука с пустым containerTitle), trigger_chest_missing, trigger_not_manual |
content.dungeon_launch. | prefix (ставится перед каждым текстом семейства), no_online_member, already_in_run ({player}), no_room_configuration, group_size ({size}, {min}, {max}), criteria_not_met ({player}), missing_cost и missing_cost_leader ({player}, {amount}, {item}), max_runs_reached, isolation_unavailable, generation_failed ({text}), failed |
content.dungeon_stats. | Как плейсхолдеры статистики записывают значения: duration_format (токены {h}, {m}, {mm}, {ss}, {SSS}; по умолчанию {mm}:{ss}) и missing_value (что пишется для значения, которого ещё нет; по умолчанию -). |
content.dungeon_command. | Ответы команд /typewriter dungeon ...: only_players.close, only_players.enter, only_players.leave, only_players.menu, only_players.force_start, only_players.edit_room (отправляется в консоль), not_in_run, close.done, close.already_closing, enter.done ({dungeon}), leave.done ({dungeon}), instance_menu.join_failed, instance_menu.joined ({dungeon}), global_menu.not_configured ({category}), force_start.not_in_lobby, force_start.done ({dungeon}), room.invalid_index ({index}) |
content.dungeon_room., content.dungeon_room_template., content.dungeon_generated. | Редакторы комнат и отказы генерируемых подземелий. |
Ответы команд /typewriter dungeon ... тоже являются сниппетами, хотя эти команды предназначены только для персонала. Ответы редактора комнат (addnode, removenode, save...) находятся в content.dungeon_room., а текст отклонённого enter — это сниппет из content.dungeon_launch..
Артефакты хранят данные в plugins/Typewriter/:
| Артефакт | Содержимое |
|---|---|
| Dungeon Artifact | Статистика по подземельям и по игрокам (artifactId по умолчанию dungeon_data). |
| Active Dungeon Instance Artifact | Состояние идущих забегов, чтобы перезагрузка их не потеряла. |
| Dungeon Room Template | Сохранённая постройка одной комнаты генерируемого подземелья. |
| Dungeon Party Lobby Artifact | Неактивен. Оставлен, чтобы старые страницы по-прежнему загружались. |
Команды
Все команды Dungeon находятся в /typewriter dungeon (/tw dungeon). Каждая требует права typewriter.dungeon.admin и должна выполняться игроком.
| Команда | Описание |
|---|---|
/typewriter dungeon enter <instance> | Создаёт забег только для вас и телепортирует в него. Размер группы, критерии, стоимость входа и лимит забегов по-прежнему применяются. |
/typewriter dungeon leave <instance> | Убирает вас из вашего забега этого подземелья и возвращает туда, откуда вы пришли. |
/typewriter dungeon close <instance> | Завершает ваш собственный забег этого подземелья (закрытие администратором). |
/typewriter dungeon global-menu <category> | Открывает глобальное меню, настроенное для категории. |
/typewriter dungeon instance-menu <instance> | Входит в первое лобби, где есть место для вашей группы, и открывает меню отряда. |
/typewriter dungeon force-start <instance> | Запускает лобби, в котором вы находитесь, не дожидаясь готовности, обратного отсчёта, минимального размера группы и критериев. |
/typewriter dungeon room <room> edit | Открывает игровой редактор комнаты для Dungeon Room. |
/typewriter dungeon room <room> addnode | Добавляет узел у ваших ног. |
/typewriter dungeon room <room> removenode | Удаляет последний узел. |
/typewriter dungeon room <room> removenodeat <index> | Удаляет узел по его номеру, с 1. |
/typewriter dungeon room <room> save | Сохраняет комнату. |
/typewriter dungeon room <room> cancel | Отменяет правку. |
leave и close требуют, чтобы вы находились в забеге указанного подземелья, иначе они отвечают «You are not in a run of this dungeon» (сниппет content.dungeon_command.not_in_run). Прежней подкоманды start больше нет: используйте enter.
Шаблоны комнат генерируемых подземелий редактируются в веб-панели (редактор содержимого поля artifactId), а не командой. См. Генерируемые подземелья.
Редактор комнат (фиксированные подземелья)
edit открывает редактор с панелью инструментов на хотбаре: блейз-жезл в слоте 1 добавляет узел (на блоке, на который вы смотрите, или у ваших ног при приседании), редстоун в слоте 2 удаляет последний узел, а лаймовый краситель в слоте 8 сохраняет и выходит. Двойное нажатие приседания выходит без сохранения. Узлы показываются как блоки с контуром из частиц; присядьте и кликните по узлу, чтобы удалить его. Один узел даёт точечную комнату (радиус 0,5 блока), два — линию, три и больше — многоугольник. Вертикальная протяжённость берётся от самого нижнего и самого верхнего узла плюс verticalMargin.
Права
| Право | Что даёт |
|---|---|
typewriter.dungeon.admin | Все команды /typewriter dungeon, включая редактор комнат. |
Для использования меню игрокам права не нужны.
Статистика
Dungeon считает, что делает каждый игрок во время забега, и хранит это для каждого Dungeon Artifact в виде 22 показателей. Счётчики забега держатся, пока он идёт, и каждый участник выплачивается один раз, когда покидает забег или забег заканчивается; на диск ничего не пишется удар за ударом, а typewriter reload сохраняет счётчики идущих забегов. Подземелье, которое делит артефакт с другим, пополняет те же показатели.
| Ключ | Единица | Что хранит |
|---|---|---|
runs_started | количество | Начатые забеги, считаются при старте, даже если забег провален. |
runs_completed | количество | Забеги, завершённые, пока игрок ещё был в них. |
best_time | длительность | Наименьшее время завершённого забега (рекорд: до первого прохождения значения нет). |
runs_timed_out | количество | Забеги, у которых истёк лимит времени, пока игрок ещё был в них. |
runs_left | количество | Забеги, которые игрок покинул сам или у которых истекло время повторного подключения. Смерть, из-за которой игрок покидает забег, здесь не считается (она остаётся в deaths). |
mob_kills | количество | Убитые мобы. |
damage_dealt | здоровье | Урон мобам в том виде, в каком он реально отнял здоровье: удар на 100 по цели, у которой было 2 здоровья, считается как 2. |
damage_taken | здоровье | Полученный урон с тем же ограничением (здоровье и поглощение, которые были у игрока). |
deaths | количество | Смерти. |
time_played | длительность | Время, проведённое в забегах. |
completion_rate | доля | runs_completed относительно runs_started, вычисляется при чтении и записывается в процентах. |
current_health | здоровье | Текущее здоровье игрока. Значение есть только во время забега: оно никогда не сохраняется. |
best_run_kills | количество | Наибольшее число мобов, убитых за один забег (рекорд). |
best_run_damage | здоровье | Наибольший урон, нанесённый за один забег (рекорд). |
flawless_completions | количество | Завершённые забеги без единой смерти. |
solo_completions | количество | Завершённые забеги, начатые с одним участником. |
best_time_solo | длительность | Наименьшее время завершённого одиночного забега. |
health_regained | здоровье | Реально восстановленное здоровье, не больше недостающего. |
rooms_entered | количество | Комнаты, в которые заходили; комната, посещённая дважды за забег, считается один раз. |
rooms_cleared | количество | Комнаты, зачищенные через Dungeon Clear Room, для участников, находящихся в комнате. |
chests_opened | количество | Открытые сундуки с добычей, один раз на сундук для игрока, создавшего его добычу. |
waves_cleared | количество | Зачищенные волны. Считаются только настоящие волны: группы Dungeon Mob Spawn, у которых задан waves. |
Единицы: здоровье измеряется в очках здоровья (одно сердце — два), длительность записывается как mm:ss, если сниппеты не говорят иное, а доля записывается в процентах.
Что учитывается:
- Только участники активного забега, внутри мира их забега, в режиме
SURVIVALилиADVENTURE. Игрок вCREATIVEилиSPECTATORне учитывается вовсе, чтобы администратор, наблюдающий за забегом, не возглавил рейтинг. - Какие мобы учитываются, задаёт
statsMobScopeу Dungeon Instance.MARKED_ONLY(по умолчанию): только мобы, созданные забегом (помеченыdungeon_mob_run); части делящегося слизня никогда не считаются убийствами.ANY_MOB_IN_RUN_WORLD: также остальные мобы мира забега, например босс, поставленный другим плагином. Не разрешено сSHARED_WORLD_SLOTS, в мире которого есть другие забеги: там используетсяMARKED_ONLY, а при загрузке пишется предупреждение. - Статистика считается по артефакту. По нескольким артефактам итоги складывают счётчики и берут лучший рекорд; два артефакта с одним
artifactId— это один файл и считаются один раз.
Читайте её через плейсхолдеры, через факт Player Dungeon Statistic или ранжируйте в рейтинге GUI с помощью Dungeon Leaderboard Source (GUI 0.20 или новее).
Плейсхолдеры
Плейсхолдеры PlaceholderAPI используют префикс %typewriter_dungeon_…%. Плейсхолдеры о текущем забеге возвращают 0 или пустое значение, когда игрок не в забеге. Исключение: %typewriter_dungeon_stat_KEY% и его форма _raw подставляются только во время забега; вне его они остаются в тексте как есть. Вне забега работают только dungeon_total_KEY и dungeon_inst_ID_KEY.
| Плейсхолдер | Возвращает |
|---|---|
%typewriter_dungeon_remaining% | Оставшиеся секунды забега игрока. |
%typewriter_dungeon_remaining_formatted% | Оставшееся время в формате mm:ss. |
%typewriter_dungeon_players% | Число игроков в забеге игрока. |
%typewriter_dungeon_max% | maxPartySize подземелья игрока. |
%typewriter_dungeon_list% | Имена игроков забега через запятую. |
%typewriter_dungeon_player_N_name% | Имя N-го игрока забега (с 1). |
%typewriter_dungeon_player_N_health%, …_maxhealth%, …_healthpercent% | Здоровье, максимальное здоровье и процент здоровья N-го игрока. |
%typewriter_dungeon_player_health_N% | Name: health/max N-го игрока. |
%typewriter_dungeon_lobby_time% | Секунды до конца обратного отсчёта лобби игрока. Добавьте _formatted для mm:ss. |
%typewriter_dungeon_attempts%, %typewriter_dungeon_completions%, %typewriter_dungeon_best% | Забеги, прохождения и лучшее время игрока для подземелья, в котором он находится. |
%typewriter_dungeon_total_attempts%, …_total_completions%, …_total_ratio% | Итоги по всем подземельям и процент прохождений. |
%typewriter_dungeon_inst_ID_attempts%, …_completions%, …_best% | Та же статистика для подземелья, id записи которого ID. Id не должен содержать подчёркивания. |
%typewriter_dungeon_stat_KEY%, …_stat_KEY_raw% | Любой показатель игрока в артефакте подземелья, в котором он находится. KEY — ключ из таблицы, например %typewriter_dungeon_stat_mob_kills%. _raw даёт число без форматирования в своей единице (миллисекунды, очки здоровья, промилле), 0, если значения нет. |
%typewriter_dungeon_total_KEY%, …_total_KEY_raw% | Тот же показатель по всем подземельям. |
%typewriter_dungeon_inst_ID_KEY%, …_inst_ID_KEY_raw% | Тот же показатель для подземелья, id записи которого ID. |
current_health имеет значение только в dungeon_stat_current_health во время забега. Длительность записывается сниппетом content.dungeon_stats.duration_format, а отсутствующее значение — сниппетом content.dungeon_stats.missing_value.
Статистика берётся из Dungeon Artifact, связанного в поле artifact подземелья. Dungeon записывает её сам (попытки — при начале забега, прохождения и лучшее время — при его завершении). Лучшее время игрока хранится один раз на артефакт, по всем подземельям, которые его делят: дайте каждому подземелью свой артефакт, если каждому нужно своё лучшее время. Статистика хранится по профилю MMOProfiles, если этот плагин установлен, и по игроку в остальных случаях. Настраивать ничего не нужно.
Записи
Записей: 39, сгенерированы из исходного кода расширения.
Действия9
- Dungeon Clear RoomDungeon Clear Room
- Dungeon CloseDungeon Close
- Dungeon CompleteDungeon Complete
- Dungeon EnterDungeon Enter
- Dungeon Global MenuDungeon Global Menu
- Dungeon LeaveDungeon Leave
- Dungeon Party MenuDungeon Party Menu
- Dungeon Spawn MobsDungeon Spawn Mobs
- Loot Chest TriggerLoot Chest Trigger
События6
- On Dungeon CompleteWhen a dungeon run is completed
- On Dungeon Mob DeathWhen a dungeon mob dies
- On Dungeon Mobs ClearedWhen dungeon mobs are cleared
- On Dungeon Room EnterWhen a player enters a dungeon room
- On Dungeon Room LeaveWhen a player leaves a dungeon room
- On Dungeon StartWhen a dungeon run starts
Факты4
- Dungeon Mobs AliveDungeon Mobs Alive
- Dungeon StatPlayer Dungeon Statistic
- IndungeonPlayer Inside Dungeon
- Indungeon InstancePlayer Inside Specific Dungeon
Аудитории1
- Dungeon Run AudiencePlayers in a dungeon run
Сущности1
- Dungeon NPC InstanceDungeon NPC Instance
Группы1
- Dungeon Run GroupPlayers of a dungeon run
Артефакты4
- Active Dungeon Instance ArtifactActive Dungeon Instance Artifact
- Dungeon ArtifactUnified Dungeon Data Artifact
- Dungeon Party Lobby ArtifactDungeon Party Lobby Artifact
- Dungeon Room TemplateDungeon Room Template
Манифесты13
- Dungeon AffixDungeon Affix
- Dungeon CategoryDungeon Category
- Dungeon Connector TypeDungeon Connector Type
- Dungeon GeneratorDungeon Generator
- Dungeon InstanceDungeon Instance
- Dungeon Leaderboard SourceDungeon Leaderboard Source
- Dungeon Loot ChestDungeon Loot Chest
- Dungeon Loot TableDungeon Loot Table
- Dungeon Mob SpawnDungeon Mob Spawn
- Dungeon RestrictionsDungeon Restrictions
- Dungeon RoomDungeon Room
- Dungeon Room ConfigDungeon Room Config
- Dungeon Room PoolDungeon Room Pool
Устранение неполадок
Меню не открывается. Отсутствует расширение GUI, или mainLayoutId не совпадает с id макета в layoutPool. Установите GUI, затем проверьте id.
Подземелья не появляются в глобальном меню. В макете нет предмета с buttonType DUNGEON_INSTANCE_SLOT, или маркеры находятся в макете типа, отличного от simple, paginated и scrollable.
Кнопка ничего не делает или не похожа на кнопку. buttonType чувствителен к регистру и должен быть одним из DUNGEON_FIND_PARTY, DUNGEON_INFO, DUNGEON_INSTANCE_SLOT, DUNGEON_LOBBY_SLOT, DUNGEON_READY, DUNGEON_LEAVE или DUNGEON_AUTO_FILL. Глобальная кнопка в меню отряда или наоборот игнорируется.
Подземелье показано как закрытое. criteria его слота в категории не подходят этому игроку. Проверьте их по фактам игрока или очистите список.
Клик по подземелью ничего не выводит, и меню не открывается. Ни одно меню отряда не обслуживает это подземелье. Поищите в логе сервера No dungeon_party_menu serves, затем создайте меню с пустым dungeonInstance или с названием подземелья.
«The dungeon cannot be started on this server.» Режим изоляции подземелья не может работать здесь (например, SLIME_CLONE без Advanced Slime Paper) или не подходит для генерируемого подземелья. Перехода на другой режим нет. См. Забеги и изоляция мира.
«The group has N player(s): this dungeon needs X to Y.» Лобби или команда enter были использованы с группой вне диапазона от minPartySize до maxPartySize. Администратор может использовать force-start из лобби.
«All the runs of this dungeon are taken.» Уже активно maxSimultaneousInstances забегов.
Игроки попадают в пустой новый мир. templateWorld не совпадает с папкой мира в корне сервера. Лог пишет Cannot teleport player … world '…' not found, когда мир вообще не удаётся загрузить.
Игроков постоянно выбрасывает из забега. Выход из мира забега, даже командой, убирает игрока из забега. Выход последнего игрока завершает забег.
Сундук с добычей, вызванный Loot Chest Trigger, так и не возвращается. triggerMode по умолчанию ONCE — один раз за забег. Используйте REPEATABLE, чтобы срабатывать несколько раз в одном забеге. Следующий забег начинается с чистого листа.
NPC никогда не появляется. В генерируемом подземелье NPC появляется только через маркер NPC комнаты забега. В фиксированном подземелье проверьте allowedDungeonIds и spawnLocation. См. Сущности в подземельях.
В комнате нет мобов, хотя ни один моб не жив. Лимит maxAliveMobs мог удержать часть мобов, а после перезагрузки расширение считает заново. Не используйте Dungeon Mobs Alive, чтобы решить, что комната зачищена: используйте событие смерти моба.
Связанные расширения
- FakeBlock: его режим позиции
INSTANCE_DIMENSIONпредназначен для забегов Dungeon. - GUI: макеты глобального меню и меню отряда.
- MMOCore: источник отрядов для лобби.
- Changelog и Миграция с 0.10.