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

Сущности в подземельях

В подземелье есть два вида живых существ, и обрабатываются они по-разному.

NPCБоевой моб
ЗаписьDungeon NPC InstanceDungeon Mob Spawn
Что этоЛюбое определение сущности Typewriter (собственные сущности Typewriter, MythicMobsNPC, BetterModel и так далее)Настоящий ванильный моб
Кто видитТолько участники забегаВсе в мире, но он принадлежит забегу
Когда появляетсяПока существует забегОдин раз за забег, при первом входе участника в его комнату
РазмещениеspawnLocation (фиксированное) или маркер NPC (генерируемое)room + positions (фиксированное) или маркеры MOB (генерируемое)

NPC забега​

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

  1. Создайте определение сущности как обычно (сущность Typewriter, MythicMobsNPC, BetterModel...). Всегда выбирайте его по ссылке, а не вводя id.
  2. Добавьте Dungeon NPC Instance и задайте definition.
  3. В фиксированном подземелье задайте spawnLocation: позицию в шаблонном мире. Слот забега сдвигает её. В генерируемом подземелье поставьте маркер NPC в шаблоне комнаты и направьте его поле npc на экземпляр. spawnLocation игнорируется.

allowedDungeonIds перечисляет экземпляры подземелий, забеги которых показывают NPC. Пусто означает все забеги всех подземелий. В фиксированном подземелье один и тот же spawnLocation применяется ко всем затронутым подземельям, поэтому ограничивайте список, если подземелья различаются. В генерируемом подземелье NPC показывается только в забеге, в планировке которого есть маркер NPC, указывающий на него. Если несколько маркеров (или несколько комнат) называют один и тот же экземпляр, учитывается только первый в порядке планировки.

group по умолчанию пуст: аудитория — участники забега, один NPC на забег. Выбирайте запись группы, только чтобы разделить одного NPC между участниками этой группы внутри одного забега.

Ограничения NPC​

  • Активности используют абсолютные позиции. Активность сущности (путь для ходьбы, патруль) не сдвигается в слот или мир забега. Оставляйте activity пустым (NPC стоит на месте), если только не знаете, что активность использует лишь относительное движение.
  • MythicMobsNPC: выключайте ticking и используйте свежую сборку. Определение MythicMobsNPC с включённым ticking создаёт настоящего моба для каждого зрителя. В подземельях выключайте ticking в определении. Тогда сервер держит по одному мобу-носителю на участника, скрытому от всех, кроме этого участника, а клик даёт ровно одно взаимодействие для нужного игрока. Для этого нужен MythicMobsNPC 5.0 или новее (исправление видимости для каждого забега); более старые сборки показывают носителя всем или дважды.
  • Кинематографическая сцена, воспроизводимая MythicMobsNPC в подземелье, не проверялась.
  • NPC скрыт за пределами дальности показа (showRange или значение по умолчанию для сущностей) и возвращается, когда участник подходит ближе. Это нормально.
  • Привязки сундуков к NPC: Dungeon Loot Chest с размещением NPC открывается правым кликом по его сущности npcAnchor.

Боевые мобы​

Dungeon Mob Spawn вызывает настоящих ванильных мобов.

Когда. Один раз за забег, при первом входе участника в комнату (фиксированное подземелье) или в комнату маркера (генерируемое подземелье). Они никогда не возрождаются. Волны создаются действием Dungeon Spawn Mobs. В фиксированном подземелье вход в комнату вызывает их, даже если enterOnce комнаты выключен, и только один раз за забег.

Где.

  • Генерируемое подземелье: у каждого маркера MOB шаблона комнаты, указывающего на запись. room и positions игнорируются.
  • Фиксированное подземелье: в positions, когда участник входит в room. При пустом room автоматически ничего не происходит: запись появляется только по действию Spawn Mobs. dungeonInstance ограничивает запись забегами одного подземелья.

Что. entityType (любой моб; ENDER_DRAGON и WITHER отклоняются с предупреждением в логе), count (от 1 до 50 на размещение), spread (от 0 до 32 блоков), имя, equipment с шансом выпадения для каждого слота, attributes (здоровье, урон, скорость...) и randomizeData.

Безопасно по умолчанию. blockDamage, dropVanillaLoot и dropExperience все выключены. Мобы ничего не ломают и не жгут (взрыв по-прежнему ранит игроков), роняют только выданное вами снаряжение (с шансом выпадения 0, пока вы его не повысите) и не дают опыта. Добыча подземелья берётся из его сундуков. Выброшенные предметы остаются в мире после забега, поэтому держите dropVanillaLoot выключенным в подземелье SHARED_WORLD_SLOTS.

Они принадлежат забегу. Они удаляются, когда забег заканчивается. Моб одного забега никогда не нацеливается на игроков другого забега и не ранит их, а игроки другого забега не могут ранить его. То, на что моб делится или во что превращается (слаймы, магмовые кубы, утонувший зомби, вексы, вызванные заклинателем), тоже принадлежит забегу.

Мирная сложность. Игра сразу удаляет враждебных мобов в мире с мирной сложностью, поэтому расширение не вызывает их там: отклоняются только мобы враждебного класса (зомби, но также слаймы, гасты, фантомы, шалкеры...). Нейтральные и пассивные мобы по-прежнему появляются. Место остаётся «в долгу», отказ записывается в лог один раз на место, а мобы появятся при последующем входе после повышения сложности. Повысьте сложность мира или выберите невраждебный тип. Это поведение ещё не проверено в игре.

Предметы и порталы. Моб подземелья никогда не подбирает предметы (снаряжение, выброшенное игроком, остаётся на земле) и не может уйти через портал: он остаётся в мире забега и по-прежнему учитывается в лимите.

Игроки других забегов. Моб забега никогда не нацеливается на игроков другого забега и не ранит их, а игроки другого забега не должны ранить его. В общем мире (SHARED_WORLD_SLOTS) это держится на фильтрах, а не на отдельных мирах, поэтому используйте изолированный режим, когда это важно.

Лимит​

maxAliveMobs у Dungeon Instance — наибольшее число одновременно живых мобов в одном забеге (по умолчанию 150, не более 500; 0 означает, что мобы не появляются). Размещение, которое превысило бы лимит, вызывает только поместившихся мобов и сообщает об этом в логе сервера. Остаток остаётся в долгу (хранится вместе с забегом, в том числе после перезагрузок) и появляется, насколько позволит лимит, при следующем входе участника в комнату, но суммарно никогда не больше count записи.

Смерть​

  • onDeath у записи: триггеры выполняются каждый раз, когда умирает один из её мобов, для игроков, выбранных deathRecipients (по умолчанию KILLER_OR_MEMBERS).
  • Когда умирает моб подземелья (on_dungeon_mob_death): событие, на которое можно подписаться откуда угодно, с фильтром по подземелью и по записи моба.
  • Учитываются только мобы, созданные записью. Слайм, который делится, даёт одну награду и одно событие, а не по одному на каждый кусок. То, что выходит из моба (куски, вексы, детёныши, подкрепление), относится к забегу, но ничего не запускает.

Как понять, что комната зачищена​

Dungeon Mobs Alive (dungeon_mobs_alive) считает живых мобов забега или одной записи. 0 не означает, что комната зачищена: лимит мог удержать часть мобов, а после перезагрузки мобы считаются заново. Используйте событие смерти, затем действие Dungeon Clear Room, чтобы сообщить, что комната зачищена.

Волны и масштабирование по числу игроков​

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

  • Игроки. perExtraPlayer добавляет мобов в каждой точке за каждого игрока сверх первого: count + perExtraPlayer × (игроки − 1). maxCount — потолок (0 = без собственного потолка; по-прежнему действуют 50 на точку и maxAliveMobs подземелья). playerCountSource определяет, кто считается: PRESENT_IN_ROOM (по умолчанию) — участники забега, находящиеся в комнате в момент запуска, RUN_MEMBERS — участники забега в сети.
  • Темп. maxSimultaneous — наибольшее число живых мобов одного места одновременно (0 = все сразу). Следующие появляются по мере гибели первых. Относится ко всему месту, а не к каждой точке.
  • Волны. waves — упорядоченный список. У каждой волны свои count и perExtraPlayer, необязательный entityType (иначе берётся тип записи; снаряжение, атрибуты и имя всегда берутся из записи), start и delayTicks. AFTER_PREVIOUS_CLEARED запускает волну через delayTicks после уничтожения предыдущих; AFTER_DELAY — через delayTicks после начала предыдущей, уничтожена она или нет. При наличии волн count записи не используется. Волна с отклонённым типом пропускается с предупреждением, следующая продолжается. Действие Dungeon Spawn Mobs сразу запускает следующую волну записи с волнами.

Триггеры: onWaveStart и onWaveCleared у волны, onWaveCleared у записи (после каждой волны) и onCleared у записи, когда всё место зачищено. Они выполняются для каждого участника забега в сети, один раз на место и на событие. Сначала выполняются триггеры смерти. Место считается зачищенным, когда все волны начались и ни один моб не жив и не ждёт места под потолком.

Перезагрузка

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

Сундук появляется, когда все мобы побеждены​

  1. Создайте Dungeon Loot Chest там, где должен стоять сундук, и включите manualMode, чтобы он не ставился при старте забега.
  2. Создайте действие Loot Chest Trigger, у которого chestEntry — этот сундук. Оставьте triggerMode в ONCE (раз за забег, даже если триггеры выполняются для каждого участника). При желании добавьте звук и particleEffect.
  3. В Dungeon Mob Spawn добавьте действие в onCleared. Чтобы реагировать в другом месте, создайте событие On Dungeon Mobs Cleared, отфильтруйте его по mob и поместите действие в его triggers.

Сундук появляется в мире забега, когда побеждён последний моб места. Для сундука после каждой волны используйте onWaveCleared волны.

Ограничения вкратце​

ОграничениеЗначение
Мобов на размещение (count)от 1 до 50
Радиус разброса (spread)от 0 до 32 блоков
Живых мобов за забег (maxAliveMobs)по умолчанию 150, не более 500
Отклоняемые типы мобовENDER_DRAGON, WITHER
ПоявлениеОдин раз за забег на место, без возрождения
Пустой allowedDungeonIds у NPCВсе забеги всех подземелий
Определение MythicMobsNPCticking выключен, MythicMobsNPC 5.0 или новее
Живых мобов = 0Не «комната зачищена»: лимит или перезагрузка могут скрывать мобов «в долгу»
ПлатформаТолько Paper, без Folia
Активность NPCАбсолютные позиции, не сдвигаются
Мирный мирВраждебные мобы отклоняются

См. также​