エリートスクリプトターゲット
ターゲットはエリートスクリプトの中心的な要素であり、アクションとゾーンが機能するために必要です。
ターゲットタイプ
ターゲットタイプは、スクリプトによってどのエンティティまたは位置がターゲットになるかを設定します。
| Target Type | Details | Special |
|---|---|---|
NEARBY_PLAYERS | range内のプレイヤー | rangeが必要 |
NEARBY_MOBS | range内のモブ | rangeが必要 |
NEARBY_ELITES | range内のエリート | rangeが必要 |
WORLD_PLAYERS | ワールド内のプレイヤー | ❌ |
ALL_PLAYERS | サーバー内のプレイヤー | ❌ |
DIRECT_TARGET | イベント内のプレイヤー | 対応するイベントが必要 |
SELF | パワーを使用するエリート | ❌ |
SELF_SPAWN | ボスのスポーン位置をターゲットにする | ❌ |
LOCATION | 特定の位置 | locationが必要 |
LOCATIONS | 複数の特定の位置 | locationsが必要 |
ZONE_FULL | ゾーン内部をターゲットにする | Zoneが必要 |
ZONE_BORDER | ゾーンの境界をターゲットにする | Zoneが必要 |
ACTION_TARGET | アクションからターゲットを継承します。 | アクションの条件と相対ベクトルにのみ使用できます!! |
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に設定されているため、オンラインのすべてのプレイヤーにそのメッセージを送信します。
共有属性
以下の設定はすべてのターゲットに適用できます。
| Values | Details | Special |
|---|---|---|
offset | ターゲット位置のオフセットを設定します。 | エンティティをターゲットにできません! |
relativeOffset | ターゲット位置の相対オフセットを設定します。相対ベクトルのブループリントを受け入れ、ボスの向いている方向を基準にオフセットを計算できます。 | エンティティをターゲットにできません! |
例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"
これはボスの2ブロック上に落雷を発生させます。STRIKE_LIGHTNINGは位置を使用しエンティティには影響しないため、オフセットを持つことができることに注意してください。
メッセージはプレイヤーに送信されるため、メッセージの送信にオフセットを設定することはできません。ただし、エンティティをターゲットにできるゾーンにはオフセットを設定できます。
range
NEARBY_PLAYERSターゲットタイプで近くのプレイヤーをスキャンする範囲を設定します。
| Values | Details | Default |
|---|---|---|
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ターゲットタイプの位置を設定します。
| Values | Details | Default |
|---|---|---|
location | ターゲットになるワールド位置を設定します。 | none |
位置にはlocation: worldname,x,y,z,pitch,yawという形式を使用します。
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ターゲットタイプの位置を設定します。
| Values | Details | Default |
|---|---|---|
locations | ターゲットになるワールド位置のリストを設定します。 | none |
位置にはworldname,x,y,z,pitch,yawという形式を使用します。
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つの落雷を発生させます。
ゾーンをターゲットにする
ゾーンには複数のターゲットがあり、エリートスクリプトを最大限に活用するには、その仕組みを理解することが重要です。
ゾーンは2つの部分で機能します:
パート1 - ゾーンを配置する場所を設定する
ゾーンは自分がどこに配置されるべきかを知る必要があり、そのために落雷などの他の位置ベースのエフェクトと同じようにターゲットシステムを使用します。
例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
これはボスの周囲に円柱状のゾーンを生成します。この例ではまだアクションが設定されていないことに注意してください。それは以下で説明します。
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
パート1と同じゾーンを使用して、ここでアクションを追加します。このアクションのターゲットはZONE_FULLで、これはゾーン全体の内部にパーティクルを生成することを意味します。
ZONE_BORDERはすべてのゾーンで利用できるわけではないことに注意してください。詳細はスクリプトゾーンのページを参照してください。
ゾーンの追従(track)
targetType: SELFの場合にボスが移動するとゾーンも移動するなど、ゾーンがターゲットと一緒に移動するかどうかを設定します。
| Values | Details | Default |
|---|---|---|
track | ゾーンがターゲットと一緒に移動するかどうかを設定します。 | true |
アニメーション可能なゾーンは追従できないことに注意してください。詳細はこちら。
例
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で呼び出すスクリプト全体を遅延させるべきではありません。
以下は、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秒間の警告フェーズを持ち、その後ダメージフェーズを行うことを意味します。そしてゾーンが追従しないように設定されていても、警告ゾーンとダメージゾーンは同じ位置になります。
ゾーン固有のターゲットプロパティ
ゾーンには以下の固有プロパティがあります:
coverage
実際にアクションに使用されるゾーンの割合を設定します。位置ターゲットでのみ機能します(プレイヤーやその他のエンティティをターゲットにする場合は機能しません)。
| Values | Details | Default |
|---|---|---|
coverage | カバーされるゾーンの割合を設定します。~を使用してこの値をランダム化できます。例:1.0~0.3。 | 1.0 |
例
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つだけを実行する機能を使用して、半ランダム化されたゾーンを作成することさえ可能です。
注意: このセクションでは、**「親スクリプト」は、継承されたターゲットを使用するスクリプトである「継承スクリプト」**を実行するスクリプトを指します。
ターゲットの継承を使用する際は、正しいデータが渡されていることを確認するために_親スクリプト_を注意深く確認することが重要です。
INHERIT_SCRIPT_TARGET
INHERIT_SCRIPT_TARGETを使用すると、_親スクリプト_のターゲットが継承スクリプトに渡されます。これにはいくつかの注意点があります:
-
エンティティターゲットを渡す場合、エンティティの位置が使用されるため、位置を必要とするアクション(パーティクルの生成など)を実行できます。もちろん、エンティティを必要とするアクションを使用することもできます。
-
位置ターゲットを渡す場合、位置のみを使用できます。位置からエンティティを取得する唯一の方法は、その位置にゾーンを作成してエンティティを探すことです。 したがって、位置を渡してからエンティティを取得することは不可能ではありませんが、少し追加の作業が必要になります。
ゾーンの継承
INHERIT_SCRIPT_ZONE_FULLまたはINHERIT_SCRIPT_ZONE_BORDERを使用する場合、_親スクリプト_がゾーンを定義していることが不可欠です。そうでなければ_継承スクリプト_は正しく実行できません。
さらにゾーンはオプションで追従させることができます。これもゾーンと一緒に渡されます。
-
**追従しない(untracked)**ゾーンは、常に_継承スクリプト_によって定義された場所にゾーンを作成します。これは、アクションが実行されるたびに、_継承スクリプト_内のアクションがゾーン設定を使用してまったく新しいゾーンを作成し、それらのゾーンの位置がアクションによって定義されることを意味します。
-
**追従する(tracked)**ゾーンは、_親スクリプト_が
ZONE_FULLまたはZONE_BORDERをターゲットにするように設定されている場合、まったく同じゾーンの位置をすべての_継承スクリプト_に渡すことができます。これは、すべてのスクリプトが同じ位置に対して作用することを意味します。