简介
这些示例组合 EliteScript 动作来创建自定义 Boss 能力。你可以直接编辑 YAML,也可以使用网页应用。
视频是过去对预期效果的演示,并非对当前实现的验证。使用前请阅读各示例的行为说明和限制。
将 eliteScript 块粘贴到自定义 Boss 文件中。将 fc_boss.yml 等内容引用替换为已安装的 Boss 定义。下方 Arrow Rain 示例存在已说明的投射物起点限制,当前不会产生原先描述的从上空落下的箭雨。
EliteScript(.yml)仍然完全受支持,本页面中的每个示例都使用它。但它已不再是唯一的选择:能力也可以用 Lua 编写,而现在 EliteMobs 自带的几乎所有能力都使用 Lua。关于两种格式的对比,请参见 创建能力。
请使用 SLOWNESS、INSTANT_HEALTH 和 NAUSEA 等当前药水名称。解析器也接受 minecraft:slowness 这样的命名空间标识符;旧版 Bukkit 写法通过兼容回退处理。
以下时间均以游戏刻为单位:服务器正常运行速度下,20 游戏刻为 1 秒。各动作独立调度;wait 从该动作开始时计算,而不是从上一个动作结束时计算。重复动作不会额外等待一个间隔才开始,共执行 times 次。动作目标上的 track: false 会在等待前捕获其区域;仅在 Zone.Target 上设置它并不能固定所有动作。形状与缓存详情请参阅目标和区域。
coverage 对效果和召唤使用的区域位置进行采样,并非玩家百分比。区域的实体过滤器默认选择玩家,而 NEARBY_PLAYERS 搜索的是轴对齐长方体,不是球形半径。Cooldowns.local 和 global 都以游戏刻计;只要其中任意一个为正数,就会启用事件的自动冷却检查。通过 scripts 调用的辅助脚本会在调用动作执行时开始。参阅冷却。
能力示例
Slam Down
玩家伤害 Boss 时,Boss 会传送到该玩家位置上方 8 格。15 游戏刻后,PUSH 将向下速度排入下一游戏刻执行。第 20 游戏刻,两个独立动作对以 Boss 当前位置为基准、范围为 3 的附近玩家搜索框选中的玩家施加 60 游戏刻的缓慢 IV,并显示副标题“Stunned!”。副标题停留 40 游戏刻,另有各 10 游戏刻的淡入和淡出。
这是定时效果,不检测落地。障碍物、重力和传送结果都可能改变 Boss 在第 20 游戏刻的位置。缓慢不会阻止攻击,也不构成完整的眩晕;此示例没有单独的脚本伤害动作。
展开示例
eliteScript:
SlamDown:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: TELEPORT
FinalTarget:
targetType: DIRECT_TARGET
offset: 0,8,0
Target:
targetType: SELF
- action: PUSH
vValue: 0,-5,0
Target:
targetType: SELF
wait: 15
- action: POTION_EFFECT
potionEffectType: SLOWNESS
amplifier: 3
duration: 60
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
- action: TITLE_MESSAGE
subtitle: "Stunned!"
duration: 40
fadeIn: 10
fadeOut: 10
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
Cooldowns:
local: 180
global: 80
Push Away
此脚本在 Boss 周围绘制半径 4 的穹顶,同时启动粒子、重复推力和消息。修正后的示例由玩家伤害触发,计算从 Boss 指向该攻击者的方向,再加入向上偏移。所有选中的玩家都收到同一个向量;这是共同方向的推力,不会分别按每名玩家与 Boss 的相对位置向外推开。
PUSH 在每次动作后的下一游戏刻替换速度,每次动作执行只计算一次相对向量。其 ACTION_TARGET 位置是 Boss 的位置,因此与 SourceTarget: SELF 配对会产生长度为零的方向,而非预期推力。本例使用 DIRECT_TARGET。如果 Boss 与攻击者的位置重合,方向为零,只剩下 0,0.2,0 偏移。穹顶的完整实体检查使用球体包含判定,因此可见半球下方的玩家也可能被选中。
展开示例
eliteScript:
PushAway:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: DOME
radius: 4
borderRadius: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_BORDER
track: true
repeatEvery: 5
times: 4
- action: PUSH
Target:
targetType: ZONE_FULL
track: true
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 1.0
offset: 0,0.2,0
repeatEvery: 1
times: 20
- action: MESSAGE
sValue: "&cCool boss!: &fBE GONE!"
Target:
targetType: ZONE_FULL
repeatEvery: 10
times: 2
Cooldowns:
local: 140
global: 80
Arrow Rain
这个旧示例在造成伤害的玩家初始位置绘制半径 5、高度 1 的圆柱边界,并显示警告。箭矢动作捕获高出 10 格的第二个圆柱,等待 40 游戏刻,然后尝试以 10 游戏刻为间隔齐射四次。
对于存活的 Boss,SUMMON_ENTITY 配合 ARROW 会调用 Boss 的投射物发射器。因此,箭矢会按每个采样区域位置发射一次,但起点在 Boss,而非上空的采样点。向下速度仍然生效,不过离开图中的圆圈并不能可靠地躲避当前实现。旧视频展示的是预期箭雨;保留此 YAML 是为了解释限制,并不表示它是可正常从上空降下箭雨的作例。
展开示例
eliteScript:
MakeCircle:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
Actions:
- action: SPAWN_PARTICLE
Target:
targetType: ZONE_BORDER
track: false
coverage: 1.0
repeatEvery: 5
times: 8
particles:
- particle: FLAME
- action: TITLE_MESSAGE
Target:
targetType: DIRECT_TARGET
fadeOut: 10
duration: 20
fadeIn: 10
subtitle: Move out of the zone!
- action: RUN_SCRIPT
scripts:
- "ArrowRain"
Cooldowns:
local: 160
global: 80
ArrowRain:
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
offset: 0,10,0
Actions:
- action: SUMMON_ENTITY
wait: 40
sValue: ARROW
Target:
targetType: ZONE_FULL
track: false
vValue: 0,-1,0
repeatEvery: 10
times: 4
Fire Aura
Boss 伤害玩家时,此脚本在跟随 Boss 的半径 2、高度 3 的圆柱中启动粒子,并赋予 Boss 持续 120 游戏刻的临时标签 FireOn。粒子每隔 5 游戏刻执行一次,共 24 次,最后一次在第 115 游戏刻。
玩家在该标签存在期间伤害 Boss 时,SetOnFire 会把该直接攻击者的着火计时器设为 20 游戏刻。它的阻断条件检查 Boss 的标签,而不是攻击者是否站在圆柱内。这个辅助脚本没有冷却值,因此会跳过冷却检查,视觉脚本的全局冷却也不会阻止它。
展开示例
eliteScript:
Visual:
Events:
- PlayerDamagedByEliteMobEvent
Zone:
shape: CYLINDER
radius: 2
height: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: FLAME
Target:
targetType: ZONE_FULL
track: true
coverage: 1.0
repeatEvery: 5
times: 24
- action: TAG
tags:
- "FireOn"
duration: 120
Target:
targetType: SELF
Cooldowns:
local: 180
global: 80
SetOnFire:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 20
Target:
targetType: DIRECT_TARGET
Conditions:
Target:
targetType: SELF
conditionType: BLOCKING
hasTags:
- "FireOn"
Poison Lines
此脚本在 Boss 初始位置捕获两个互相垂直的长方体,形成加号。SET_MOB_AI 禁用普通生物 AI 40 游戏刻,并立即启动 PoisonLine2,不会等到 AI 恢复才运行辅助脚本。此动作不会禁用其他脚本。
每条带状区域以 5 游戏刻间隔发出八次云雾。第 40 游戏刻开始烟雾和中毒 V,两者均以 5 游戏刻间隔重复 12 次,直到第 95 游戏刻。每次中毒持续 50 游戏刻,所以效果可能在烟雾结束后仍然存在。动作级的 track: false 会在 Boss 恢复移动后继续固定两条区域。长方体的 y: 1 产生从原点方块 Y 到其上方半格的浅层实体碰撞带;粒子体积与实体包含范围并不相同。
展开示例
eliteScript:
PoisonLine1:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CUBOID
x: 20
y: 1
z: 2
Target:
targetType: SELF
track: false
Actions:
- action: SET_MOB_AI
bValue: false
duration: 40
Target:
targetType: SELF
scripts:
- "PoisonLine2"
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Cooldowns:
local: 200
global: 80
PoisonLine2:
Zone:
shape: CUBOID
x: 2
y: 1
z: 20
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Bounce
此脚本在 Boss 初始位置捕获半径 10、高度 2 的圆柱。粒子以 10 游戏刻间隔执行 20 次,向上推力以 1 游戏刻间隔执行 200 次,服务器正常速度下约为 10 秒。
每次推力在下一游戏刻把速度设为 0,0.4,0,也会替换水平速度。玩家在进出圆柱的垂直边界时可能弹跳:玩家的整个包围盒必须容纳于圆柱高度内。两个动作目标都固定,因此碰撞区域不会在粒子留在原地时单独跟随移动的 Boss。
展开示例
eliteScript:
Bounce:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 10
height: 2
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: EXPLOSION
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 0.2
- action: PUSH
vValue: 0,0.4,0
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
Cooldowns:
local: 220
global: 80
Summon
此脚本在造成伤害的玩家初始位置上方 6 格捕获半径 3、高度 1 的圆柱,并立即向该玩家显示副标题。召唤动作的 track: false 会在等待 40 游戏刻前捕获区域,因此警告期间的移动不会改变生成范围。
40 游戏刻后,coverage: 0.2 独立采样区域位置来生成增援,不保证固定数量,也不保证恰好使用五分之一的点。请将 fc_boss.yml 替换为有效且已安装的自定义 Boss 文件名。每次成功召唤都会设置 400 游戏刻的逃离超时。这些生成点位于空中,并不搜索安全地面;正常的 Boss 或遭遇移除也可能提前移除增援。
展开示例
eliteScript:
Summon:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 3
height: 1
Target:
targetType: DIRECT_TARGET
offset: 0,6,0
track: false
Actions:
- action: SUMMON_REINFORCEMENT
sValue: "fc_boss.yml"
duration: 400
Target:
targetType: ZONE_FULL
coverage: 0.2
track: false
wait: 40
- action: TITLE_MESSAGE
subtitle: "Friends! Help!!!"
duration: 30
fadeIn: 10
fadeOut: 10
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 333
global: 80
Potion Zones
玩家伤害会通过 onlyRunOneScript: true 等概率随机选择 PotionZoneBad 或 PotionZoneGood。
两个辅助脚本都会围绕 Boss 的范围 20 附近玩家搜索框选中的每名玩家,捕获半径 5、高度 2 的圆柱。圆柱留在各自初始位置,效果施加给执行时位于其中的玩家,包括之后进入的玩家。重叠圆柱形成一个合并选择集,因此一次辅助动作不会仅因多个圆柱重叠而对同一玩家重复施加相同效果。
有害辅助脚本发出四次云雾,然后在第 40 游戏刻启动大型烟雾和凋零 IV。后两项动作以 10 游戏刻间隔执行六次,直到第 90 游戏刻;每次凋零持续 80 游戏刻。有益辅助脚本交换粒子效果,并改为施加瞬间治疗 II。其 duration: 80 不会把瞬间效果变成持续再生。粒子的 coverage: 0.3 不会减少受影响玩家的比例。两者都会在延迟效果之前,立即向附近玩家发送聊天消息。
展开示例
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "PotionZoneBad"
- "PotionZoneGood"
onlyRunOneScript: true
Cooldowns:
local: 110
global: 80
PotionZoneBad:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: WITHER
amplifier: 3
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the burn!"
Target:
targetType: NEARBY_PLAYERS
range: 20
PotionZoneGood:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: INSTANT_HEALTH
amplifier: 1
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the... Wait, this is the wrong one."
Target:
targetType: NEARBY_PLAYERS
range: 20
Blind Waves
此脚本在 Boss 位置捕获两条水平射线线段。每条从 Z +5 延伸到 Z -5,再于 100 游戏刻内沿世界 X 轴平移至 +10 或 -10。这些偏移使用世界坐标轴,与 Boss 朝向无关。
两个 Z 端点决定线段的 10 格长度,每组最终 X 坐标决定移动方向。调整平移射线时,请同时保留 FinalTarget 和 FinalTarget2。
Y 偏移为零会把线段放在 Boss 初始脚部高度。改变两个端点的高度会让射线上下移动,并不会赋予它矩形墙的高度。默认 pointRadius 为 0.5,碰撞使用采样球体与玩家包围盒进行检测。因此能否跳过取决于地形和玩家完整的碰撞箱。ignoresSolidBlocks: true 让波穿过实心方块。
减小 animationDuration 会加快移动;如果效果也应随缩短的动画结束,还需调整动作的 times。最后一个动画帧会精确到达最终目标,该最终形状会保留至动作结束。
烟雾每隔 5 游戏刻执行一次,共 20 次;失明检查每游戏刻执行一次,共 100 次。每次接触施加 100 游戏刻失明,因此持续接触会刷新效果,而不是仅开始一次固定的五秒计时。动画区域即使设置动作级 track: false 也会继续移动,且无论 track 如何设置,每个动作都会在开始时缓存其动画形状。独立的粒子和药水动作各自持有捕获的动画形状。
展开示例
eliteScript:
Blind:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: 10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: 10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: RUN_SCRIPT
scripts:
- "Blind2"
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Cooldowns:
local: 200
global: 80
Blind2:
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: -10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: -10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Freeze Wall
此脚本在 Boss 初始脚部高度及上方 1 格、2 格处叠放三条旋转射线。射线有 pointRadius,没有矩形高度,因此脚本通过组合多条线段来形成类似墙面的效果。
每条线段长 6 格,在 200 游戏刻内完成正方向 360 度偏航旋转。初始方向是世界 +X,与 Boss 朝向无关。捕获的旋转中心不会跟随 Boss。完整线段从形状创建的那一刻起就已存在,早于第一次旋转。实心方块不会阻挡这些射线。
每个脚本以 10 游戏刻间隔发出 20 次粒子,并每游戏刻检查一次玩家接触,共 200 次。每次接触增加 100 冻结刻数。接触重叠射线可能在同一游戏刻多次增加。解冻与冻结伤害由 Minecraft 控制,因此这既不是固定五秒的视觉效果,也不是禁止移动。药水和冻结动作还遵守 EliteMobs 的实例效果策略。
展开示例
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "FreezeWall"
- "FreezeWall2"
- "FreezeWall3"
Cooldowns:
local: 300
global: 80
FreezeWall:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
Target2:
targetType: SELF
offset: 6,0,0
track: false
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall2:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,1,0
Target2:
targetType: SELF
track: false
offset: 6,1,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall3:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,2,0
Target2:
targetType: SELF
track: false
offset: 6,2,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200