跳到主要内容

创建 Boss 阶段

Boss 阶段是自定义 Boss 的一个子机制。这些阶段背后的系统极其灵活强大,因此需要专门的篇幅来讲解,以确保你能充分利用这一功能。

Boss 阶段如何运作?

可以使用以下配置格式为 EliteMobs 中的任何自定义 Boss 添加 Boss 阶段:

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

注意:你最初生成的 Boss(也就是包含列出所有其他阶段的 phases: 条目的那个)是第 1 阶段的 Boss。第 1 阶段的 Boss 文件不应在它自己的 phases: 条目中列出自身。

这一机制背后的基本意图是让管理员能够在战斗过程中改变自定义 Boss 的属性。通过使用上面的配置格式,你可以在各阶段之间完全更换配置文件,意味着你可以改变 99.99% 的属性——比如技能、伤害倍率、生命值倍率、实体类型、伪装、所穿盔甲……

为了实现这一点,EliteMobs 会在战斗期间删除你的 Boss,并立即用下一阶段的版本将其替换。这一过程是瞬时的,因此往往相当无缝——除非你刻意想做得很炫。Boss 在转换后会获得 1 秒的战斗宽限期,以确保视觉效果流畅。

示例

以这个示例阶段 Boss 为例:

文件:phase_1_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: STRAY
powers:
- attack_gravity.yml
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.yml
- arrow_fireworks.yml

文件:phase_3_boss.yml

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

这就构成了一个有效的阶段 Boss。如果你生成 phase_1_boss.yml,它会生成一个带有上面所列属性的流浪者(Stray)。在被打到生命值 60% 时,它会立即在同一位置被替换成 phase_2_boss.yml 中所设定的自定义 Boss,因为配置文件中写明了 - phase_2_boss.yml:0.60phase_2_boss.yml 是那个自定义 Boss 的文件名,0.60 即 60% 生命值)。请注意,第 2 阶段的 Boss 会以 60% 的生命值生成,因为那正是切换到该阶段的时刻。 该 Boss 将拥有 phase_2_boss.yml 文件中所列的技能。一旦第 2 阶段的 Boss 被打到生命值 30%,它就会生成为第 3 阶段所设定的 Boss。请注意,第 3 阶段的技能与之前的技能毫不相关——你可以在各阶段之间完全更换技能,就像几乎所有其他属性一样。

进阶

继承的机制

以下是一些在各阶段之间不会改变的内容列表:

  • 链条中的第一个阶段 Boss 决定了 Boss 将经历哪些阶段,意味着你不应为该阶段中的其他 Boss 添加 phases 条目。

  • 威胁表 / 伤害表保持不变,意味着战利品分配和高级仇恨系统不受阶段切换的影响

  • 阶段切换基于已损失生命值的百分比,该百分比会在各阶段之间保留。这意味着如果你的 Boss 被设置为在 50% 生命值时进入第 2 阶段,那么用来替换第 1 阶段 Boss 的那个 Boss 仍会处于 50% 生命值。这也意味着每个阶段都可以拥有完全不同的生命值总量而不会引发问题。

  • 如果阶段 Boss 通过默认的脱战 Boss 回血系统被治疗回满血,它们会恢复到第 1 阶段

  • 同时也是区域 Boss 的阶段 Boss 在所有阶段之间共享相同的牵引半径和超时机制,并会在重生计时器结束后以第 1 阶段 Boss 的形态重生。重生冷却和其他区域 Boss 设置始终取自第 1 阶段 Boss 的配置。

阶段专属生成位置

默认情况下,Boss 在阶段之间转换时会停留在其当前位置。不过,你可以使用 phaseSpawnLocation 设置让 Boss 在进入某个阶段时传送到特定位置:

文件:phase_2_boss.yml

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

你也可以在保持 Boss 处于同一世界的情况下将其传送:

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

这对于打造戏剧性的阶段转换很有用,让 Boss 传送到不同的竞技场或位置。

警告

以下是一些运作方式可能初看违反直觉的机制列表:

  • 如果阶段 Boss 在任何阶段被击杀,它将掉落该阶段的战利品。这意味着如果有人设法过快地击杀某个阶段 Boss(一击秒杀),它实际上会死亡并掉落为该 Boss 文件所配置的战利品,而这未必是最终阶段。你可以通过将该阶段 Boss 的所有 Boss 文件设置为相同的战利品表来解决这个问题,或者确保你的阶段 Boss 拥有足够多的 HP,多到根本不可能在寥寥几下内被击杀。或者,你也可以为能够跳过阶段的玩家设置特殊的战利品表。

  • 由于阶段 Boss 实际上会在战斗期间导致自定义 Boss 生成,它们在生成时会执行完整的生成流程。因此,在涉及生成消息和生成时运行的命令时要小心。此外,阶段 Boss 在切换阶段时不会死亡,它们只是被替换成了别的东西。这意味着死亡时运行的命令只会在最后一个阶段 Boss 身上运行,或者在玩家通过造成足够伤害设法跳过某个阶段时运行。生成时运行的命令可用于挂钩到阶段切换。注意: 当 Boss 因回血至满而重置到第 1 阶段时,不会发送生成消息。但是,在战斗期间转换到第 2、第 3 阶段等时,以及区域 Boss 在冷却后重生时, 发送生成消息。

  • 阶段 Boss 在阶段之间可以变为有坐骑或不再有坐骑。如果阶段 Boss 在坐骑死亡前就被击杀,坐骑会延续到下一阶段。如果 Boss 回血至满,坐骑会被删除,Boss 变为无坐骑状态,除非它被配置为在第 1 阶段骑乘某个实体。

  • 由于在阶段之间会生成新的自定义 Boss,因此一次性生成机制会在阶段之间以及完全回血时重置。

技巧与窍门

  • 你可以利用装备和实体类型可以在整个战斗过程中改变这一点,让 Boss 在战斗中显得越来越(或越来越不)危险

  • 虽然可行,但除非有特定的设计目标,否则阶段 Boss 的技能最好不要在各阶段之间变化得太过剧烈,因为玩家更可能享受一种在整场战斗中感觉自然的进程。

  • 你可以使用 onSpawn 命令在阶段之间运行命令

  • 你可以使用 song 配置选项为每个阶段设置不同的音乐。当 Boss 进入新阶段时,音乐会自动切换。

  • 阶段可用于让 Boss 在近战与远程模式之间相互切换

  • 阶段 Boss 的设计初衷是成为拥有大量 HP 的强力 Boss。它们通常最适合作为地下城的最终 Boss 遭遇战,或作为大型世界 Boss。

  • 在设计遭遇战时,请记住增援怪物有可能不会在各阶段之间被玩家击杀。

  • Boss 可以拥有任意数量的阶段,但阶段越多,它们就需要越多的生命值才能让每个阶段都有意义。

API 集成

面向插件开发者:当 Boss 在各阶段之间转换时,EliteMobs 会触发 ElitePhaseSwitchEvent 事件。这个事件可用于在阶段转换期间创建自定义行为或效果:

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