精英腳本事件
EliteScript 是基於事件的。這意味著它們在特定事件觸發時啟動。以下是目前有效的事件:
| 事件 | 詳情 | 直接目標 [?] |
|---|---|---|
| EliteMobDamagedByEliteMobEvent | 精英被另一個精英傷害 | 攻擊方精英的生物實體 |
| EliteMobDamagedByPlayerEvent | 精英被玩家傷害 | 造成傷害的玩家 |
| EliteMobDamagedEvent | 精英被任何東西傷害 | ❌ |
| EliteMobDeathEvent | 精英死亡 | ❌ |
| EliteMobEnterCombatEvent | 精英與玩家進入戰鬥 | 交戰中的玩家 |
| EliteMobExitCombatEvent | 精英退出戰鬥 | ❌ |
| EliteMobHealEvent | 精英治癒(包括完全治癒) | ❌ |
| EliteMobSpawnEvent | 精英生成 | ❌ |
| EliteMobTargetPlayerEvent | 精英鎖定玩家 | 被鎖定的玩家 |
| PlayerDamagedByEliteMobEvent | 精英對玩家造成傷害 | 受傷的玩家 |
| ElitePhaseSwitchEvent | Boss因階段切換而生成 | ❌ |
| ZoneEnterEvent (ScriptZoneEnterEvent) | 實體進入區域。需要設定區域! | 進入區域的實體 |
| ZoneLeaveEvent (ScriptZoneLeaveEvent) | 實體離開區域。需要設定區域! | 離開區域的實體 |
「精英」指被 EliteMobs 作為精英追蹤的實體,包括 Boss 與精英增援。 注意:ZoneEnterEvent 和 ZoneLeaveEvent 的計算開銷較大,請謹慎使用!
Direct Target 由腳本目標使用,更多資訊請參見此處。
YAML 中使用 ZoneEnterEvent 與 ZoneLeaveEvent。括號中的 ScriptZoneEnterEvent 與 ScriptZoneLeaveEvent 是底層 Java 事件名稱,不是可用的 YAML 別名。取消可取消的事件會停止該事件分派順序中的後續腳本與 Lua 技能,但不會停止已在執行的腳本中剩餘的動作。區域進入與離開事件本身不可取消。
EliteMobDamagedEvent 涵蓋任意來源的傷害;EliteMobDamagedByPlayerEvent 與 EliteMobDamagedByEliteMobEvent 涵蓋各自的特定來源。 它們分別分派,並非互斥選項。同時列出通用與特定傷害事件時,只要冷卻允許,一次攻擊可能執行同一個腳本多次。通用監聽器執行前已被取消的傷害不會觸發它。
注意:事件名稱是逐字元精確比對的。 elitemobdeathevent 或 ELITEMOBDEATHEVENT 會被拒絕並發出主控台警告;只有 EliteMobDeathEvent 可用。腳本層級的區段名稱同樣區分大小寫:Events、Actions、Zone、Conditions 與 Cooldowns 必須完全依此拼寫。巢狀在某個動作之下的 Conditions 區塊則不分大小寫皆可讀取。這些區段內部的一切(targetType、radius、borderRadius、isAlive、Target 等)都不區分大小寫,而每個列舉值都是慣例上大小寫精確的 UPPER_SNAKE_CASE 常數。
on_zone_enter / on_zone_leave在此列出 ZoneEnterEvent 或 ZoneLeaveEvent,正是啟動該 Boss 上每 tick 區域監聽器的方式。該監聽器是唯一會觸發同一個 Boss 上 Lua 技能頂層 on_zone_enter / on_zone_leave 鉤子的東西。Lua 技能自己的 context.zones:watch_zone(...) 並不會觸發它們。
ZoneEnterEvent 與 ZoneLeaveEvent 在實體進入或離開腳本所產生區域形狀的聯集時觸發動作。其 DIRECT_TARGET 是進入或離開的實體。掃描器本身沒有直接目標,因此不要用 DIRECT_TARGET 定義區域。固定位置與 SELF / SELF_SPAWN 是簡單的區域原點。NEARBY_PLAYERS 也能在沒有直接目標時解析原點,但區域會跟隨選中的玩家移動,進入與離開表示實體相對於這片組合移動區域的位置變化。
區域監聽器每 tick 掃描一次,即使腳本冷卻阻止動作啟動也一樣。冷卻減少的是動作執行次數,而不是偵測區域成員的成本。剛啟動的監聽器會將首次掃描時已在區域內的實體視為進入。
區域事件只識別 Boss 與穿過邊界的實體,不識別來源腳本或區域。一個腳本的監聽器偵測到的變化會分派給該 Boss 上所有符合的腳本與 Lua 技能。因此,獨立的多個監聽器可能導致重複或跨區域啟動。區域的 filter 控制掃描哪些生物實體,預設是 PLAYER。
每個腳本使用一個 Events 區段,可依需求列出多個支援的觸發器。不含事件的腳本不會自動由事件觸發,但仍可被其他腳本呼叫:
範例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
此腳本會在精英被玩家攻擊或鎖定玩家時使其跳躍。