跳至主要內容

精英腳本事件

EliteScript 是基於事件的。這意味著它們在特定事件觸發時啟動。以下是目前有效的事件:

事件詳情直接目標 [?]
EliteMobDamagedByEliteMobEvent精英被另一個精英傷害攻擊方精英的生物實體
EliteMobDamagedByPlayerEvent精英被玩家傷害造成傷害的玩家
EliteMobDamagedEvent精英被任何東西傷害❌
EliteMobDeathEvent精英死亡❌
EliteMobEnterCombatEvent精英與玩家進入戰鬥交戰中的玩家
EliteMobExitCombatEvent精英退出戰鬥❌
EliteMobHealEvent精英治癒(包括完全治癒)❌
EliteMobSpawnEvent精英生成❌
EliteMobTargetPlayerEvent精英鎖定玩家被鎖定的玩家
PlayerDamagedByEliteMobEvent精英對玩家造成傷害受傷的玩家
ElitePhaseSwitchEventBoss因階段切換而生成❌
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 常數。

這些事件也會觸發 Lua 的 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

此腳本會在精英被玩家攻擊或鎖定玩家時使其跳躍。