Создание мировых боссов
Мировых боссов (World Bosses) иногда также называют региональными боссами (Regional Bosses).
Что это?
Мировые боссы — это пользовательские боссы, настроенные на появление в определённом месте с определённой задержкой. Это также боссы, используемые в подземельях. Хотя в этом разделе мы будем говорить именно о создании мировых боссов для использования вне подземелий.
Для чего они?
Мировые боссы позволяют игрокам столкнуться с фиксированным испытанием, зная, что добыча будет того стоить.
Что нужно для создания мирового босса?
- Местоположение. Рекомендуется комната босса с радиусом примерно 15 блоков (30 блоков в поперечнике) из-за радиуса агрессии в Minecraft. Кроме того, убедитесь, что территория защищена регионом WorldGuard (чтобы игроки не могли строить ловушки) и что рельеф нельзя использовать в свою пользу в бою.
- Время возрождения (respawn). Таймер возрождения крайне важен. Я не рекомендую делать таймер возрождения меньше 30 минут, иначе возрождение босса будет менее значимым событием. 1 час — довольно хорошее время, но вы также можете сделать так, чтобы босс возрождался раз в день или даже раз в неделю.
- Время побега (escape). Чем дольше возрождение, тем дольше должно быть время побега. Также учитывайте, что время побега должно быть достаточно долгим, чтобы люди могли спокойно бросить боссу вызов. Таймеры побега важны, если вы не хотите позволять игрокам уничтожать босса камикадзе-тактикой. Это не обязательно и даже не рекомендуется, если вы хотите делать масштабных боссов с возрождением раз в неделю.
- Пользовательский босс. Мировые боссы — это, по сути, просто пользовательские боссы с особыми правилами появления. Убедитесь, что вы выбрали способности (powers) с хорошей совместимостью для рейдового боя.
- Интересная добыча. Главная привлекательность мировых боссов, помимо вызова, — это добыча. Убедитесь, что игроки могут получить с них что-то, чего они просто не могут получить нигде больше.
- Тематика. У хорошего регионального босса должна быть тематика, с тематическим местоположением и тематической добычей.
Параметры конфигурации пользовательского босса для мировых боссов:
Эти настройки добавляются в обычные конфигурационные файлы пользовательского босса. Подробную страницу вики о них можно найти здесь.
isRegionalBoss
Устанавливает, является ли босс региональным. Региональные боссы — это другое название мировых боссов, поэтому нужно установить значение true.
| Key | Values | Default |
|---|---|---|
isRegionalBoss | Boolean | false |
Пример
isRegionalBoss: true
spawnLocations
Задавайте места появления в игре командой /em place boss <filename.yml>. Её должен выполнять игрок с разрешением elitemobs.place.admin, а загруженная конфигурация босса должна содержать isRegionalBoss: true. Каждый вызов добавляет ещё одно место появления. Команда выравнивает позицию по центру блока и при необходимости ищет проходимое место выше; это не полная проверка свободного пространства для размеров босса.
Хотя можно добавлять местоположения вручную из конфигурации, я не рекомендую этого делать, поскольку слишком легко допустить ошибку.
| Key | Values | Default |
|---|---|---|
spawnLocations | String List | none |
Пример
Местоположения в конфигурационных файлах (для продвинутых пользователей). Конфигурационные файлы регионального босса хранят все экземпляры этого регионального босса в одном файле, сохраняя несколько мест появления, а также таймеры возрождения.
На практике это означает, что эта запись:
spawnLocations:
- elitemobs_sewer_maze,-70.17178578884845,168.2,-173.17112099568718,-271.24023,64.19999:1610710903931
- elitemobs_sewer_maze,-135.02262355317436,168.2,-153.28849346821508,-98.53906,60.750263:1609026066482
- elitemobs_sewer_maze,-70.43846307626053,168.2,-174.13499832314378,-271.24023,64.19999:1610710886530
- elitemobs_sewer_maze,-130.39762674971664,168.2,-171.67396911490718,-47.532227,51.900173:1609026066482
- elitemobs_sewer_maze,-117.12782160766056,162.2,-166.40989416757444,-71.37402,-1.4997427:1610710974882
- elitemobs_sewer_maze,-105.13138759611667,168.2,-169.85898023126538,-124.34766,41.24988:1610710945331
- elitemobs_sewer_maze,-106.21847515732084,169.2,-152.3609257554766,-170.86523,21.450315:1610537606222
содержит 7 разных региональных боссов в разных местах и с разными таймерами возрождения.
Давайте разберём детали, взглянув на первого регионального босса:
- elitemobs_sewer_maze,-70.17178578884845,168.2,-173.17112099568718,-271.24023,64.19999:1610710903931
Поскольку это соответствует формату world,x,y,z,yaw,pitch:unixTimeStamp, босс появляется в мире под названием elitemobs_sewer_maze на x = -70.17178578884845, y = 168.2, z = -173.17112099568718, yaw = -271.24023, pitch = 64.19999.
Метка времени хранит срок следующего возрождения в миллисекундах с начала эпохи Unix и сохраняется между перезапусками. Для преобразования в обычную дату выбирайте конвертер, принимающий миллисекунды.
Перед ручным удалением части :unixTimeStamp (включая двоеточие) остановите сервер: периодическое сохранение может перезаписать изменения. Запись world,x,y,z,yaw,pitch без срока возрождения восстанавливает босса без оповещения о появлении, когда мир и чанк доступны.
spawnCooldown
Задаёт задержку в минутах после смерти или истечения timeout до следующей попытки появления. Значение 0 сразу ставит босса в очередь, отрицательное значение отключает возрождение. Для появления должны быть доступны мир и чанк; для патрульного босса также требуется позиция с обработкой сущностей.
Примечание: для крупных боссов рекомендуется более длительное возрождение!
| Key | Values | Default |
|---|---|---|
spawnCooldown | Integer | 0 |
Пример
spawnCooldown: 20
timeout
Задаёт время в минутах от появления до автоматического побега, а не от начала боя. Значение меньше 1 отключает таймер. Восстановление регионального босса после загрузки чанка, мира или перезапуска запускает полный интервал заново: срок побега не сохраняется. Смена фазы сохраняет текущий таймер столкновения.
Примечание: это значение должно быть достаточно большим, чтобы игроки могли спокойно завершить бой.
| Key | Values | Default |
|---|---|---|
timeout | Integer | 0 |
Пример
timeout: 60
Заставляет босса сбежать через 60 минут, если он не побеждён.
leashRadius
Задаёт границу возврата вокруг размещённой точки появления. При нативной навигации подходящие боссы-существа начинают мягкий возврат на половине этого радиуса, а принудительный возврат использует полный радиус; если босс не может добраться до цели, возврат может телепортировать его. Эндер-дракон исключён из этих нативных целей привязки. Без нативной навигации проверка каждые 3 секунды возвращает боссов, вышедших за полный радиус; этот запасной вариант работает только для радиуса не меньше 1. Когда нативный возврат завершается, босс полностью восстанавливает здоровье, только если в MobCombatSettings.yml включён regenerateCustomBossHealthOnCombatEnd (по умолчанию true).
Примечание: старайтесь не создавать боевые зоны, требующие привязки (leash) короче 20 блоков, так как это ухудшит бой.
| Key | Values | Default |
|---|---|---|
leashRadius | Double | 0 |
Пример
leashRadius: 30
escapeMessage
Задаёт сообщение о побеге по timeout. Непустое сообщение получают игроки в мире босса при announcementPriority не меньше 1; при значении не меньше 3 оно также отправляется в настроенный Discord. Тайм-аут удаляет босса и запускает задержку возрождения, кроме случая removeAfterDeath: true, когда место появления удаляется навсегда.
| Key | Values | Default |
|---|---|---|
escapeMessage | String | none |
Пример
escapeMessage: "&cThe World Boss has escaped!"
announcementPriority
Управляет настроенными сообщениями о появлении, смерти и побеге. Отслеживание дополнительно требует showCustomBossLocation в MobCombatSettings.yml; locationMessage необязателен.
| Уровень | Поведение |
|---|---|
0 | Нет оповещений о появлении и побеге или отслеживания; настроенное сообщение о смерти всё ещё получают атакующие |
1 | Настроенные сообщения о появлении, смерти и побеге в чате; отслеживание через /em, если оно включено |
2 | Идентичен уровню 1 (дополнительного поведения нет) |
3 | Уровень 1 + уведомления в Discord (если настроено) |
Охват сообщения о появлении определяется announcementBroadcastWorldOnly в events.yml. При положительном приоритете сообщение о смерти рассылается глобально, если включён doCustomEliteMobsDeathMessages в MobCombatSettings.yml; сообщение о побеге ограничено миром босса. Восстановленный босс может отслеживаться без нового оповещения о появлении. Задавайте приоритет явно: добавление текста сообщения само по себе не меняет значение по умолчанию 0.
| Key | Values | Default |
|---|---|---|
announcementPriority | Integer | 0 |
Пример
announcementPriority: 3
Заставляет босса оповещать в чате и Discord, а также позволяет игрокам отслеживать его.
isPersistent
Сохранение позволяет восстановить босса после загрузки чанка; оно не удерживает живую сущность или чанк загруженными и не продолжает бой в выгруженном чанке. Размещённые региональные боссы автоматически используют собственный механизм восстановления независимо от обычной настройки isPersistent.
Примечание: слишком большое количество постоянных боссов (сотни) может вызвать проблемы с производительностью.
| Key | Values | Default |
|---|---|---|
isPersistent | Boolean | false |
Пример
isPersistent: true
removeAfterDeath
Определяет, удаляется ли мировой босс навсегда после поражения. Полезно для одноразовых боссов событий или особых столкновений, которые не должны возрождаться.
При false (по умолчанию) смерть или тайм-аут ставят босса в очередь после spawnCooldown, если задержка не отрицательна.
При true смерть или тайм-аут навсегда удаляют это место появления.
| Key | Values | Default |
|---|---|---|
removeAfterDeath | Boolean | false |
Пример
removeAfterDeath: true
Переходные блоки (Transitive Blocks)
Переходные блоки настраиваются через onSpawnBlockStates и onRemoveBlockStates. В них хранятся изменения блоков для состояний ON_SPAWN и ON_REMOVE, описанных ниже.
Именно так вы можете заставлять боссов открывать или закрывать двери / зоны или даже изменять арену во время боя, если используете это с фазовыми боссами!
| Key | Values | Default |
|---|---|---|
onSpawnBlockStates | См. подробное объяснение | none |
| Key | Values | Default |
|---|---|---|
onRemoveBlockStates | См. подробное объяснение | none |
Подробное объяснение
Все блоки задаются относительно места появления. Убедитесь, что у вас есть окончательное место появления, прежде чем начинать задавать какие-либо блоки.
Редактор требует игрока с разрешением elitemobs.transitiveblocks и ровно одного размещённого экземпляра для выбранной конфигурации. Несколько экземпляров не поддерживаются; файл фазы может использовать место появления родительского босса. Сохраняются данные блоков, но не содержимое контейнеров, инвентари или другие данные блочных сущностей. Поворот босса по yaw не поворачивает записанные блоки.
Если вы уже создали большую область переходных блоков, а теперь вам нужно переместить босса, но вы не хотите переделывать переходные блоки, то вы можете использовать действие EliteScript Teleport, чтобы переместить босса в нужное место после его появления. Учтите, что вам придётся соответствующим образом скорректировать привязку (leash).
Из-за сложности задания блоков не рекомендуется делать это вручную. Вместо этого следует использовать следующие команды:
- /em transitiveBlocks register
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks edit
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks registerArea
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks editArea
<regional_boss_file.yml><ON_SPAWN/ON_REMOVE> - /em transitiveBlocks cancel
Давайте разберём это.
/em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
Начинает новый набор блоков для выбранного состояния. Повторный вызов фиксирует его, заменяя предыдущий список. Завершите или отмените текущий выбор перед переходом к другому файлу или состоянию: другой допустимый вызов регистрации или редактирования при активном выборе фиксирует текущий набор.
ON_SPAWN применяет блоки при появлении или возрождении. ON_REMOVE применяется при смерти, удалении командой с причиной KILL и переходе к следующей фазе до замены конфигурации. Тайм-аут, сброс фаз при полном восстановлении здоровья, перезагрузка и остановка сервера не применяют ON_REMOVE.
Правая кнопка мыши записывает текущие данные выбранного блока; левая записывает воздух в этой позиции. Эти клики отменяются и не строят или ломают блоки. Каждая позиция хранится один раз: клик по сохранённой позиции другой кнопкой убирает её из выбора. Клики вне мира босса отклоняются с сообщением. Повторите команду для сохранения.
/em transitiveBlocks edit <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
Если вы хотите изменить уже заданные блоки, можно использовать эту команду. Работает очень похоже на /em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>.
/em transitiveBlocks registerArea <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
Как и /em transitiveBlocks register <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>, это позволяет регистрировать блоки, но даёт возможность выбирать их, задавая два диаметрально противоположных угла (так же, как выбор региона в worldedit / worldguard), вместо выбора блоков по отдельности.
Выберите первый угол левой кнопкой мыши, противоположный — правой, затем повторите команду, чтобы сохранить блоки внутри выделения. Оба угла должны находиться в мире босса, и при сохранении вы должны стоять в этом мире. Иначе EliteMobs отклоняет сохранение с сообщением и оставляет выделение активным. Блоки из области заменяют любой блок, уже выбранный в той же позиции.
defaultTransitiveBlockLimiter в config.yml по умолчанию равен 500, но превышение вызывает только предупреждение: большой набор всё равно сохраняется. Используйте небольшие области. Применение загружает целевые чанки и меняет все блоки за один тик, что может вызвать задержки.
/em transitiveBlocks editArea <regional_boss_file.yml> <ON_SPAWN/ON_REMOVE>
Объединяет существующие записи с текущим выбранным участком. Требования к двум углам, миру и предупреждение о размере такие же, как для registerArea.
/em transitiveBlocks cancel
Отменяет только несохранённый выбор. Команда не откатывает реальное строительство или уже сохранённые изменения конфигурации.
Профессиональные советы по созданию хорошего, большого боя с региональным боссом
-
Действительно подумайте о том, как способности (powers) вашего пользовательского босса дополняют друг друга. Вы не хотите, чтобы ваш босс большую часть времени стоял на месте, потому что он что-то применяет, так как это может сделать бой действительно лёгким. Также вы не хотите, чтобы у босса были только дальние атаки и не было ближних способностей или наоборот, если только вы не создаёте что-то очень специфическое. Тестирование игрой важно.
-
Проверяйте потолок здоровья. Максимум определяется активным серверным значением
settings.attribute.maxHealth.max, обычно2048. При множителе10.0потолок достигается на уровне33. Дальнейшее повышение уровня меняет боевое масштабирование, но не добавляет здоровья. Учитывайте healthMultiplier при выборе уровня и множителя. -
Урон — не слишком много. EliteMobs уже чрезвычайно смертоносны по умолчанию, а способности обычно экспоненциально смертоноснее. Вместо того чтобы взвинчивать урон до потолка, рассмотрите использование способностей, чтобы босс бил сильнее.
-
Эксплойты повсюду. Особенно тщательно убедитесь, что рельеф нельзя использовать в свою пользу. Поместите босса в закрытую комнату, чтобы люди не пытались отстреливать его издалека. Способность неуязвимости к стрелам, вероятно, чрезвычайно важна для многих мировых боссов, поскольку мобы Minecraft не могут противостоять отстрелу за несколько чанков, поэтому, если вы хотите разрешить атаки из лука, убедитесь, что луки нельзя использовать как эксплойт.
-
Знайте плагин. Существует множество маленьких хитростей для победы над EliteMobs, например, как некоторые способности можно отразить щитами, тогда как другие следует отражать уклонением или даже временным бегством от босса. Чем лучше вы знаете, как работают способности и как им противостоять, тем лучше будут боссы, которых вы создаёте.
Полный пример мирового босса
Этот пример показывает основные настройки. Замените мир и координаты, убедитесь, что указанные способности и предмет включены. Записывайте блоки арены в игре: одиночные записи ниже только показывают формат.
isEnabled: true
entityType: ZOMBIE
name: "&cThe Zombie King"
level: 30
healthMultiplier: 10.0
damageMultiplier: 2.0
# World Boss specific settings
isRegionalBoss: true
isPersistent: true
# Spawn settings
spawnLocations:
- world,100,64,100,0,0
spawnCooldown: 60
# Combat boundaries
leashRadius: 30
timeout: 20
# Messages and announcements
spawnMessage: "&cThe Zombie King has risen!"
deathMessage: "&aThe Zombie King has been defeated by $players!"
escapeMessage: "&eThe Zombie King has escaped..."
announcementPriority: 2
# Arena modification
onSpawnBlockStates:
- 0,0,0/minecraft:barrier
onRemoveBlockStates:
- 0,0,0/minecraft:air
# Boss features
powers:
- zombie_friends.lua
- ground_pound.lua
uniqueLootList:
- filename=magmaguys_toothpick.yml:chance=1.0
Этот босс будет:
- Ставиться в очередь возрождения через 60 минут после смерти или тайм-аута и появляться при доступных мире и чанке
- Сбегать через 20 минут после появления или восстановления, если не побеждён
- Оповещать о появлении/смерти/побеге в чате и позволять игрокам отслеживать себя
- Восстанавливаться после повторной загрузки чанка
- Изменять блоки арены при появлении и смерти
- Выбрасывать уникальную добычу при поражении
При настройках по умолчанию уровень 30 и множитель 10.0 дают 1400 здоровья; потолок 2048 достигается на уровне 33. Базовое здоровье ограничивается до применения множителя, а итоговое — после него. Уменьшение множителя не возвращает рост здоровья от уровня, если базовое значение уже достигло потолка. См. healthMultiplier.