跳至主要內容

簡介

這些範例組合 EliteScript 動作來建立自訂 Boss 能力。你可以直接編輯 YAML,也可以使用 WebApp。

影片是過去對預期效果的示範,並非對目前實作的驗證。使用前請閱讀各範例的行為說明與限制。

將 eliteScript 區塊貼到自訂 Boss 檔案中。將 fc_boss.yml 等內容參照替換為已安裝的 Boss 定義。下方箭雨範例有已說明的投射物起點限制,目前不會產生原先描述的從上空落下的箭雨。

這些是 EliteScript 範例

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 度的 yaw 旋轉。初始方向是世界 +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