メインコンテンツまでスキップ

エリートスクリプトターゲット

ターゲットは、アクション、条件、ゾーンが使用するエンティティや位置を選択します。Target は YAML マッピングで記述します。デフォルトは targetType が SELF、range が 20.0、track が true です。フィールド名は大文字と小文字を区別しませんが、ターゲットタイプの列挙値は大文字で指定します。

ターゲットタイプ​

ターゲットタイプは、スクリプトによってどのエンティティまたは位置がターゲットになるかを設定します。

DIRECT_TARGET はイベントが渡すエンティティです。プレイヤーのほか、攻撃してきたエリートやゾーンを出入りしたエンティティの場合もあります。対応するイベントでのみ使用してください。直接ターゲットがない場合は何も選択しません。ボスの現在の戦闘対象を自動的に選ぶものではありません。近くのターゲットはボスを中心とする軸平行の直方体で検索され、距離順には並びません。

エンティティターゲットは位置アクションに現在の足元位置を渡せます。逆方向の変換は自動ではありません。LOCATION、LOCATIONS、LANDING_LOCATION は、その場所にいるエンティティを選択しません。エンティティを探すにはゾーンを作成してください。プレイヤー選択自体はスペクテイターや別の戦闘のプレイヤーを除外しません。アクションによって追加の適用条件が課される場合はあります。

ターゲットタイプ説明補足
NEARBY_PLAYERS範囲内のプレイヤーrange は省略可能、デフォルト 20.0
NEARBY_MOBS範囲内のプレイヤー以外の生物エンティティ。ボス自身は除外range は省略可能、デフォルト 20.0
NEARBY_ELITES範囲内の管理対象エリート。ボス自身は除外range は省略可能、デフォルト 20.0
WORLD_PLAYERSワールド内のプレイヤー❌
ALL_PLAYERSサーバー内のプレイヤー❌
DIRECT_TARGETイベントが渡すエンティティ対応するイベントが必要
SELFパワーを使用するエリート❌
SELF_SPAWN位置アクションではボスの保存済みスポーン位置エンティティアクションではボス自身を返す
LOCATION特定の位置locationが必要
LOCATIONS複数の特定の位置locationsが必要
ZONE_FULLゾーン内部をターゲットにするZoneが必要
ZONE_BORDERゾーンの境界をターゲットにするZoneが必要
ACTION_TARGET周囲のアクションのターゲット文脈を使うFILTERING を使うアクションの条件と相対ベクトル専用。単独のアクションターゲットにはできない
LANDING_LOCATIONブロックまたはエンティティが着地した位置をターゲットにします。SPAWN_FALLING_BLOCKおよびSUMMON_ENTITYアクションのlandingScripts内でのみ使用できます!
INHERIT_SCRIPT_TARGETこのスクリプトを実行したスクリプトからターゲットを継承しますスクリプトが別のスクリプトによって呼び出された場合にのみ実行できます!
INHERIT_SCRIPT_ZONE_FULLこのスクリプトを実行したスクリプトから継承したゾーンの内部をターゲットにしますこのスクリプトを呼び出すスクリプト内にZoneが必要!
INHERIT_SCRIPT_ZONE_BORDERこのスクリプトを実行したスクリプトから継承したゾーンの境界をターゲットにしますこのスクリプトを呼び出すスクリプト内にZoneが必要!
例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"

これはターゲットにメッセージを送信します。ターゲットがALL_PLAYERSに設定されているため、オンラインのすべてのプレイヤーにそのメッセージを送信します。


共有属性​

以下の設定はターゲット位置の解決時に適用されます。エンティティを移動したり、アクションを受けるエンティティを変更したりはしません。

値説明補足
offsetターゲット位置のオフセットを設定します。エンティティをターゲットにできません!
relativeOffset相対ベクトルの定義で位置をずらします。その始点・終点ターゲットが方向を決めます。エンティティをターゲットにできません!

オフセットは、SELF や DIRECT_TARGET などのエンティティターゲットから解決した位置、SELF_SPAWN、LOCATION、LOCATIONS、そして ZONE_FULL・ZONE_BORDER とその継承版がゾーンからサンプリングした各位置に適用されます。ゾーン全体を動かすには、下の例のように、ゾーン自身の Target にオフセットを付けてください。Lua のスクリプトユーティリティにも同じルールが適用されます。

offset はエンティティの向きではなく、ワールドの X/Y/Z 軸を使います。relativeOffset より先に適用されます。LANDING_LOCATION と INHERIT_SCRIPT_TARGET の結果は、この追加オフセットを経由しません。相対ベクトル内の ACTION_TARGET は渡されたアクション位置をそのまま使い、自身のオフセット設定を無視します。

例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"

ボスの2ブロック上に落雷を発生させます。STRIKE_LIGHTNING は位置を選択するのでオフセットを使えます。落雷は見た目だけで、エンティティにダメージを与えません。

メッセージはプレイヤーに送信されるため、メッセージの送信にオフセットを設定することはできません。ただし、エンティティをターゲットにできるゾーンにはオフセットを設定できます。


range​

NEARBY_PLAYERS、NEARBY_MOBS、NEARBY_ELITES の検索直方体の半幅を指定します。X、Y、Z に同じ値を使い、球状の距離制限ではありません。モブとエリートの検索は実行者のボスを除外します。

一定の直方体には固定の非負数を使ってください。~ の範囲は軸ごとに別々に抽選される場合があり、下の coverage で説明する小数の抽選処理を使います。1つの半径を抽選した立方体になるとは限りません。

値説明デフォルト
range近くのプレイヤー・モブ・エリート検索の半幅。単位はブロック。20.0
例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"

ボスの死亡時に、その位置から各軸方向に25ブロック広がる直方体内のプレイヤーへメッセージを送信します。

location​

LOCATIONターゲットタイプの位置を設定します。

値説明デフォルト
locationターゲットになるワールド位置を設定します。none

位置には location: worldname,x,y,z,yaw,pitch という形式を使用します。worldname,x,y,z も受け付けられ(その場合 yaw と pitch は 0 が既定値になります)、ワールド名なしの x,y,z,yaw,pitch も受け付けられますが、最後の形式は位置にワールドが紐づかないため、意図した結果になることはまれです。3つの値だけの x,y,z は有効ではなく、コンソールに Attempted to deserialize an invalid location! が出力されて拒否されます。

読み込み済みのワールドか same_as_boss を使ってください。解析処理はワールドを読み込みません。不正な形式や未解決のワールドはターゲット使用時に失敗する場合があります。same_as_boss を使っても座標は絶対値です。この置換語が変えるのはワールドだけです。

指定ワールドが未読込で、ボスのいるワールド名が <configuredWorld>_<number> の場合は、そのインスタンスワールドを使います。指定ワールドがすでに読み込まれていれば、この代替処理は使われません。

same_as_bossはワールド名の有効なプレースホルダーであることに注意してください。例えばsame_as_boss,100,64,100,0,0は、ボスがいるワールドと同じワールドをターゲットにする有効な位置となります。

例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"

これはmyWorldというワールドの位置 x=100, y=64, z=200 に落雷を発生させます。


locations​

LOCATIONSターゲットタイプの位置を設定します。

値説明デフォルト
locationsターゲットになるワールド位置のリストを設定します。none

各位置には worldname,x,y,z,yaw,pitch という形式を使用します。受け付けられる派生形は location と同じです。

same_as_bossはワールド名の有効なプレースホルダーであることに注意してください。例えばsame_as_boss,100,64,100,0,0は、ボスがいるワールドと同じワールドをターゲットにする有効な位置となります。

例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATIONS
locations:
- "myWorld,100,64,200,0,0"
- "same_as_boss,-100,12,130,0,0"

これはmyWorldというワールドの位置 x=100, y=64, z=200 に落雷を発生させ、さらにボスと同じワールドの位置 x=-100, y=12, z=130 にもう1つの落雷を発生させます。


ゾーンをターゲットにする​

ゾーンでは、原点ターゲットと形状を使うアクションを分けます。Zone.Target が原点を提供し、アクションの ZONE_FULL または ZONE_BORDER が生成された形状から選択します。複数の原点は複数の形状を生成できます。エンティティの重複は除かれますが、形状が重なるとパーティクル位置は重複する場合があります。

ゾーンは2つの部分で機能します:

パート1 - ゾーンを配置する場所を設定する​

ゾーンは自分がどこに配置されるべきかを知る必要があり、そのために落雷などの他の位置ベースのエフェクトと同じようにターゲットシステムを使用します。

例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF

この断片は、ボスの足元から上へ伸びる半径10、高さ1の円柱を定義します。まだアクションがないため、実行するには下の Actions が必要です。filter: PLAYER はエンティティ検索に適用され、パーティクル用の幾何学的位置には影響しません。

STATIC_RAYのような一部のゾーンには、2つ以上のターゲットがあります。これは光線が線であり、線が2つの点で定義されるためです。これはゾーンのページでより詳しく説明されていますが、基本的にはすべて同じように機能します。

パート2 - ゾーンの内部をターゲットにする​

形状全体には targetType: ZONE_FULL、境界には targetType: ZONE_BORDER を使います。位置アクションは形状から抽出した点を受け取り、エンティティアクションはゾーンのフィルターと内包判定に一致するエンティティを受け取ります。両者の集合の型は異なります。

例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL

プレイヤー位置ではなく、円柱内の抽出された位置にパーティクルを追加します。5 tick 間隔で12回実行します。ゾーンのパーティクルアクションは、coverage を明示しなければ約30%を使います。filter: PLAYER はパーティクルをプレイヤーだけに制限しません。

ZONE_BORDERはすべてのゾーンで利用できるわけではないことに注意してください。詳細はスクリプトゾーンのページを参照してください。

ゾーンの追従(track)​

下の例のように、アクションの Target に track を設定します。true では通常、形状が要求されるたびに動く原点を解決し直します。false ではアクションの wait 前に形状をキャッシュして原点を固定しますが、後のエンティティ検索はその時点で形状内にいる対象を探します。発動時にいたプレイヤーの一覧を固定するわけではありません。

値説明デフォルト
trackゾーン原点と抽出位置をキャッシュする代わりに、アクションターゲットを解決し直します。true

animationDuration が正の場合、アクションは track の設定にかかわらず、開始時にアニメーションする形状をキャッシュします。キャッシュするのは位置の固定リストではなく形状なので、アニメーションは続きます。詳細はこちら。

例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false

パート1とパート2と同じ例を使用して、ゾーンが追従しないように設定されました。これはゾーンがボスの位置に生成されるものの、ボスが移動し続けても、ゾーンは最初に生成された場所に留まることを意味します。

キャッシュはアクション開始時、待機前に用意されます。RUN_SCRIPT を遅らせると、呼び出し先の開始とキャッシュ準備も遅れます。

元の位置で警告の後にダメージを与えるには、両方のスクリプトをすぐに開始し、ダメージアクションに wait を付けます。移動や先行アクションに関係なく同じ位置を保証する必要がある場合は、一致する固定原点を使ってください。

以下は、Frost Palace Sanctumから取得した、警告フェーズとダメージフェーズを持つパワーの正しい例です。

例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
- action: SPAWN_PARTICLE
wait: 60
times: 13
repeatEvery: 3
particles:
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: -0.5
speed: 0.2
Target:
targetType: ZONE_FULL
track: false
- action: RUN_SCRIPT
scripts:
- DamageCylinder
- action: PLAY_ANIMATION
sValue: fire_zone
Target:
targetType: SELF
- action: SET_MOB_AI
duration: 100
bValue: false
Target:
targetType: SELF
Cooldowns:
local: 1200
global: 300
DamageCylinder:
Zone:
radius: 10.0
shape: CYLINDER
height: 10
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
offset: 0,-1,0
Actions:
- action: DAMAGE
wait: 60
repeatEvery: 10
times: 4
multiplier: 4
Target:
targetType: ZONE_FULL
track: false
- action: SET_ON_FIRE
wait: 60
duration: 80
Target:
targetType: ZONE_FULL
track: false

このスクリプトは多くのことを行いますが、VisualCylinderとDamageCylinderという2つの明確なスクリプトに分かれています。

VisualCylinderが最初に実行され、RUN_SCRIPTアクションを持っており、これによってVisualCylinderの実行と同時にすぐにDamageCylinderも実行されます。

ただし、DamageCylinder内のすべてのアクションは60ティック(3秒)待機するように設定されています。

警告は3秒続き、その後に遅延した効果が始まります。両スクリプトを即時に開始すると、ボスの同じ水平位置を取得します。ただし体積は異なり、表示用円柱は足元から高さ1、ダメージ用は1ブロック下から高さ10です。DAMAGE は10 tick 間隔で4回、SET_ON_FIRE は待機後に1回実行されて80 fire tick を要求します。アニメーションには fire_zone を持つ対応カスタムモデルが必要です。

アクションの実行ごとに独自のキャッシュが保持されます。同じスクリプトの発動が重なっても、互いのキャッシュ済み位置を上書きすることはなく、新しい発動が以前の発動でキャッシュされた位置を再利用することもありません。

ゾーン固有のターゲットプロパティ​

ゾーンには以下の固有プロパティがあります:

coverage​

実際にアクションに使用されるゾーンの割合を設定します。位置ターゲットでのみ機能します(プレイヤーやその他のエンティティをターゲットにする場合は機能しません)。

値説明デフォルト
coverage残すゾーン位置の割合。0.5 は約半分です。0 から 1 の固定値を推奨します。1.0

0.3~1.0 のような範囲は 0.3 以上 1.0 未満の値を抽選し、coverage は各点で別々に抽選される場合があります。予測可能な coverage にするには固定の割合を使ってください。明示的な coverage: 1.0 は全抽出位置を残しますが、ゾーンの SPAWN_PARTICLE で省略すると 0.3 になります。エンティティ検索は減りません。track: false の静的ゾーンでは位置選択をキャッシュして使い回すため、繰り返しごとに再抽選しません。

例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
coverage: 0.5

各抽出位置は50%の確率でパーティクル用に残ります。結果はおおよその数で、正確に半分ではありません。

ターゲットの継承​

スクリプトが別のスクリプトを実行(または「呼び出す」)するとき、最初のスクリプトから2番目のスクリプトへゾーンとターゲットの情報を渡すことができます。

使用例

  1. 改良されたスクリプトランナー

スクリプトランナーは、他の多くのスクリプトを実行することだけを目的とするスクリプトです。これらはスクリプトの管理を容易にするために使用され、特に正確なタイミングを必要とする複数のスクリプトを扱う場合に役立ちます。

ターゲットの継承により、複数のスクリプトが同じゾーンやターゲットを使用でき、何百行もの繰り返しスクリプトを削減できる可能性があります。

  1. マトリョーシカ式ターゲットフィルタリング / 入れ子人形式ターゲットフィルタリング

実際にエンティティターゲットを解決・フィルタリングする親アクションは、scripts リスト経由でキャッシュ済み結果を子へ渡せます。親と子のターゲットの型を合わせてください。RUN_SCRIPT 自体は個別ターゲットのフィルタリングを行わないため、そこに FILTERING 条件を付けても、継承用の絞り込み済み一覧は作られません。

タグの判定にはエンティティアクションで ACTION_TARGET と FILTERING を使います。ランダム確率はスクリプト条件か BLOCKING が必要で、フィルタリング中のエンティティごとの抽選ではありません。isAlive は Bukkit の有効性を検査するため、反転してもプレイヤー死亡時の確実なトリガーにはなりません。

  1. 複雑なゾーン

最後に、必要に応じて条件を使用しながらターゲットを重ねて複雑なゾーンを作成することが可能であり、スクリプト条件と、スクリプトアクションからリストされたスクリプトの1つだけを実行する機能を使用して、半ランダム化されたゾーンを作成することさえ可能です。

注意: このセクションでは、**「親スクリプト」は、継承されたターゲットを使用するスクリプトである「継承スクリプト」**を実行するスクリプトを指します。

ターゲットの継承を使用する際は、正しいデータが渡されていることを確認するために_親スクリプト_を注意深く確認することが重要です。

INHERIT_SCRIPT_TARGET​

INHERIT_SCRIPT_TARGET は、子を呼び出した特定の親アクションのターゲット解決処理またはキャッシュを読みます。親スクリプトの全ターゲットをまとめたものではありません。子のアクションやゾーン原点で使い、最上位の Conditions では使わないでください。最上位条件は継承アクションデータが利用可能になる前に評価されるため、そこでは継承ターゲットがエラーで失敗します。

親が解決済みで条件による絞り込み後のターゲットを渡すのは、その Target が track: false の場合だけです。デフォルトの track: true では、子は親の絞り込みなしで親のターゲットを解決し直します。RUN_SCRIPT の親は自身のターゲットを解決しないため、その子は常にエンティティを解決し直します。track: false の場合、子は親がアクション開始時にキャッシュした位置を再利用します。次の注意点があります:

  • エンティティターゲットを渡す場合、子はそれをエンティティアクションにも位置アクションにも使えます。位置アクションにはエンティティの位置が渡されます。

  • 位置ターゲットを渡す場合、位置のみを使用できます。位置を継承したエンティティアクションはエラーで失敗します。位置からエンティティを取得する唯一の方法は、その位置にゾーンを作成してエンティティを探すことです。 したがって、位置を渡してからエンティティを取得することは不可能ではありませんが、少し追加の作業が必要になります。

ゾーンの継承​

INHERIT_SCRIPT_ZONE_FULLまたはINHERIT_SCRIPT_ZONE_BORDERを使用する場合、_親スクリプト_がゾーンを定義していることが不可欠です。そうでなければ_継承スクリプト_は正しく実行できません。

track: false のアクションは待機前にゾーン形状をキャッシュします。追従するアクションは通常キャッシュせず、動く原点を解決し直します。親アクションのデータを渡すとキャッシュ形状を再利用できる場合がありますが、track: true が共通位置を固定するわけではありません。

継承ゾーンのターゲットは、親スクリプト自身の Zone と、呼び出したアクションがキャッシュした形状(キャッシュしていれば)を使います。INHERIT_SCRIPT_ZONE_FULL のエンティティ検索は、ZONE_FULL と同様に全体の内包判定を使います。親スクリプトに有効なゾーンがない場合や、スクリプトが別のスクリプトから呼び出されていない場合、アクションはエラーで失敗します。

固定の原点を共有するには、呼び出し側アクションの Target に track: false を設定します。すると子は、子自身のアクションが待機する場合でも、親がアクション開始時にキャッシュした形状を再利用します。