パワーの作成
パワーを書く 2 つの方法
すべてのパワーは ~/plugins/EliteMobs/powers(サブフォルダーもスキャンされます)に置かれ、形式は 2 つあります。
| 形式 | ファイル | 用途 |
|---|---|---|
| Lua | *.lua | 新規に書くものすべて。完全なスクリプト言語で、すべてのボスフック、ループ、状態が使えます。同梱パワーが使っているのはこちらです。 |
| EliteScript | *.yml | このページの残りで説明する宣言的なイベント/アクション形式。引き続き完全にサポートされています。 |
EliteMobs に同梱される 68 個のパワーのほぼすべてが、現在は Lua です。 YAML ベースの Java パワーとして残っているのは bonus_coins.yml、custom_summon.yml、elite_script.yml の 3 つだけです。新しいパワーをゼロから書くなら、最も多くの機能が後ろに控えているのは Lua です — Lua はじめにとボスのフックとライフサイクルから始めてください。
どちらの形式も、powers リストを通じてボスから同じ方法で参照されます。
.lua power supersedes a same-named .yml powerボスが attack_fire.yml を要求すると、EliteMobs はまず attack_fire.lua を探し、存在すればそちらを使用します。Lua 以前のパワー名に対して書かれた古いボス設定がそのまま動作するのはこのためです — powers: リストを書き換える必要はありません。新しい設定では .lua ファイルを直接指定してください。
.lua files are written once, never overwritten同梱される各 Lua パワーは、そのファイルがまだ存在しない場合にのみ powers フォルダーへ書き出されます。一度編集すると、EliteMobs は更新時にもあなたの版を上書きしません — その代わり、上流の修正も受け取れなくなります。改変したコピーが欲しい場合は、新しいファイル名を付けることをおすすめします。
on_zone_enter / on_zone_leave are not fired by Lua zonesどちらのフック名もボススクリプトプロバイダに受け付けられ、読み込みエラーにもなりませんが、Lua パワー内のいかなる処理もこれらを発火させることはできません。これらは EliteScript のゾーンリスナーからのみディスパッチされ、そのリスナーは同じボス上の YAML の eliteScript: が Events: に ZoneEnterEvent または ZoneLeaveEvent を列挙したときに開始されます。Lua パワーしか持たないボスは、これらのフックを含むファイルを読み込んだうえで、決して呼び出しません。
そうした YAML のゾーンスクリプトと意図的に組み合わせるのでない限り、この 2 つのフックを軸に Lua パワーを組み立てないでください。代わりに context.zones:watch_zone(...)(渡した on_enter / on_leave コールバックが直接呼ばれます)、EliteScript の Zone ブロック、または on_game_tick からのポーリングを使用してください。フックとライフサイクルとスクリプトイベントを参照してください。
EliteMobsスクリプティングシステム
このページの残りでは、Elite Scriptの作成方法について説明します!
これは上級機能であり、EliteMobsについての深い知識が必要です。
注意:Elite Scriptはパワーファイルとして、またはカスタムボスファイルに追加できます! パワーファイルとして使用する場合、通常どおりカスタムボスのpowers設定を使用して、ボスに通常のパワーとして追加できます。
EliteScriptの追加
ボスにEliteScriptを追加するには、ボスファイルに以下のエントリを追加します:
eliteScript:
注意:以下は大文字小文字とスペースに非常に敏感です!スペース、改行、全体的なフォーマットが例と一致していることを確認してください!
スクリプトの開始を宣言したら、特定のスクリプトを追加できます。この例では、Exampleというスクリプトを作成します:
eliteScript:
Example:
EliteScriptには5つの異なるセクションがあります:Events、Conditions、Zones、Actions、Cooldowns。Actionsのみが必須です。
簡単な例を見てみましょう:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,0.5,0
Cooldowns:
local: 60
global: 20
このスクリプトは、プレイヤーに攻撃されたときにエリートを上に押し上げ、3秒間再度実行しません(また、Cooldownsセクションの設定により、他のパワーが1秒間トリガーされなくなります)。
スクリプトの構造の一般的なフォーマットがわかったところで、各セクションで何ができるか学びましょう!
Events
上のリンクをクリックして、イベントの使い方を学びましょう!
Targets
上のリンクをクリックして、ターゲットの使い方を学びましょう!
Actions
上のリンクをクリックして、アクションの使い方を学びましょう!
Zones
上のリンクをクリックして、ゾーンの使い方を学びましょう!
Conditions
上のリンクをクリックして、条件の使い方を学びましょう!
Cooldowns
上のリンクをクリックして、クールダウンの使い方を学びましょう!
複数のEliteScriptの追加
1つのイベントに複数のアクションを設定できますが、同じボスに複数のスクリプトが必要な場合はどうすればよいでしょうか?新しいスクリプトエントリを作成するだけです!前の例を拡張して、別のスクリプトを追加しましょう:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,0.5,0
Cooldowns:
local: 60
global: 20
Example2:
Events:
- PlayerDamagedByEliteMobEvent
Actions:
- action: SET_ON_FIRE
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 200
global: 60
この例では、Example2という2番目のスクリプトを追加しました。Example2は、ボスによってダメージを受けたプレイヤーに火をつけます。これはtargetTypeがDIRECT_TARGETに設定されているためです。
このスクリプトのクールダウンは200ティックに設定されており、ボスは10秒ごとにしかプレイヤーに火をつけることができません。
スタンドアロンパワーの作成
スタンドアロンパワーは、ほぼ完全にElite Scriptで構成されています。オプションのフィールドは2つだけです。スタンドアロンパワーが機能するには、~plugins/EliteMobs/powersフォルダに配置する必要があることを忘れないでください。
スタンドアロンパワーの例:
isEnabled: true
powerType: UNIQUE
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
isEnabled
プラグインの他の場所と同様に、パワーが有効かどうかを設定します。
powerType
パワータイプは、パワーがどのように割り当てられるかを設定します。値は次のとおりです:
UNIQUE:パワーは、パワーセクションにパワーが設定されているカスタムボスにのみ適用されます。DEFENSIVE/MISCELLANEOUS/OFFENSIVE:すべてのエリートがこれらのパワーを取得でき、特定のパワーのサブセットにカウントされます。MAJOR_ZOMBIE、MAJOR_SKELETON、MAJOR_BLAZE、MAJOR_ENDERMAN、MAJOR_GHAST:適切なエンティティタイプのエリートのみがこれらのパワーで自然にスポーンでき、メジャーパワーとしてカウントされます。メジャーパワーとして扱われるのはこの 5 種類だけで、それ以外はすべてマイナーパワーとしてカウントされます。
powerType が自然発生エリートに届く仕組み:EliteMobPowers.yml
powerType は、それだけでパワーを自然発生エリートに渡すわけではありません。自然発生エリートが実際に抽選するのは ~/plugins/EliteMobs/EliteMobPowers.yml で、次のリストを持ちます。
| キー | 意味 |
|---|---|
defensivePowers | 自然発生エリートがランダムに引ける防御系パワー |
offensivePowers | 自然発生エリートがランダムに引ける攻撃系パワー |
miscellaneousPowers | 自然発生エリートがランダムに引けるその他のパワー |
majorPowers.<ENTITY_TYPE> | そのエンティティタイプがランダムに引けるメジャーパワー |
disabledPowers.<ENTITY_TYPE> | 共有リストの適用後に、そのエンティティタイプから取り除かれるパワー |
ファイルが最初に生成されるとき、各リストには該当する powerType の読み込み済みパワーがすべてシードされます。その後このファイルが正となり、再シードされることはありません。 そのため、あとから追加したパワー(powers フォルダーに入れた .lua ファイルを含む)は、自分で該当リストに追加しない限り自然発生エリートに現れ始めません。
これらのリストでは .lua のファイル名とレガシーの .yml 名の両方が受け付けられます。生成されるデフォルトは .yml のエイリアスで書き出されます。どのパワーにも解決されない名前は、ファイル名とキーを示すコンソール警告とともにスキップされます。
effect
パワーが使用するビジュアルエフェクトまたはマテリアルを設定します。これは、一部のハードコードされたパワーがビジュアルパーティクルまたはマテリアルトレイルを定義するために使用されます。
| キー | 値 | デフォルト |
|---|---|---|
effect | String | none |
powerCooldown
個別のパワーのクールダウンをティック単位で設定します。この特定のパワーがトリガーされる頻度を制御します。
| キー | 値 | デフォルト |
|---|---|---|
powerCooldown | Integer | 0 |
globalCooldown
すべてのパワーで共有されるグローバルクールダウンをティック単位で設定します。このパワーがトリガーされた後、グローバルクールダウンが終了するまで他のパワーはトリガーできません。
| キー | 値 | デフォルト |
|---|---|---|
globalCooldown | Integer | 0 |
スタンドアロンの Lua パワーを作る
スタンドアロンの Lua パワーは、~/plugins/EliteMobs/powers に置かれた .lua ファイルにすぎません(サブフォルダーも対象です — このフォルダーは再帰的に走査されます)。YAML のラッパーも設定キーもなく、ファイルそのものがパワーです。
return {
api_version = 1,
on_player_damaged_by_boss = function(context)
if context.player == nil then
return
end
context.player:apply_potion_effect("BLINDNESS", 60, 0)
end
}
読み取るべき YAML ヘッダーがないため、この方法で見つかった Lua パワーには固定のメタデータが与えられます。
powerTypeはMISCELLANEOUSです。ファイル側からUNIQUEに設定することはできません。(EliteMobs に同梱される Lua パワーは Java 側にタイプを持っているため、UNIQUE、OFFENSIVE、MAJOR_*などになれます。)effectは未設定です。
実際には、これによってあなたのパワーがランダムなエリートに漏れ出すことはありません。自然発生エリートの抽選プールは EliteMobPowers.yml から取得され、そのファイルは一度存在すれば再シードされないためです — 上記を参照してください。使用するには、ボスの powers: リストにそのパワーを追加してください。
ボスの Lua パワーで使えるフック
| フック | 発火するタイミング |
|---|---|
on_spawn | ボスがスポーンしたとき |
on_game_tick | サーバーティックごと |
on_boss_damaged | ボスが何らかの原因でダメージを受けたとき |
on_boss_damaged_by_player | ボスがプレイヤーからダメージを受けたとき |
on_boss_damaged_by_elite | ボスが別のエリートからダメージを受けたとき |
on_player_damaged_by_boss | ボスがプレイヤーにダメージを与えたとき |
on_enter_combat | ボスが戦闘に入ったとき |
on_exit_combat | ボスが戦闘から離脱したとき |
on_heal | ボスが回復したとき |
on_boss_target_changed | ボスがターゲットを切り替えたとき |
on_death | ボスが死亡したとき |
on_phase_switch | ボスがフェーズを切り替えたとき |
on_zone_enter と on_zone_leave もパーサーには受け付けられますが、Lua パワー内のいかなる処理もこれらを発火させることはできません — これらは同じボス上の EliteScript のゾーンリスナーからのみディスパッチされます。このページ冒頭の警告を参照してください。
これらのフックの中で実際に何を呼べるかについては、Lua はじめに、ボスのフックとライフサイクル、ボスとエンティティを参照してください。
