创建自定义增援
在 Boss 的 powers 列表中加入增援条目,即可在战斗中召唤其他自定义 Boss。
创建自定义 Boss 的步骤:
- 创建你的主自定义 Boss,由它来召唤你的自定义 Boss
- 创建一个用作增援的自定义 Boss。请记住,自定义 Boss 可以比原版怪物更强,但也可以更弱。
- 将正确的增援行添加到配置文件中
创建增援行
假设你有一个采用以下格式的自定义 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 文件原样不变。字段缺失、为空或重复的旧式字符串会被丢弃并给出警告。