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

Забеги и изоляция мира

Забег (run) — это одно прохождение подземелья одной группой. На этой странице объясняется, чем владеет забег, как создаётся его мир и какой режим изоляции выбрать.

Чем владеет забег​

У каждого забега свои:

  • участники: игроки группы. Игрок находится только в одном забеге одновременно.
  • мир или слот: место, где подземелье существует только для этого забега.
  • лимит времени: поле cooldownSeconds подземелья (максимальная длительность; пусто или 0 означает отсутствие лимита).
  • состояние: комната, в которой находится каждый участник, уже использованные комнаты once, сундуки, уже вызванные мобы.
  • аудитория: NPC и сундуки забега показываются только его участникам.

Одновременно может существовать несколько забегов одного подземелья, вплоть до maxSimultaneousInstances. Это число также равно числу лобби подземелья. Когда все заняты, следующая группа получает «All the runs of this dungeon are taken.»

Группы​

Группа — это те, кто входит в лобби вместе, или единственный игрок действия Dungeon Enter. Если у игрока есть отряд в MMOCore, Parties или расширении отрядов Typewriter, весь этот отряд входит в лобби вместе, когда хватает места для всех. Dungeon только читает эти отряды: он никогда не создаёт и не изменяет их.

Размер группы должен быть от minPartySize до maxPartySize, и каждый участник должен соответствовать criteria подземелья. Администратор, использующий /typewriter dungeon force-start, пропускает минимальный размер и критерии.

Выбор режима изоляции​

Задайте поле isolation в Dungeon Instance.

РежимИзолированСтоимостьТребуется
SLIME_CLONEДаНизкая: клон в памятиAdvanced Slime Paper и шаблон, являющийся загруженным миром slime.
WORLD_PER_RUNДаВысокая: копирует папку шаблона, затем удаляет копиюПапка шаблонного мира в корне сервера.
SHARED_WORLD_SLOTSНетСамая низкая: ничего не копируетсяМир, построенный одинаково в каждом слоте.
AUTO (по умолчанию)SLIME_CLONE, когда установлен Advanced Slime Paper, иначе WORLD_PER_RUN.

Режим, который не может работать на сервере, отклоняет забег; он никогда не переходит на другой режим. Игрок читает «The dungeon cannot be started on this server.», а лог сервера объясняет почему.

SLIME_CLONE​

Каждый забег получает клон мира slime в памяти. Это самый дешёвый режим с полной изоляцией. Ему нужен Advanced Slime Paper, а templateWorld должен называть загруженный мир slime.

WORLD_PER_RUN​

Каждый забег получает копию папки шаблонного мира, то есть настоящий новый мир. Копия делается вне потоков сервера, новый мир получает имя от расширения и помечается файлом-маркером, чтобы удалять можно было только миры, созданные им. В конце забега мир выгружается без сохранения, а его папка удаляется.

  • Расширение никогда не загружает, не изменяет и не удаляет сам шаблон.
  • Ссылка (символическая ссылка, junction) в любом месте папки шаблона приводит к отказу копирования.
  • В имени шаблона допустимы только буквы, цифры, _ и - (до 64 символов). Основной мир сервера и имена, похожие на миры забегов, отклоняются.
  • Если мир нельзя выгрузить, потому что в нём остаётся игрок, он остаётся загруженным и удаляется при следующем запуске.

Это также единственный режим, который вмещает генерируемое подземелье: расширение создаёт пустой мир для забега и вставляет в него комнаты. С генератором работают AUTO и WORLD_PER_RUN, а SLIME_CLONE и SHARED_WORLD_SLOTS отклоняются.

SHARED_WORLD_SLOTS​

Все забеги подземелья проходят в самом шаблонном мире, каждый в своём слоте сетки. Расширение сдвигает каждую заданную вами позицию (появление, комнаты, сундуки, NPC, позиции мобов) на смещение слота забега, поэтому вы строите подземелье один раз в исходном слоте, а затем строите его одинаково в каждом другом слоте (например, вставив его).

Поле sharedSlots задаёт сетку:

ПолеЗначениеПо умолчанию
spacingX, spacingZБлоков между двумя слотами. Не меньше занимаемой площади.512
columnsСлотов в ряду. 0 = все слоты в одном ряду вдоль X.0
footprintX, footprintZРазмер шаблона в блоках.256
Этот режим не изолирован

Мобы, выброшенные предметы и блоки общие для всех слотов мира. Когда забег заканчивается, его мобы, сундуки и NPC удаляются, но сам мир не восстанавливается: предметы, брошенные на землю, и блоки, сломанные игроками или мобами, остаются. Игроки других слотов скрыты друг от друга, а сундуки, NPC и мобы забега фильтруются по его участникам, но подземелье с разрушительными мобами или правками мира оставит следы. В общем мире держите blockDamage и dropVanillaLoot выключенными у записей Dungeon Mob Spawn.

Два подземелья, построенные в одном общем мире, делят его слоты. Используйте одинаковое значение maxSimultaneousInstances для обоих.

Запуск забега​

Запуск — всё или ничего:

  1. Проверяются критерии и размер группы, определяется режим изоляции.
  2. Резервируется место, поэтому двойной клик даёт один забег, а не два.
  3. Для генерируемого подземелья создаётся планировка, затем она вставляется в новый мир по несколько комнат за тик.
  4. Мир подготавливается (клон, копия или слот).
  5. Списывается стоимость входа, всё или ничего.
  6. Записывается исходная точка каждого участника, и все телепортируются.
  7. Забег становится активным, затем для каждого участника выполняются сундуки, onStart, модификаторы (и аффиксы генерируемого подземелья).

Если какой-либо шаг не удался, игроки остаются на месте, стоимость возвращается, мир освобождается, а место возвращается.

Завершение забега​

Побеждает первое из этих событий, и выполняется только одно завершение, даже когда несколько происходят вместе:

  • Dungeon Complete (подземелье пройдено).
  • Истёк лимит времени (cooldownSeconds).
  • Dungeon Close или /typewriter dungeon close <instance>.
  • Все участники вышли, сменили мир или отключились.

Завершение выполняет onEnd для каждого участника онлайн, очищает сундуки, NPC и мобов забега, отправляет участников обратно (в exitPoint у Complete и Close, если он задан, иначе туда, откуда каждый пришёл), затем освобождает мир. Игрок, отключившийся во время забега, возвращается туда, откуда пришёл, при следующем входе. Если он вернётся в пределах времени повторного подключения (reconnectGrace, по умолчанию 2 минуты), он, наоборот, сохранит своё место: см. Отключения.

Перезагрузка и перезапуск​

СобытиеЧто происходит с забегами
typewriter reload, PublishЗабеги подхватываются заново: участники, мир, срок, состояние комнат, открытые сундуки и вызванные мобы возвращаются. onStart и модификаторы повторно не выполняются.
Перезапуск сервераЗабеги заканчиваются: их миров больше нет. Игроков отправляют домой при следующем входе, а осиротевшие папки миров очищаются.

Чтобы подхват работал, свяжите Active Dungeon Instance Artifact в поле runtimeArtifact. Без него забеги записываются в файл runs.json расширения, а лог сервера предупреждает вас при загрузке. Несколько подземелий могут делить один артефакт.

Забег, который невозможно подхватить (его подземелье удалено, его мир не загружен, его генерируемую планировку нельзя перестроить), закрывается при запуске, а его игроков отправляют домой. Лог объясняет причину.

Лобби не восстанавливаются ни перезагрузкой, ни перезапуском: они возвращаются пустыми, кроме лобби подхваченных забегов.

См. также​