跳到主要内容

创建自定义增援

在 Boss 的 powers 列表中加入增援条目,即可在战斗中召唤其他自定义 Boss。

创建自定义 Boss 的步骤:​

  1. 创建你的主自定义 Boss,由它来召唤你的自定义 Boss
  2. 创建一个用作增援的自定义 Boss。请记住,自定义 Boss 可以比原版怪物更强,但也可以更弱。
  3. 将正确的增援行添加到配置文件中

创建增援行​

假设你有一个采用以下格式的自定义 Boss:

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

现在增援已添加到 Boss 实体上。不过,正如你所见,这里有若干可以自定义的选项。下面我们来逐一介绍。

所有自定义增援选项​

提示:你也可以使用 EliteScript 来召唤增援,更多信息见此处。

summonType​

这是一个必填字段。它设定增援应在何时生成。

键值默认值
summonType特殊 [1]无(必填)
示例
summonType: ON_HIT

特殊 [1]​

键描述
ONCE每次符合条件的玩家攻击都尝试一批增援,直到概率判定成功。攻击要求见下文。
ON_HIT每次符合条件的玩家攻击都根据 chance 尝试一批增援。
ON_COMBAT_ENTER当 Boss 进入战斗时生成增援 (1)
ON_COMBAT_ENTER_PLACE_CRYSTAL特殊:这专门用于在 Boss 进入战斗时为龙战放置末影水晶 (1)
ON_DEATH当 Boss 死亡时生成增援
GLOBAL在 Boss 的生成生命周期内,立即并每隔 10 秒安排 amount 个增援,无需进入战斗。每个增援用 customSpawn 选择 Boss 世界中的玩家和位置。一旦记录的全局数量达到该世界玩家数的 30 倍,批次中的每个召唤都会被跳过,因此数量不会超过这个上限。必须设置 customSpawn。

(1) 受到玩家伤害、对玩家造成伤害或获取玩家目标都可能触发进入战斗。退出后再次进入战斗可再次触发这类增援;它们不是 ONCE 条目。

ONCE 记录当前解析出的条目状态,不覆盖整个多阶段战斗。重新解析技能的阶段切换会创建新条目。一批增援进入生成尝试后,即使生成被阻止,也可能消耗 ONCE;它不保证出现活着的增援。


filename​

此必填字段指定要生成的增援。summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL 是例外,不要求文件,因为末影水晶不是精英怪。

键值默认值
filename文件名无
示例
filename: test_boss.yml

重要: filename 必须引用 custombosses 中已有的 Boss 文件。无效引用会阻止增援生成,并在控制台输出警告。缺少 filename 的条目(水晶条目除外)、chance 不是有限数值的条目,或 location 不是三个有限数值的条目,会在每次创建该 Boss 时被丢弃,并给出一条指明 Boss 文件的 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 判定失败后仍可在下次符合条件的攻击中重试。

键值默认值
chance双精度小数1.0
示例
chance: 0.5

表示有 50% 的几率生成自定义增援。

chance 应使用 0.0 到 1.0 之间的有限数值。对于 ON_HIT 和尚未消耗的 ONCE,玩家伤害事件必须未被取消,Boss 必须有存活实体且 AI 活跃,技能未被抑制,事件伤害必须至少为 3。每次符合条件的攻击独立判定一次,结果作用于整批增援。

受击增援与冷却

ON_HIT 和 ONCE 跳过技能及 Boss 全局冷却,包括 EliteScript 的 Cooldowns.global 和 Lua 的 cooldowns.set_global(...)。上面的攻击要求仍然适用。请通过 chance 和 amount 调整重复召唤。

诊断一个从不生成的增援

开启 /em debug 并攻击 Boss。[CustomSummon] 消息会显示攻击被拒、概率失败、计算位置以及普通生成是否产生了存活实体。区域型增援会安排稍后初始化。技能抑制目前只显示通用的条件拒绝消息,不会单独说明抑制原因。关闭 debug 后这些消息也会关闭。


location​

location: x,y,z 是一个可选配置字段,允许管理员将增援的位置偏移若干个方块。以下是关于此选项你需要了解的关键概念:

偏移位置是相对的。 这意味着 location: 0,10,0 会在 Boss 正上方恰好 10 个方块处生成 Boss,而不是在世界坐标 0,10,0 处。

对于区域型 Boss,相对位置有所不同。 区域型 Boss 总是以其生成点作为相对位置的原点,这意味着如果你知道 Boss 的生成点在哪里并数好方块,就可以让增援 Boss 在特定位置生成。世界缚束者(Binder of Worlds)巢穴正是依靠这一点,无论龙 Boss 在哪里,都能在极其精确的方块位置生成挑战塔的 Boss。

如果你测量距离时出错,Boss 会生成在方块内部。

键值默认值
location字符串无
示例
location: 0,10,0

对于非区域型自定义 Boss,无论它在哪里,都会在 Boss 正上方恰好 10 个方块处生成增援。

对于区域型自定义 Boss,无论 Boss 在哪里,都会在区域型 Boss 的生成点正上方恰好 10 个方块处生成增援。

重要提示:这专门是 summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL 的必填字段!


lightningRod​

仅用于 summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL。只要 Boss 和水晶有效,就立即并每隔五秒启动一次攻击。每次攻击显示约三秒警告粒子,然后生成闪电和向下飞行的爆炸火球。目标使用 -15 到 14 的 X/Z 偏移,保持水晶高度,不会投影到地面。水晶会被标记为精英水晶并作为增援跟踪,不继承生物战斗目标。

它不能与其他自定义增援一起使用,因为那些增援应通过技能来实现此类能力。

键值默认值
lightningRod布尔值false
示例
lightningRod: false

inheritAggro​

这是一个可选配置字段,使自定义增援继承 Boss 的威胁等级。

复制召唤者的威胁表,让增援能选择其威胁最高的目标。威胁也包含治疗和嘲讽,并非单纯的伤害排名。伤害记录和奖励贡献不会复制。

键值默认值
inheritAggro布尔值false
示例
inheritAggro: false

amount​

设置成功批次中的自定义 Boss 数量。请使用正整数。水晶类型始终每条放置一个水晶,忽略 amount。

键值默认值
amount整数1
示例
amount: 1

spawnNearby​

这是一个可选配置字段,设定自定义增援是否应在附近生成,而不是在 Boss 正上方或某个特定相对位置生成。

围绕计算位置选择 -15 至 14 的整数 X/Z 偏移,最多尝试 30 次,起点包含 location 偏移。每次从该 Y 向上搜索,直到世界建筑高度上限以下两格为止,寻找不可穿过的方块上方两格空气。全部失败后使用原计算位置。此辅助搜索不使用 Custom Spawn 的玩家距离、光照或世界过滤,但普通 Boss 生成保护仍然适用。

键值默认值
spawnNearby布尔值false
示例
spawnNearby: false

inheritLevel​

这是一个可选配置字段,设定自定义增援是否应继承它所增援的自定义 Boss 的等级。

键值默认值
inheritLevel布尔值false
示例
inheritLevel: false

customSpawn​

这是一个仅用于全局增援的配置字段。它使用自定义生成点的设置来设定增援能够在何处生成。

使用自定义生成点中的地表、光照、高度和位置检查,包括其中的生物群系过滤以及该页所述的时间等待行为。全局增援直接从召唤者生成世界中的所有玩家里选择,跳过普通流程的数据加载、ValidWorlds.yml、validWorlds、validWorldEnvironments、实例和怪物生成游戏规则检查。全局流程使用 filename、amount 和 customSpawn,不应用 chance、location、spawnNearby、inheritAggro 或 inheritLevel。

键值默认值
customSpawn文件名无
示例
customSpawn: normal_surface_spawn.yml

difficultyID​

将增援限制在特定的实例地下城难度。接受名称、数字 ID 或它们的列表;参见难度匹配。

键值默认值
difficultyID字符串 或字符串列表无

若 Boss 关联了有活动难度的实例地下城,且过滤器不匹配,整条增援会在解析前被丢弃。显式为空或无效的过滤器不匹配任何难度。省略该键即可不限制条目。在未关联地下城的实例或实例之外,此过滤器不起作用。

- 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

它实现了以下功能:

  • 创建一个自定义增援
  • 该自定义增援会在自定义 Boss 进入战斗时生成(summonType: ON_COMBAT_ENTER)
  • 召唤的自定义增援是来自 test_boss.yml 的那个(filename: test_boss.yml)
  • 增援使用 spawnNearby 中说明的地面搜索,本例以 Boss 为中心(spawnNearby: true)。
  • 增援复制召唤者的威胁表用于选择目标(inheritAggro: true)。
  • 无论 test_boss.yml 中如何设置,该自定义增援的等级都将与它所增援的自定义 Boss 相同(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

它实现了以下功能:

  • 创建一个自定义增援
  • 该自定义增援会在 Boss 死亡时生成(summonType: ON_DEATH)
  • 召唤的自定义增援是来自 revenge_minion.yml 的那个(filename: revenge_minion.yml)
  • 将生成三个增援(amount: 3)
  • 增援以死亡位置为中心搜索附近地面(spawnNearby: true)。

现在将其应用到自定义 Boss 上:

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 会在内存中转换它们,并保持 Boss 文件原样不变。字段缺失、为空或重复的旧式字符串会被丢弃并给出警告。