はじめに
これらの例は、EliteScript のアクションを組み合わせてカスタムボスパワーを作成します。YAML を直接編集するか、WebApp を利用できます。
動画は、意図した効果を示す過去のデモです。現在の実装を検証したものではありません。使用前に各例の動作と制限を確認してください。
eliteScript ブロックをカスタムボスファイルに貼り付けてください。fc_boss.yml などのコンテンツ参照は、インストール済みのボス定義に置き換えます。以下の Arrow Rain には発射位置の制限があり、現在は説明されていた上空からの矢の雨を生成しません。
EliteScript(.yml)は現在も完全にサポートされており、このページのすべての例がそれを使用しています。ただし、もはや唯一の選択肢ではありません。パワーはLuaでも記述でき、EliteMobsに同梱されているパワーはほぼすべて現在Luaを使用しています。2つの形式の比較についてはパワーの作成を参照してください。
SLOWNESS、INSTANT_HEALTH、NAUSEA など、現在のポーション名を使用してください。リゾルバーは minecraft:slowness のような名前空間付き識別子も受け付けます。古い Bukkit 名は互換処理で解決されます。
以下の時間はすべてゲームティック単位です。通常のサーバー速度では20ティックが1秒です。各アクションは独立してスケジュールされ、wait は前のアクションの終了時ではなく、そのアクションの開始時から数えます。反復アクションは追加の間隔待機なしで始まり、times 回実行されます。アクションのターゲットに設定した track: false は待機前にゾーンをキャプチャします。Zone.Target だけに設定しても、すべてのアクションが固定されるわけではありません。形状とキャッシュの詳細はターゲットとゾーンを参照してください。
coverage は効果や召喚に使うゾーン内の位置をサンプリングする値であり、プレイヤーの割合ではありません。ゾーンのエンティティフィルターは既定でプレイヤーを選びます。一方、NEARBY_PLAYERS は球形の半径ではなく、座標軸に平行な直方体を検索します。Cooldowns.local と global はティック値で、どちらか一方が正であればイベントの自動クールダウン判定が有効になります。scripts で呼ぶ補助スクリプトは、呼び出し元のアクションが実行された時点で開始します。クールダウンを参照してください。
パワーの例
Slam Down
プレイヤーがボスにダメージを与えると、ボスはそのプレイヤーの位置から8ブロック上へテレポートします。15ティック後、PUSH は次のティックに下向きの速度を設定するよう予約します。20ティック目には独立した2つのアクションが、現在のボス位置を基準に範囲3の近隣プレイヤー用直方体で選んだプレイヤーに鈍化 IV を60ティック付与し、「Stunned!」というサブタイトルを表示します。サブタイトルの表示は40ティックで、さらにフェードインとフェードアウトが各10ティックあります。
これは時間で発動する効果であり、着地を検出しません。障害物、重力、テレポート結果によって20ティック目のボス位置は変わり得ます。鈍化は攻撃を禁止する効果でも完全なスタンでもなく、この例に独立したスクリプトダメージのアクションはありません。
例を展開
eliteScript:
SlamDown:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: TELEPORT
FinalTarget:
targetType: DIRECT_TARGET
offset: 0,8,0
Target:
targetType: SELF
- action: PUSH
vValue: 0,-5,0
Target:
targetType: SELF
wait: 15
- action: POTION_EFFECT
potionEffectType: SLOWNESS
amplifier: 3
duration: 60
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
- action: TITLE_MESSAGE
subtitle: "Stunned!"
duration: 40
fadeIn: 10
fadeOut: 10
Target:
targetType: NEARBY_PLAYERS
range: 3
wait: 20
Cooldowns:
local: 180
global: 80
Push Away
このスクリプトはボスの周囲に半径4のドームを描き、パーティクル、反復する押し出し、メッセージを同時に開始します。修正済みの例はプレイヤーからのダメージで発動し、ボスからその攻撃者への方向に上向きのオフセットを加えて計算します。選択された全プレイヤーに同じベクトルを適用します。各プレイヤーをボスから放射状に押し出すのではなく、共通の方向に押します。
PUSH は各アクションの1ティック後に速度を置き換え、相対ベクトルをアクション実行ごとに1回計算します。このアクションの ACTION_TARGET の位置はボスの位置なので、SourceTarget: SELF と組み合わせると、意図した押し出しではなく長さゼロの方向になります。この例では DIRECT_TARGET を使用します。ボスと攻撃者の位置が重なると方向はゼロになり、0,0.2,0 のオフセットだけが残ります。ドームの全体エンティティ判定は球への包含判定なので、見えている半球の下のプレイヤーも選択されることがあります。
例を展開
eliteScript:
PushAway:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: DOME
radius: 4
borderRadius: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_BORDER
track: true
repeatEvery: 5
times: 4
- action: PUSH
Target:
targetType: ZONE_FULL
track: true
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 1.0
offset: 0,0.2,0
repeatEvery: 1
times: 20
- action: MESSAGE
sValue: "&cCool boss!: &fBE GONE!"
Target:
targetType: ZONE_FULL
repeatEvery: 10
times: 2
Cooldowns:
local: 140
global: 80
Arrow Rain
この古い例は、ダメージを与えたプレイヤーの初期位置に半径5、高さ1の円柱の境界を描き、警告を表示します。矢のアクションは10ブロック上にある2つ目の円柱をキャプチャし、40ティック待ってから10ティック間隔で4回の一斉射撃を試みます。
生きているボスに対して SUMMON_ENTITY を ARROW で使うと、ボスの投射物ランチャーが呼ばれます。そのため、矢はサンプリングされたゾーン位置ごとに1本ずつ、上空の各点ではなくボスから発射されます。下向きの速度は適用されますが、描かれた円から出ても、この実装を確実に避けられるわけではありません。古い動画は意図した矢の雨を示しています。この YAML は制限の説明用として残しており、上空から矢を降らせる動作済みの作例ではありません。
例を展開
eliteScript:
MakeCircle:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
Actions:
- action: SPAWN_PARTICLE
Target:
targetType: ZONE_BORDER
track: false
coverage: 1.0
repeatEvery: 5
times: 8
particles:
- particle: FLAME
- action: TITLE_MESSAGE
Target:
targetType: DIRECT_TARGET
fadeOut: 10
duration: 20
fadeIn: 10
subtitle: Move out of the zone!
- action: RUN_SCRIPT
scripts:
- "ArrowRain"
Cooldowns:
local: 160
global: 80
ArrowRain:
Zone:
shape: CYLINDER
radius: 5
borderRadius: 4
height: 1
Target:
targetType: DIRECT_TARGET
track: false
offset: 0,10,0
Actions:
- action: SUMMON_ENTITY
wait: 40
sValue: ARROW
Target:
targetType: ZONE_FULL
track: false
vValue: 0,-1,0
repeatEvery: 10
times: 4
Fire Aura
ボスがプレイヤーにダメージを与えると、ボスを追従する半径2、高さ3の円柱でパーティクルを開始し、ボスに一時タグ FireOn を120ティック付与します。パーティクルは5ティック間隔で24回実行され、最後は115ティック目です。
このタグがある間にプレイヤーがボスにダメージを与えると、SetOnFire はその直接の攻撃者の燃焼タイマーを20ティックに設定します。ブロッキング条件が調べるのはボスのタグであり、攻撃者が円柱内にいるかどうかではありません。この補助スクリプトにはクールダウンの値がないため、クールダウン判定を省略し、視覚用スクリプトのグローバルクールダウンによっても抑制されません。
例を展開
eliteScript:
Visual:
Events:
- PlayerDamagedByEliteMobEvent
Zone:
shape: CYLINDER
radius: 2
height: 3
Target:
targetType: SELF
track: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: FLAME
Target:
targetType: ZONE_FULL
track: true
coverage: 1.0
repeatEvery: 5
times: 24
- action: TAG
tags:
- "FireOn"
duration: 120
Target:
targetType: SELF
Cooldowns:
local: 180
global: 80
SetOnFire:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_ON_FIRE
duration: 20
Target:
targetType: DIRECT_TARGET
Conditions:
Target:
targetType: SELF
conditionType: BLOCKING
hasTags:
- "FireOn"
Poison Lines
このスクリプトはボスの初期位置で直交する2つの直方体をキャプチャし、プラス記号を作ります。SET_MOB_AI は通常のモブ AI を40ティック無効化すると同時に PoisonLine2 を開始します。補助スクリプトの実行は AI の復帰を待ちません。このアクションは他のスクリプトを無効化しません。
各帯は5ティック間隔で8回雲を出します。40ティック目に煙と毒 V が始まり、それぞれ5ティック間隔で12回、95ティック目まで繰り返します。毒の1回の付与は50ティック続くので、煙が終わった後も残り得ます。アクション側の track: false により、ボスが移動を再開しても両方の帯が固定されます。直方体の y: 1 が作るエンティティ衝突領域は、原点ブロックの Y から半ブロック上までの薄い帯です。パーティクルの体積とエンティティの包含範囲は同一ではありません。
例を展開
eliteScript:
PoisonLine1:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CUBOID
x: 20
y: 1
z: 2
Target:
targetType: SELF
track: false
Actions:
- action: SET_MOB_AI
bValue: false
duration: 40
Target:
targetType: SELF
scripts:
- "PoisonLine2"
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Cooldowns:
local: 200
global: 80
PoisonLine2:
Zone:
shape: CUBOID
x: 2
y: 1
z: 20
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 1
track: false
repeatEvery: 5
times: 8
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
coverage: 1
track: false
wait: 40
repeatEvery: 5
times: 12
- action: POTION_EFFECT
potionEffectType: POISON
amplifier: 4
duration: 50
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 5
times: 12
Bounce
このスクリプトはボスの初期位置に半径10、高さ2の円柱をキャプチャします。10ティック間隔で20回パーティクルを出し、1ティック間隔で200回上向きに押します。通常のサーバー速度で約10秒です。
各押し出しは次のティックに速度を 0,0.4,0 に設定し、水平方向の速度も置き換えます。円柱の高さにはプレイヤーの境界ボックス全体が収まる必要があるため、その上下の境界を出入りすることで跳ねる動きになります。両アクションのターゲットは固定されており、パーティクルを残したまま衝突領域だけが移動するボスを追うことはありません。
例を展開
eliteScript:
Bounce:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 10
height: 2
Target:
targetType: SELF
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: EXPLOSION
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 0.2
- action: PUSH
vValue: 0,0.4,0
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
Cooldowns:
local: 220
global: 80
Summon
このスクリプトは、ダメージを与えたプレイヤーの初期位置から6ブロック上に半径3、高さ1の円柱をキャプチャし、そのプレイヤーに即座にサブタイトルを表示します。召喚アクションの track: false は40ティックの待機前にゾーンをキャプチャするため、警告中に動いても出現範囲は動きません。
40ティック後、coverage: 0.2 が増援用のゾーン位置を独立にサンプリングします。一定数や厳密に5分の1の点を保証するものではありません。fc_boss.yml を、インストール済みの有効なカスタムボスのファイル名に置き換えてください。成功した召喚にはそれぞれ400ティックの逃走タイムアウトが設定されます。空中の出現位置を使うもので、安全な地面を探す処理ではありません。通常のボスやエンカウンターの削除により、増援が先に消えることもあります。
例を展開
eliteScript:
Summon:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: CYLINDER
radius: 3
height: 1
Target:
targetType: DIRECT_TARGET
offset: 0,6,0
track: false
Actions:
- action: SUMMON_REINFORCEMENT
sValue: "fc_boss.yml"
duration: 400
Target:
targetType: ZONE_FULL
coverage: 0.2
track: false
wait: 40
- action: TITLE_MESSAGE
subtitle: "Friends! Help!!!"
duration: 30
fadeIn: 10
fadeOut: 10
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 333
global: 80
Potion Zones
プレイヤーからのダメージを受けると、onlyRunOneScript: true により PotionZoneBad と PotionZoneGood のどちらかを等確率で選びます。
両方の補助スクリプトは、ボスの範囲20の近隣プレイヤー用直方体で選んだ各プレイヤーの周囲に、半径5、高さ2の円柱をキャプチャします。円柱はその初期位置に留まり、実行時に中にいるプレイヤーが効果を受けます。後から入ったプレイヤーも対象です。重なる円柱は1つの選択集合になるため、重なった円柱が複数あるだけで、1回の補助アクションが同じプレイヤーに何度も効果を付与することはありません。
悪い方の補助スクリプトは雲を4回出し、40ティック目に大きな煙と衰弱 IV を開始します。後者のアクションは10ティック間隔で6回、90ティック目まで実行されます。衰弱の1回の付与は80ティックです。良い方はパーティクルを入れ替え、代わりに即時回復 II を付与します。duration: 80 を設定しても、即時効果が継続的な再生効果になることはありません。パーティクルの coverage: 0.3 は対象プレイヤーの割合を減らしません。両方とも、遅延効果の前に近隣プレイヤーへのチャットメッセージを即座に送ります。
例を展開
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "PotionZoneBad"
- "PotionZoneGood"
onlyRunOneScript: true
Cooldowns:
local: 110
global: 80
PotionZoneBad:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: WITHER
amplifier: 3
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the burn!"
Target:
targetType: NEARBY_PLAYERS
range: 20
PotionZoneGood:
Zone:
shape: CYLINDER
height: 2
radius: 5
Target:
targetType: NEARBY_PLAYERS
range: 20
track: false
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: LARGE_SMOKE
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
repeatEvery: 10
times: 4
- action: SPAWN_PARTICLE
particles:
- particle: CLOUD
Target:
targetType: ZONE_FULL
coverage: 0.3
track: false
wait: 40
repeatEvery: 10
times: 6
- action: POTION_EFFECT
potionEffectType: INSTANT_HEALTH
amplifier: 1
duration: 80
Target:
targetType: ZONE_FULL
track: false
wait: 40
repeatEvery: 10
times: 6
- action: MESSAGE
sValue: "&cCool boss!: &fFeel the... Wait, this is the wrong one."
Target:
targetType: NEARBY_PLAYERS
range: 20
Blind Waves
このスクリプトはボスの位置に2本の水平なレイの線分をキャプチャします。それぞれ Z +5 から Z -5 まで伸び、100ティックかけてワールドの X 軸方向に +10 または -10 まで平行移動します。これらのオフセットはワールドの軸を使い、ボスの向きには依存しません。
2つの Z 端点が線分の長さ10ブロックを決め、最終 X 座標の各組が移動方向を決めます。平行移動するレイを調整する際は、FinalTarget と FinalTarget2 の両方を残してください。
Y オフセットがゼロの場合、線分はボスの初期の足元の高さに置かれます。両端点の高さを変えるとレイは上下に移りますが、長方形の壁の高さを持つわけではありません。既定の pointRadius は 0.5 で、サンプリングされた球とプレイヤーの境界ボックスで衝突を判定します。跳び越せるかは地形とプレイヤーのヒットボックス全体に依存します。ignoresSolidBlocks: true により波は固体ブロックを通過します。
animationDuration を短くすると移動が速くなります。効果も短いアニメーションと同時に終わらせるなら、アクションの times も調整してください。アニメーションの最後のフレームは最終ターゲットにちょうど到達し、その最終的な形状はアクション終了まで利用できます。
煙は5ティック間隔で合計20回、盲目判定は1ティック間隔で合計100回実行されます。接触のたびに100ティックの盲目を付与するため、接触し続けると効果が更新され、固定の5秒間が1回始まるわけではありません。アニメーションするゾーンはアクション側が track: false でも動き続け、各アクションは track の設定にかかわらず、開始時にアニメーション形状をキャッシュします。個別のパーティクルとポーションのアクションは、それぞれがキャプチャしたアニメーション形状を所有します。
例を展開
eliteScript:
Blind:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: 10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: 10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: RUN_SCRIPT
scripts:
- "Blind2"
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Cooldowns:
local: 200
global: 80
Blind2:
Zone:
shape: TRANSLATING_RAY
Target:
targetType: SELF
offset: 0,0,5
track: false
FinalTarget:
targetType: SELF
offset: -10,0,5
track: false
Target2:
targetType: SELF
offset: 0,0,-5
track: false
FinalTarget2:
targetType: SELF
offset: -10,0,-5
track: false
animationDuration: 100
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SMOKE
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
repeatEvery: 5
times: 20
- action: POTION_EFFECT
potionEffectType: BLINDNESS
amplifier: 5
duration: 100
Target:
targetType: ZONE_FULL
track: true
repeatEvery: 1
times: 100
Freeze Wall
このスクリプトは、ボスの初期の足元の高さと、その1ブロック上、2ブロック上に3本の回転レイを重ねます。レイには pointRadius があり、長方形の高さはないため、複数の線分を組み合わせて壁のような効果を作ります。
各線分は長さ6ブロックで、200ティックかけて正の方向に360度のヨー回転を行います。初期方向はワールドの +X で、ボスの向きに依存しません。キャプチャした回転中心はボスを追従しません。線分全体は、最初の回転ステップより前、形状が作成された時点から存在します。固体ブロックはこれらのレイを止めません。
各スクリプトは10ティック間隔で合計20回パーティクルを出し、1ティック間隔で合計200回プレイヤーとの接触を判定します。接触のたびに凍結ティックを100加算します。重なるレイに触れると、同じティックに複数回加算される場合があります。解凍と凍結ダメージは Minecraft が管理するため、固定の5秒間の視覚効果でも移動の凍結でもありません。ポーションと凍結のアクションは、EliteMobs のインスタンス効果ポリシーにも従います。
例を展開
eliteScript:
Trigger:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: RUN_SCRIPT
scripts:
- "FreezeWall"
- "FreezeWall2"
- "FreezeWall3"
Cooldowns:
local: 300
global: 80
FreezeWall:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
Target2:
targetType: SELF
offset: 6,0,0
track: false
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall2:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,1,0
Target2:
targetType: SELF
track: false
offset: 6,1,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200
FreezeWall3:
Zone:
shape: ROTATING_RAY
Target:
targetType: SELF
track: false
offset: 0,2,0
Target2:
targetType: SELF
track: false
offset: 6,2,0
yawRotation: 360
animationDuration: 200
ignoresSolidBlocks: true
Actions:
- action: SPAWN_PARTICLE
particles:
- particle: SNOWFLAKE
repeatEvery: 10
times: 20
Target:
targetType: ZONE_FULL
track: false
coverage: 1.0
- action: VISUAL_FREEZE
amount: 100
Target:
targetType: ZONE_FULL
track: false
repeatEvery: 1
times: 200