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

Создание фаз босса

Фазы позволяют кастомному боссу менять конфигурацию во время столкновения.

Как работают фазы босса?​

Фазы босса можно добавить к любому Кастомному боссу в EliteMobs, используя следующий формат конфигурации:

phases:
- phase_2_boss.yml:0.X
- phase_3_boss.yml:0.Y

Примечание: босс, которого вы изначально спавните (тот, что содержит запись phases: со списком всех остальных фаз), является боссом фазы 1. Файл босса фазы 1 НЕ должен указывать сам себя в своей записи phases:.

Каждая запись имеет вид filename:healthFraction. Доля должна быть не меньше 0 и меньше 1, например 0.60 или 0.30, а указанный файл босса должен быть загружен и включён. EliteMobs проверяет список при каждом создании босса: некорректная запись не даёт этому боссу заспавниться, а сообщение в консоли указывает на неё.

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

EliteMobs заменяет тело босса следующей фазой, сохраняя состояние столкновения. Если событие урона снизило бы здоровье до следующего порога или ниже, оно отменяется, а следующая фаза начинается с заданной долей здоровья. Избыточный урон не переносится. Затем босс получает 20 тиков боевого льготного периода.

Если чанк назначения ещё не обрабатывает сущности, EliteMobs загружает его и ждёт до 100 тиков (5 секунд), прежде чем заменить тело. Пока идёт ожидание, урон по боссу отменяется. Если мир назначения не загружен или чанк не становится готовым вовремя, переход отклоняется: босс остаётся в текущей фазе, а в консоль выводится предупреждение.

Пример​

Возьмём такого примерного фазового босса:

Файл: phase_1_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: STRAY
powers:
- attack_gravity.lua
phases:
- phase_2_boss.yml:0.60
- phase_3_boss.yml:0.30

Файл: phase_2_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.lua
- arrow_fireworks.lua

Файл: phase_3_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: WITHER_SKELETON
powers:
- arrow_rain.lua

Это представляет собой корректного Фазового босса. Если вы заспавните phase_1_boss.yml, он заспавнит Странника (Stray) с перечисленными выше атрибутами. После того как ему нанесут урон до 60% его здоровья, он немедленно будет заменён в том же месте Кастомным боссом, описанным в phase_2_boss.yml, поскольку конфигурационный файл указывает - phase_2_boss.yml:0.60 (phase_2_boss.yml — имя файла этого кастомного босса, 0.60 — это 60% здоровья). Учтите, что босс фазы 2 заспавнится с 60% своего здоровья, поскольку именно при этом значении происходит переход к этой фазе. У босса будут способности, перечисленные в файле phase_2_boss.yml. Как только боссу фазы 2 нанесут урон до 30% его здоровья, он спавнит босса, заданного для фазы 3. Учтите, что способности фазы 3 не связаны с предыдущими — вы можете полностью менять способности между фазами, как и почти все остальные атрибуты.

Продвинутое​

Наследуемые механики​

Вот список вещей, которые не меняются от фазы к фазе:

  • Первый Фазовый босс в цепочке определяет, через какие фазы пройдёт босс, то есть вам не следует добавлять запись phases для других боссов в фазе.

  • Таблица угрозы / Таблица урона остаётся прежней, то есть распределение добычи и продвинутая система агро не затрагиваются сменой фазы

  • При переходе используется доля здоровья, заданная для следующей фазы. Если фаза 2 начинается с 50%, она получает 50% собственного максимума здоровья, даже если вызвавший переход удар опустил бы предыдущую фазу ниже порога. У каждой фазы может быть свой максимум здоровья.

Фазы, упирающиеся в потолок здоровья, идентичны

Здоровье босса ограничивается серверным значением settings.attribute.maxHealth.max (по умолчанию 2048). Если несколько фаз настроены с достаточно высокими level и healthMultiplier, чтобы упереться в этот потолок, все они в итоге получают ровно 2048 HP, и задуманные вами различия здоровья между фазами исчезают. Примеры на этой странице (level: 50, healthMultiplier: 10) находятся как раз в этой зоне — см. healthMultiplier, чтобы узнать, на каком уровне каждый множитель упирается в потолок.

  • Подходящие фазовые боссы вне инстансов возвращаются к фазе 1, когда система регенерации вне боя вызывает fullHeal(). Для этого нужен regenerateCustomBossHealthOnCombatEnd; этот путь события исключает фантомов. Инстансовые боссы пропускают fullHeal(). Обычное лечение до максимума само по себе не сбрасывает фазу.

  • Региональные фазовые боссы сохраняют радиус привязи и задержку возрождения, заданные фазой 1, и возрождаются в фазе 1 после этой задержки. Переход использует тихий спавн и не запускает новый таймер побега; задавайте timeout всего столкновения в фазе 1.

  • Фаза 1 также определяет normalizedCombat для всей цепочки. Фаза с level: -1 сохраняет уже определённый уровень столкновения, включая выбранный уровень инстанса; явно заданный уровень новой фазы заменяет его.

Местоположения спавна для конкретных фаз​

По умолчанию боссы остаются на своём текущем местоположении при переходе между фазами. Однако вы можете заставить босса телепортироваться в определённое место при входе в фазу, используя настройку phaseSpawnLocation:

Файл: phase_2_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.lua
- arrow_fireworks.lua
phaseSpawnLocation: world_name,100,64,100,0,0

Вы также можете телепортировать босса, оставив его в том же мире:

phaseSpawnLocation: same_as_boss,100,64,100,0,0

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

Предупреждения​

Вот список механик, которые работают так, что поначалу может показаться неинтуитивным:

  • Обычный урон EliteMobs не позволяет перескочить корректную следующую фазу одним ударом: достижение её порога отменяет удар и продвигает босса на одну фазу. Добыча берётся из конфигурации, действующей при фактической смерти. Настройте награды последней фазы. Если переход отклонён, например потому что phaseSpawnLocation указывает на незагруженный мир, удар, достигающий порога, всё равно отменяется, поэтому обычный урон не сможет опустить здоровье босса ниже этого порога, пока проблема не будет устранена.

  • Каждая фаза выполняет процедуру спавна, включая применимые onSpawnCommands. Переходы и сбросы после полного восстановления используют тихий спавн без обычного объявления. Региональное возрождение после задержки может снова сопровождаться объявлением. Смена фазы не является смертью и не выполняет команды смерти.

  • Региональные фазовые боссы применяют переходные блоки ON_REMOVE уходящей фазы перед переходом. Затем новая фаза применяет блоки спавна. Фактическая смерть или команда kill применяет блоки удаления последней фазы. Обычная выгрузка чанков и сброс после полного восстановления не считаются поражением для этой очистки.

  • Смена фаз удаляет отслеживаемое ездовое существо уходящей фазы, затем новая фаза создаёт своё настроенное ездовое существо. Сброс после полного восстановления также удаляет текущее ездовое существо и использует настройки фазы 1.

  • Каждая фаза заново загружает способности. Поэтому состояние подкреплений ONCE способности custom_summon сбрасывается при смене фаз и возврате к фазе 1; это не ограничение одним вызовом на всё столкновение.

Советы и приёмы​

  • Вы можете использовать тот факт, что снаряжение и типы сущностей можно менять на протяжении боя, чтобы сделать босса всё более и более (или всё менее и менее) опасным на вид по ходу боя

  • Хотя это возможно, если только нет конкретной дизайнерской цели, вероятно, лучше, чтобы способности Фазового босса не менялись слишком резко между фазами, поскольку игрокам, скорее всего, понравится прогрессия, которая ощущается естественной на протяжении всего боя.

  • Вы можете использовать команды onSpawn для выполнения команд между фазами

  • Задайте song в каждой фазе, которая должна менять музыку. Другое значение заменяет трек, одинаковое продолжает его. Отсутствие song в последующей фазе не останавливает предыдущий трек.

  • Фазы можно использовать для переключения босса из ближнего боя в дальний и наоборот

  • Фазовые боссы создавались как крутые боссы с большим количеством HP. Обычно они лучше всего служат финальным столкновением для подземелий или большими Мировыми боссами.

  • Подкрепления могут оставаться в живых между фазами. cullReinforcements уходящей фазы управляет их очисткой; сброс к фазе 1 также запрашивает очистку подкреплений.

  • У боссов может быть любое количество фаз, какое вы захотите, но чем больше у них фаз, тем больше здоровья им понадобится, чтобы каждая фаза была значимой.

Интеграция с API​

Для разработчиков плагинов: EliteMobs вызывает событие ElitePhaseSwitchEvent, когда босс переходит между фазами. Это событие можно использовать для создания кастомного поведения или эффектов во время переходов между фазами:

Событие также вызывается при сбросе к фазе 1. Оно вызывается, когда тело новой фазы уже заспавнилось, после применения доли здоровья и 20-тикового боевого льготного периода. Переход, ожидающий чанк назначения, вызывает событие только при появлении тела.

@EventHandler
public void onPhaseSwitch(ElitePhaseSwitchEvent event) {
CustomBossEntity boss = event.getCustomBossEntity();
PhaseBossEntity phaseBoss = event.getPhaseBossEntity();
// Your custom logic here
}