ボスフェーズの作成
ボスフェーズはカスタムボスのサブメカニクスです。これらのフェーズの背後にあるシステムは非常に柔軟で強力なため、この機能をうまく活用してもらうために、専用の説明が必要になります。
ボスフェーズはどのように機能しますか?
ボスフェーズは、次の設定形式を使って EliteMobs の任意のカスタムボスに追加できます。
phases:
- phase_2_boss.yml:0.X
- phase_3_boss.yml:0.Y
注: 最初にスポーンさせるボス(他のすべてのフェーズを列挙する phases: エントリを含むもの)がフェーズ 1 のボスです。フェーズ 1 のボスファイルは、自身の phases: エントリで自分自身を列挙すべきではありません。
このメカニクスの基本的な意図は、管理者が戦闘中にカスタムボスの属性を変更できるようにすることです。上記の設定形式を使うことで、フェーズごとに設定ファイルを完全に変更できます。つまり、パワー、ダメージ倍率、体力倍率、エンティティタイプ、変装、着用する防具など、99.99% の属性を変更できます。
これを実現するために、EliteMobs は戦闘中にあなたのボスを削除し、次のフェーズのバージョンに即座に置き換えます。この処理は瞬時に行われるため、わざと派手にしたい場合を除き、かなりシームレスになる傾向があります。スムーズな視覚効果を確保するため、ボスは移行後に 1 秒間の戦闘猶予期間を得ます。
例
次のフェーズボスの例を見てみましょう。
ファイル: phase_1_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: STRAY
powers:
- attack_gravity.yml
phases:
- phase_2_boss.yml:0.60
- phase_3_boss.yml:0.30
ファイル: phase_2_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.yml
- arrow_fireworks.yml
ファイル: phase_3_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: WITHER_SKELETON
powers:
- arrow_rain.yml
これは有効なフェーズボスを構成します。phase_1_boss.yml をスポーンさせると、上記の属性を持つ Stray がスポーンします。体力の 60% までダメージを受けると、設定ファイルに - phase_2_boss.yml:0.60 と記載されているため、同じ場所で phase_2_boss.yml で形成されたカスタムボスに即座に置き換わります(phase_2_boss.yml はそのカスタムボスのファイル名、0.60 は体力 60% です)。フェーズ 2 のボスは体力 60% でスポーンする点に注意してください。そのフェーズに変化するのがその時点だからです。 ボスは phase_2_boss.yml ファイルに列挙されたパワーを持ちます。フェーズ 2 のボスが体力の 30% までダメージを受けると、フェーズ 3 用に設定されたボスをスポーンさせます。フェーズ 3 のパワーは以前のものとは無関係である点に注意してください。他のほぼすべての属性と同じく、フェーズ間でパワーを完全に変更できます。
高度な内容
継承されるメカニクス
次は、フェーズごとに変化しないものの一覧です。
-
チェーン内の最初のフェーズボスが、ボスがどのフェーズを経るかを決定します。つまり、フェーズ内の他のボスには phases エントリを置くべきではありません。
-
脅威テーブル/ダメージテーブルは同じままです。つまり、戦利品の分配や高度なアグロシステムはフェーズ変更の影響を受けません。
-
フェーズの切り替えは失った体力の % に基づいており、これはフェーズ間で保持されます。つまり、ボスが体力 50% でフェーズ 2 に入るよう設定されている場合、フェーズ 1 のボスを置き換えて現れるボスも依然として体力 50% になります。これはまた、各フェーズが問題を引き起こすことなく、まったく異なる体力量を持てることも意味します。
-
フェーズボスは、デフォルトの戦闘外ボス回復システムによって体力が全回復した場合、フェーズ 1 に戻ります。
-
リージョナルボスでもあるフェーズボスは、すべてのフェーズで同じリーシュ半径とタイムアウトのメカニクスを共有し、リスポーンタイマー終了後はフェーズ 1 のボスとしてリスポーンします。リスポーンのクールダウンやその他のリージョナルボス設定は、常にフェーズ 1 のボス設定から取得されます。
フェーズ固有のスポーン地点
デフォルトでは、ボスはフェーズ間を移行する際に現在の場所に留まります。しかし、phaseSpawnLocation 設定を使って、フェーズに入る際にボスを特定の場所にテレポートさせることができます。
ファイル: phase_2_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.yml
- arrow_fireworks.yml
phaseSpawnLocation: world_name,100,64,100,0,0
ボスを同じワールド内に留めたままテレポートさせることもできます。
phaseSpawnLocation: same_as_boss,100,64,100,0,0
これは、ボスが別のアリーナや場所にテレポートする劇的なフェーズ移行を作るのに便利です。
警告
次は、最初は直感に反するかもしれない動作をするメカニクスの一覧です。
-
フェーズボスがいずれかのフェーズ中に倒された場合、そのフェーズの戦利品をドロップします。つまり、誰かがフェーズボスをあまりに速く(1 撃で)倒すことに成功すると、実際には死亡し、そのボスファイルに設定された戦利品をドロップしますが、それは必ずしも最終フェーズのものとは限りません。これは、このフェーズボスのすべてのボスファイルで同じルートテーブルを設定するか、フェーズボスが数撃で倒すことが不可能なほど十分な HP を持つようにすることで修正できます。あるいは、フェーズをスキップできた人向けに特別なルートテーブルを用意することもできます。
-
フェーズボスは実際には戦闘中にカスタムボスをスポーンさせるため、スポーン時に一連のスポーンルーチン全体を実行します。そのため、スポーンメッセージやスポーン時に実行されるコマンドには注意してください。さらに、フェーズボスはフェーズが変わっても死亡せず、単に別のものと入れ替わるだけです。つまり、死亡時に実行されるコマンドは、最後のフェーズボスの場合、またはプレイヤーが十分なダメージを与えてフェーズをスキップできた場合にのみ実行されます。スポーン時に実行されるコマンドは、フェーズ変更にフックするために使用できます。注: ボスが体力全回復によってフェーズ 1 にリセットされる際には、スポーンメッセージは送信されません。ただし、戦闘中にフェーズ 2、3 などへ移行する際や、リージョナルボスがクールダウン後にリスポーンする際には、スポーンメッセージは送信されます。
-
フェーズボスは、フェーズ間でマウントした状態になったり、マウントしていない状態になったりできます。マウントが倒される前にフェーズボスが倒された場合、マウントは次のフェーズへ持ち越されます。ボスが全回復した場合、フェーズ 1 でエンティティにマウントするよう設定されていない限り、マウントは削除され、ボスはマウントしていない状態になります。
-
フェーズ間で新しいカスタムボスがスポーンされるため、1 回限りのスポーンメカニクスはフェーズ間や全回復時にリセットされます。
ヒントとテクニック
-
装備やエンティティタイプが戦闘中に変更できるという事実を利用して、戦闘を通じてボスがどんどん危険に(あるいはどんどん安全に)見えるようにできます。
-
可能ではありますが、特定のデザイン上の目標がない限り、フェーズボスの持つパワーはフェーズ間であまり大きく変えないのがおそらく最善です。プレイヤーは、戦闘を通じて自然に感じられる進行をより楽しむ傾向があるからです。
-
onSpawn コマンドを使って、フェーズ間でコマンドを実行できます。
-
song設定オプションを使って、各フェーズに異なる音楽を設定できます。音楽は、ボスが新しいフェーズに入ると自動的に切り替わります。 -
フェーズを使って、ボスを近接モードから遠隔モードへ、またその逆へ切り替えることができます。
-
フェーズボスは、多くの HP を持つ手強いボスとして作られました。通常は、ダンジョンの最終ボス遭遇や、大規模なワールドボスとして使うのが最も適しています。
-
遭遇を設計する際は、フェーズ間でプレイヤーが増援を倒しきれない可能性があることを念頭に置いてください。
-
ボスは好きなだけフェーズを持てますが、フェーズが多いほど、各フェーズを意味のあるものにするためにより多くの体力が必要になります。
API 連携
プラグイン開発者向け: EliteMobs は、ボスがフェーズ間を移行する際に ElitePhaseSwitchEvent を発火します。このイベントは、フェーズ移行中にカスタムの動作やエフェクトを作成するために使用できます。
@EventHandler
public void onPhaseSwitch(ElitePhaseSwitchEvent event) {
CustomBossEntity boss = event.getCustomBossEntity();
PhaseBossEntity phaseBoss = event.getPhaseBossEntity();
// Your custom logic here
}