Перейти к основному содержимому

Dungeon

Инстанс-подземелья с лобби для групп, GUI-меню, сундуками с добычей и внутриигровым редактором комнат.

Платныеv1.2Бои и мобы
ТребуетсяTypeWriter0.9Quest (TypeWriter extension)GUIMMOCoreнеобязательноPartiesнеобязательноAdvanced Slime PaperнеобязательноPlaceholderAPIнеобязательно

Обзор​

Dungeon позволяет отряду пройти приватную копию подземелья. Каждое прохождение — это забег (run): у него свой мир (или свой слот общего мира), свои участники, свой лимит времени, свои сундуки, NPC и мобы, и он чисто завершается, отправляя всех обратно туда, откуда они пришли.

Подземелье описывается одной записью Dungeon Instance. Игроки выбирают его в глобальном меню (браузере подземелий, сгруппированных в категорию), входят в лобби в меню отряда, отмечают готовность и телепортируются, когда заканчивается обратный отсчёт. Персонал и квесты также могут отправить игрока сразу внутрь действием Dungeon Enter или командой.

Есть два вида подземелий:

  • Фиксированное: вы строите подземелье один раз в шаблонном мире. Комнаты — это зоны, которые вы рисуете в игре, и всё происходит в заданных вами местах. Это классическое подземелье.
  • Генерируемое: вы строите шаблоны комнат (небольшие постройки с дверями и маркерами), а генератор собирает новую планировку для каждого забега — от стартовой комнаты до комнаты босса. Один и тот же seed всегда даёт одно и то же подземелье. См. Генерируемые подземелья.

Оба вида используют одни и те же забеги, меню, сундуки, NPC, мобов, события и факты.

Только Paper

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, чтобы друзья входили вместе.

Установка​

  1. Установите расширение GUI с его страницы. Оба меню Dungeon используют его макеты.
  2. Убедитесь, что установлено расширение TypeWriter Quest.
  3. Подготовьте то, что нужно вашему режиму изоляции (см. Забеги и изоляция мира):
    • Фиксированное подземелье: шаблонный мир в виде папки в корне сервера (рядом с world), например dungeon_temple. В имени допустимы буквы, цифры, _ и -, до 64 символов.
    • Генерируемое подземелье: шаблонный мир не нужен. Расширение создаёт пустой мир для каждого забега.
    • Slime clone: Advanced Slime Paper, шаблон — загруженный мир slime.
  4. Скачайте Dungeon в магазинах (см. кнопки в панели выше) и положите JAR-файл в plugins/Typewriter/extensions/.
  5. Перезапустите сервер.
  6. По желанию: установите MMOCore или Parties для поддержки внешних отрядов и PlaceholderAPI для плейсхолдеров.

Обновляетесь с 0.10? Сначала прочитайте заметку о миграции.

Быстрый старт​

В этом руководстве создаётся одно фиксированное подземелье с меню лобби и сундуком. Для генерируемого подземелья начните с Генерируемых подземелий.

  1. В веб-панели откройте страницу manifest и добавьте Dungeon Room Config. Встаньте там, где должны появляться игроки, нажмите редактор содержимого spawnPoint и подтвердите. Мир, координаты и направление взгляда будут захвачены.
  2. Добавьте Dungeon Instance. Задайте templateWorld равным имени папки мира, добавьте конфигурацию комнаты в roomConfigurations и задайте minPartySize и maxPartySize.
  3. Добавьте Dungeon Artifact (статистика) и Active Dungeon Instance Artifact (состояние забегов) и свяжите их в artifact и runtimeArtifact. Без второго забеги хранятся в файле runs.json расширения, а при загрузке в лог пишется предупреждение. Поле partyLobbyArtifact больше не используется: оставьте его пустым.
  4. Добавьте Dungeon Category. В instances добавьте слот, задайте dungeonInstance и выберите предметы для открытого и закрытого вида.
  5. На странице sequence добавьте Dungeon Global Menu и Dungeon Party Menu. Оформите оба макета, как описано в разделе Меню.
  6. Запустите глобальное меню из диалога NPC, события-команды или любого другого триггера. Опубликуйте.
  7. Добавьте Dungeon Loot Chest для экземпляра. Встаньте там, где должен быть сундук, захватите location и заполните lootTable.
  8. Добавьте действие Dungeon Complete там, где подземелье должно закончиться (например, в конце диалога после последнего сундука).
  9. Проверьте: откройте меню, кликните по подземелью, кликните по лобби, нажмите кнопку готовности.
подсказка

Чтобы обойти меню и отправить одного игрока сразу внутрь, используйте 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Входит в первое непустое лобби со свободным местом.

Когда забег начинается:

  1. Все в лобби должны быть готовы, а в лобби должно быть не меньше minPartySize игроков.
  2. Идёт обратный отсчёт startCooldownSeconds. Он останавливается, если кто-то снимает готовность. При 0 забег начинается сразу.
  3. Проверяются критерии каждого игрока, затем стоимость входа. При entryCostMode LEADER платит первый игрок лобби. При GROUP платят все. Предметы забираются, только если у всех есть всё необходимое.
  4. Забег создаётся, а игроки телепортируются в точку появления.

Лобби, которое ждёт без обратного отсчёта 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
События6
Факты4
Аудитории1
Сущности1
Группы1
Артефакты4
Манифесты13

Устранение неполадок​

Меню не открывается. Отсутствует расширение 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.