Создание пользовательских подкреплений
Добавьте записи подкреплений в список powers босса, чтобы призывать других пользовательских боссов во время боя.
Шаги для создания пользовательского босса:
- Создайте основного пользовательского босса, который будет призывать вашего пользовательского босса
- Создайте пользовательского босса для подкреплений. Помните, что пользовательские боссы могут быть сильнее ванильных мобов, но также могут быть и слабее.
- Добавьте правильную строку подкрепления в конфигурационный файл
Создание строки подкрепления
Допустим, у вас есть пользовательский босс в таком формате:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
И вы хотите добавить к нему подкрепления. Вот как может выглядеть одно такое подкрепление:
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
А чтобы оно стало рабочим, добавьте его в список powers:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
Теперь подкрепление добавлено к сущности босса. Однако, как видите, здесь есть несколько параметров, которые можно настроить. Давайте их разберём.
Все параметры пользовательских подкреплений
Совет: вы также можете использовать EliteScript для призыва подкреплений, подробнее об этом здесь.
summonType
Это обязательное поле. Оно задаёт, когда должно появляться подкрепление.
| Key | Values | Default |
|---|---|---|
summonType | Special [1] | none (обязательное) |
Пример
summonType: ON_HIT
Special [1]
| Key | Description |
|---|---|
ONCE | Пытается призвать группу при подходящих ударах игрока до успешной проверки вероятности. Условия удара описаны ниже. |
ON_HIT | Пытается призвать группу при каждом подходящем ударе игрока с учётом chance. |
ON_COMBAT_ENTER | Создаёт подкрепление, когда босс входит в бой (1) |
ON_COMBAT_ENTER_PLACE_CRYSTAL | Особый: предназначен специально для размещения кристаллов Энда в боях с драконом, когда босс входит в бой (1) |
ON_DEATH | Создаёт подкрепление, когда босс умирает |
GLOBAL | Планирует amount подкреплений сразу и каждые 10 секунд, пока активен жизненный цикл спавна босса; бой не требуется. Каждое подкрепление использует customSpawn для выбора игрока и места в мире босса. Каждый призыв в группе пропускается, как только отслеживаемое глобальное количество достигает числа игроков этого мира, умноженного на 30, поэтому количество не превышает этот предел. Требуется customSpawn. |
(1) Вход в бой может происходить при получении урона от игрока, нанесении урона игроку или выборе игрока целью. После выхода и повторного входа в бой такие подкрепления могут сработать снова; это не записи ONCE.
ONCE хранит состояние текущей разобранной записи, а не всего многофазного боя. Переход фазы с повторным разбором способностей создаёт новые записи. Если группа дошла до попытки спавна, блокировка спавна всё равно может израсходовать ONCE. Появление живого подкрепления не гарантируется.
filename
Это обязательное поле, поскольку оно задаёт, какое подкрепление должно появиться. Единственное исключение, когда это поле не обязательно, — использование параметра summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL, так как кристаллы Энда не являются элитными мобами.
| Key | Values | Default |
|---|---|---|
filename | Filename | none |
Пример
filename: test_boss.yml
Важно: filename должен ссылаться на существующий файл босса в custombosses. Неверная ссылка препятствует появлению подкрепления и вызывает предупреждение в консоли. Запись без filename (кроме записи кристалла), с chance, не являющимся конечным числом, или с location, не состоящим из трёх конечных чисел, отбрасывается при каждом создании босса с предупреждением Invalid reinforcement, в котором указан файл босса.
Минимальная работоспособность
summonType: SUMMON_TYPE и filename: filename.yml сами по себе достаточны для создания пользовательского подкрепления. Следующий пример это демонстрирует.
Примечание: ключи не чувствительны к регистру: работают и summonType, и SUMMONTYPE. Значения перечислений вроде ON_HIT требуют точного написания заглавными буквами, как показано выше. Имена файлов должны совпадать с определениями, на которые ссылаются.
Пример
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: binder_of_worlds_phase_1_parkour_reinforcement.yml
Однако, если вы хотите или нуждаетесь в чём-то более сложном, читайте дальше ниже, чтобы узнать, что ещё можно сделать с этими параметрами.
chance
Необязательное поле задаёт одну проверку вероятности для всей группы. Применяется к ONCE, ON_HIT, ON_COMBAT_ENTER и ON_DEATH, но не к GLOBAL или ON_COMBAT_ENTER_PLACE_CRYSTAL. Неудачная проверка ONCE позволяет повторить попытку при следующем подходящем ударе.
| Key | Values | Default |
|---|---|---|
chance | Double | 1.0 |
Пример
chance: 0.5
Представляет 50% шанс появления пользовательского подкрепления.
Используйте конечное значение chance от 0.0 до 1.0. Для ON_HIT и неизрасходованного ONCE событие урона игрока не должно быть отменено, босс должен иметь живую сущность с активным ИИ, способности не должны быть подавлены, а урон события должен быть не менее 3. Каждый подходящий удар независимо проверяет вероятность один раз для всей группы.
ON_HIT и ONCE обходят перезарядки способности и босса, в том числе запущенные через EliteScript Cooldowns.global или Lua cooldowns.set_global(...). Условия удара выше остаются обязательными. Настраивайте повторные призывы через chance и amount.
Включите /em debug и ударьте босса. Сообщения [CustomSummon] показывают отклонённые удары, неудачные проверки вероятности, рассчитанные места и наличие живой сущности после обычного спавна. Региональное подкрепление ставится в очередь на последующую инициализацию. Подавление способностей сейчас выдаёт общее сообщение об отклонении, без отдельного объяснения подавления. При выключенном debug эти сообщения отключены.
location
location: x,y,z — это необязательное поле конфигурации, которое позволяет администраторам смещать местоположение подкрепления на некоторое количество блоков. Вот ключевые понятия, которые нужно знать об этом параметре:
Смещение местоположения является относительным. Это означает, что location: 0,10,0 создаст босса ровно на 10 блоков выше босса, а не на мировых координатах 0,10,0.
Относительное местоположение работает иначе для региональных боссов. Региональные боссы всегда используют свою точку появления в качестве начала отсчёта для относительного местоположения, а значит, если вы знаете, где находится точка появления босса, и посчитаете блоки, вы сможете заставить боссов-подкреплений появляться в определённых местах. Логово Binder of Worlds полагается на это, чтобы создавать боссов башни испытаний в крайне точных позициях блоков, независимо от того, где находится дракон-босс.
Боссы будут появляться внутри блоков, если вы ошибётесь в измерении расстояний.
| Key | Values | Default |
|---|---|---|
location | String | none |
Пример
location: 0,10,0
Для нерегионального пользовательского босса создаст подкрепление ровно на 10 блоков выше босса, где бы он ни находился.
Для регионального пользовательского босса создаст подкрепление ровно на 10 блоков выше точки появления регионального босса, где бы босс ни находился.
Важное примечание: это обязательное поле именно для summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL!
lightningRod
Используется только с summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL. Пока босс и кристалл действительны, атака начинается сразу и каждые пять секунд. Каждая атака показывает предупреждающие частицы около трёх секунд, затем создаёт молнию и взрывающийся огненный шар, летящий вниз. Цель имеет смещения X/Z от -15 до 14 на высоте кристалла и не проецируется на землю. Кристалл отмечается как элитный и отслеживается как подкрепление; боевую цель моба он не наследует.
Его нельзя использовать с другими пользовательскими подкреплениями, так как те должны полагаться на powers для подобных способностей.
| Key | Values | Default |
|---|---|---|
lightningRod | Boolean | false |
Пример
lightningRod: false
inheritAggro
Это необязательное поле конфигурации, которое заставляет пользовательские подкрепления наследовать уровни угрозы (aggro) босса.
Копирует таблицу угрозы призывателя, чтобы подкрепления могли выбрать его цель с наибольшей угрозой. Угроза учитывает также лечение и провокации, а не только урон. Урон и вклад в получение наград не копируются.
| Key | Values | Default |
|---|---|---|
inheritAggro | Boolean | false |
Пример
inheritAggro: false
amount
Задаёт число пользовательских боссов в успешно выбранной группе. Используйте положительное целое число. Кристальный тип всегда размещает один кристалл на запись и игнорирует amount.
| Key | Values | Default |
|---|---|---|
amount | Integer | 1 |
Пример
amount: 1
spawnNearby
Это необязательное поле конфигурации, которое задаёт, должно ли пользовательское подкрепление появляться поблизости, а не прямо на боссе или в определённом относительном местоположении.
Проверяет до 30 мест с целочисленными смещениями X/Z от -15 до 14 вокруг рассчитанной точки, включая смещение location. Каждая попытка ищет вверх от этого Y, останавливаясь за два блока до предела высоты мира, два блока воздуха над непроходимым блоком. Если все попытки неудачны, используется исходная рассчитанная точка. Этот поиск не применяет фильтры расстояния до игроков, света или мира из Custom Spawn; обычная защита спавна босса продолжает действовать.
| Key | Values | Default |
|---|---|---|
spawnNearby | Boolean | false |
Пример
spawnNearby: false
inheritLevel
Это необязательное поле конфигурации, которое задаёт, должно ли пользовательское подкрепление наследовать уровень пользовательского босса, которого оно усиливает.
| Key | Values | Default |
|---|---|---|
inheritLevel | Boolean | false |
Пример
inheritLevel: false
customSpawn
Это поле конфигурации, которое используется только для глобальных подкреплений. Оно использует настройки пользовательского появления, чтобы задать, где смогут появляться подкрепления.
Используйте проверки поверхности, света, высоты и места из пользовательских спавнов, включая фильтр биомов и описанное там ожидание подходящего времени. Глобальные подкрепления выбирают напрямую из всех игроков в мире спавна призывателя. Они обходят обычные проверки загруженных данных, ValidWorlds.yml, validWorlds, validWorldEnvironments, инстанса и игрового правила спавна мобов. Глобальный путь использует filename, amount и customSpawn, но не применяет chance, location, spawnNearby, inheritAggro или inheritLevel.
| Key | Values | Default |
|---|---|---|
customSpawn | Filename | none |
Пример
customSpawn: normal_surface_spawn.yml
difficultyID
Ограничивает подкрепление сложностями инстансового подземелья. Принимает имя, числовой ID или их список; см. сопоставление сложностей.
| Key | Values | Default |
|---|---|---|
difficultyID | String или список строк | none |
Если босс связан с инстансовым подземельем с активной сложностью и фильтр не совпадает, вся запись отбрасывается до разбора. Явно пустой или неверный фильтр не совпадает ни с одной сложностью. Опустите ключ, чтобы не ограничивать запись. Вне инстанса, связанного с подземельем, этот фильтр не действует.
Пример
- summonType: ON_COMBAT_ENTER
filename: elite_add.yml
difficultyID:
- hard
- mythic
Собираем большое подкрепление
Давайте создадим пример подкрепления, используя большинство предыдущих полей:
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
spawnNearby: true
inheritAggro: true
inheritLevel: true
Это делает следующее:
- Создаёт пользовательское подкрепление
- Пользовательское подкрепление появится, когда пользовательский босс войдёт в бой (
summonType: ON_COMBAT_ENTER) - Призываемое пользовательское подкрепление будет тем, что задано в
test_boss.yml(filename: test_boss.yml) - Подкрепление использует описанный в
spawnNearbyпоиск земли, в этом примере вокруг босса (spawnNearby: true). - Подкрепление копирует таблицу угрозы призывателя для выбора цели (
inheritAggro: true). - Независимо от настройки в
test_boss.yml, пользовательское подкрепление будет иметь тот же уровень, что и пользовательский босс, которого оно усиливает (inheritLevel: true)
- summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL
location: -80,10,0
lightningRod: true
Это делает следующее:
- Создаёт пользовательское подкрепление
- Пользовательским подкреплением будет кристалл Энда, который размещается, когда начинается бой (
summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL) - Кристалл регулярно создаёт отложенные атаки молнией и огненным шаром с близкими смещениями X/Z (
lightningRod: true).
# Example: Boss that spawns revenge minions on death
- summonType: ON_DEATH
filename: revenge_minion.yml
amount: 3
spawnNearby: true
Это делает следующее:
- Создаёт пользовательское подкрепление
- Пользовательское подкрепление появится, когда босс умрёт (
summonType: ON_DEATH) - Призываемое пользовательское подкрепление будет тем, что задано в
revenge_minion.yml(filename: revenge_minion.yml) - Появятся три подкрепления (
amount: 3) - Подкрепления используют поиск земли вокруг места смерти (
spawnNearby: true).
Теперь применим это к пользовательскому боссу:
isEnabled: true
entityType: ENDER_DRAGON
name: $eventBossLevel &eBinder of Worlds
level: 200
powers:
- ender_dragon_arrow_bombardment.lua
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
spawnNearby: true
inheritAggro: true
inheritLevel: true
- summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL
location: -80,10,0
lightningRod: true
И готово! Вот ещё несколько советов:
- Поля можно задавать в любом порядке, хотя рекомендуется всегда указывать
summonTypeпервым! - Для нового контента используйте показанные здесь записи YAML, а не устаревшие строковые форматы
summon:илиsummonable:. Такие строки всё ещё загружаются: EliteMobs преобразует их в памяти и оставляет файл босса без изменений. Устаревшая строка с отсутствующими, пустыми или повторяющимися полями отбрасывается с предупреждением.