エリートスクリプトイベント
EliteScriptはイベントベースです。つまり、特定のイベントがトリガーされたときに起動します。以下は現在有効なイベントです:
| イベント | 詳細 | 直接ターゲット [?] |
|---|---|---|
| EliteMobDamagedByEliteMobEvent | エリートが別のエリートにダメージを受けた | 攻撃側エリートの生体エンティティ |
| EliteMobDamagedByPlayerEvent | エリートがプレイヤーにダメージを受けた | ダメージを与えたプレイヤー |
| EliteMobDamagedEvent | エリートが何かにダメージを受けた | ❌ |
| EliteMobDeathEvent | エリートの死亡 | ❌ |
| EliteMobEnterCombatEvent | エリートがプレイヤーと戦闘に入った | 交戦中のプレイヤー |
| EliteMobExitCombatEvent | エリートが戦闘から離脱 | ❌ |
| EliteMobHealEvent | エリートの回復(完全回復を含む) | ❌ |
| EliteMobSpawnEvent | エリートのスポーン | ❌ |
| EliteMobTargetPlayerEvent | エリートがプレイヤーをターゲット | ターゲットされたプレイヤー |
| PlayerDamagedByEliteMobEvent | エリートがプレイヤーにダメージを与えた | ダメージを受けたプレイヤー |
| ElitePhaseSwitchEvent | フェーズ切り替えによるボスのスポーン | ❌ |
| ZoneEnterEvent (ScriptZoneEnterEvent) | エンティティがゾーンに入った。ゾーンの設定が必要! | ゾーンに入ったエンティティ |
| ZoneLeaveEvent (ScriptZoneLeaveEvent) | エンティティがゾーンを離れた。ゾーンの設定が必要! | ゾーンを離れたエンティティ |
「エリート」とは EliteMobs がエリートとして追跡するエンティティを指し、ボスやエリート増援も含まれます。 注意:ZoneEnterEventとZoneLeaveEventは計算コストが高いため、使用は控えめにしてください!
Direct Targetはスクリプトターゲットで使用されます。詳細はこちらをご覧ください。
YAML では ZoneEnterEvent と ZoneLeaveEvent を使用します。括弧内の ScriptZoneEnterEvent と ScriptZoneLeaveEvent は内部の Java イベント名で、YAML の別名としては使えません。キャンセル可能なイベントをキャンセルすると、そのイベントの実行順で後続のスクリプトと Lua パワーが止まりますが、すでに実行中のスクリプトの残りのアクションは止まりません。ゾーン入退場イベント自体はキャンセルできません。
EliteMobDamagedEvent はあらゆる原因のダメージを扱い、EliteMobDamagedByPlayerEvent と EliteMobDamagedByEliteMobEvent はそれぞれ特定の原因を扱います。 別々に通知されるイベントであり、排他的な選択肢ではありません。汎用と専用の両方を指定すると、クールダウンが許す場合は 1 回の攻撃で同じスクリプトが複数回動くことがあります。汎用リスナーの実行前にキャンセルされたダメージは、そのイベントを発生させません。
注意:イベント名は1文字単位で厳密に照合されます。 elitemobdeathevent や ELITEMOBDEATHEVENT はコンソール警告とともに拒否されます。機能するのは EliteMobDeathEvent だけです。スクリプト直下のセクション名も大文字小文字を区別します:Events、Actions、Zone、Conditions、Cooldowns はこのとおりに正確に記述する必要があります。アクション配下にネストした Conditions ブロックは、大文字小文字を問わず読み取られます。これらのセクションの内部にあるもの(targetType、radius、borderRadius、isAlive、Target など)は大文字小文字を区別せず、すべての enum 値は慣例どおり正確な大文字の UPPER_SNAKE_CASE 定数です。
on_zone_enter / on_zone_leave も起動しますここに ZoneEnterEvent または ZoneLeaveEvent を列挙することが、そのボスでティックごとのゾーンリスナーを開始させます。そのリスナーは、同じボス上のLuaパワーにおけるトップレベルの on_zone_enter / on_zone_leave フックを発火させる唯一の仕組みです。Luaパワー自身の context.zones:watch_zone(...) はこれらを発火させません。
ZoneEnterEvent と ZoneLeaveEvent は、スクリプトが生成したゾーン形状の和集合にエンティティが出入りするとアクションを起動します。DIRECT_TARGET は出入りしたエンティティです。スキャナー自体に直接ターゲットはないので、ゾーン定義に DIRECT_TARGET を使わないでください。固定位置や SELF / SELF_SPAWN は簡単な基点になります。NEARBY_PLAYERS も直接ターゲットなしで基点を解決できますが、ゾーンは選択されたプレイヤーとともに動き、その移動する領域全体への出入りが判定されます。
リスナーは、クールダウンがアクション開始を防いでいる間も毎 tick スキャンします。クールダウンが減らすのはアクションの実行回数で、ゾーン内外の検出コストではありません。開始直後のスキャンですでに内部にいるエンティティも「入場」として扱います。
ゾーンイベントはボスと出入りしたエンティティを識別しますが、発生元のスクリプトやゾーンは識別しません。あるリスナーが検出した移動は、そのボスの該当するすべてのスクリプトと Lua パワーへ通知されます。そのため複数のリスナーが重複実行や別ゾーンのスクリプトの起動を引き起こす場合があります。ゾーンの filter はスキャンする生体エンティティを選び、デフォルトは PLAYER です。
スクリプトごとに Events セクションを 1 つ使い、必要な対応イベントを列挙します。イベントのないスクリプトは自動起動しませんが、別のスクリプトから呼び出せます。
例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
このスクリプトは、プレイヤーに攻撃されたときやプレイヤーをターゲットにしたときに、エリートをジャンプさせます。