Call条件・スキルの追加方法 - TUSB/TheUnusualSkyBlock GitHub Wiki

Call条件・スキルの追加方法

スキルを発動する条件とスキルの追加する方法をまとめる。

目次

条件の追加方法

条件の分岐を追加する。

条件分岐追加フォルダ
条件分岐追加ファイル
enemy:ai/call/condition/condition/ファイルの条件フラグの下に

execute if data storage mob_data: Call.Condition{Name:"<条件名>"} run function enemy:ai/call/condition/<条件判定ファイル名>

を追加する。
Name:"<条件名>"のところにCall[].Condition[].Nameで記述する条件名を書いておく。
<条件判定ファイル名>は適切な名前を付けておく。

条件判定ファイルを作成する。

条件判定ファイル
enemy:ai/call/condition/condition/フォルダの中に、<条件ファイル名>"で付けた名前のファイルもしくはフォルダを作成する。
あとは条件の内容を自由に作成しましょう。
ファイルの最後に、条件に成功した場合は_ Calc1に設定し、条件に失敗した場合は_ Calc0に設定する。

注意点

条件データについては、mob_data: Conditionに記述されています。

スキルの追加方法

スキルの分岐を追加する

スキル追加分岐フォルダ
スキル追加分岐ファイル
enemy:ai/call/callファイルに

execute if data storage mob_data: Call{Name:"<スキル名>"} run

を追加する。
Name:"<スキル名>"のところにCallで記述するスキル名を書いておく。
runの後には、1コマンドで済むならそのコマンドを書き、functionにつなげるならfunctionコマンドでスキルファイルを呼び出す。

スキルファイルを作成する

スキルが上の分岐ファイル内で完結しているなら追加しなくてもよい。
スキルファイル追加
skill:enemy/フォルダの中に、Name:"<スキル名>"で付けた名前のファイルもしくはフォルダを作成する。
あとはスキルの内容を自由に作成しましょう。

注意点

モブのAIの編集をするときは、oh_my_dat:ではなく、mob_data:で編集してください。
スキルデータについては、mob_data: Callに記述されています。

Name:"Laser"の追加方法

レーザーの分岐を追加する

レーザー追加フォルダ
skill:enemy/laser/main/forkファイルに

execute if data storage mob_data: Call{Laser:"<レーザー名>"} run function skill:enemy/laser/loop/<LaserFunction>

を追加する。
Laser:"<レーザー名>"のところにCallで記述するレーザー名を書いておく。
runの後には、レーザーの処理を行うfunctionへコマンドで呼び出す。<LaserFunction>をfunctionのファイル名にする。

レーザーの処理を追加する

レーザーでは主に、ダメージを与える・演出を表示する・照射距離を設定する、などの処理を記述する。

ダメージの与え方

skill:enemy/laser/loop/test

execute positioned ^ ^ ^0.5 as @a[gamemode=!creative,gamemode=!spectator,scores={SnowballTime=0..},dx=0,dy=0,dz=0] run function skill:enemy/laser/main/damage

プレイヤーへのセレクターには、[scores={SnowballTime=0..}]を追加しておくと良い。これは投てき物ダメージのクールダウン用である。
ダメージを与えるプレイヤーをasで指定して、skill:enemy/laser/main/damageを実行する。

演出を表示

makeup名前空間にmakeup:skill/enemy/laser/loop/<LaserFunction>ファイルを用意し、このfunctionを実行させる。レーザーが照射された線上に演出が表示される。

照射距離の設定

Loop指定をするときに、1Loopにつき何mレーザーが進むかを指定する。

skill:enemy/laser/loop/test

execute store result storage mob_data: Call.Loop int 0.99999 run data get storage mob_data: Call.Loop
execute unless data storage mob_data: Call{Loop:0} positioned ^ ^ ^0.5 if block ^ ^ ^ air run function skill:enemy/laser/loop/test

Loop回数はCall.Loopに保存されており、これを0.99999倍して同じところに保存すると値が1減る。(3を0.99999倍すると、2.99997だが切り捨てで2となる。)
unless data storage Call{Loop:0}でLoopが0以外のときに実行、さらに、if block ^ ^ ^ airで、空気のときのみレーザー処理が実行されるようになる。
positionded ^ ^ ^xで1Loopにつきxmレーザーが進むという指定ができる。

追加した後

条件・スキルの名前、条件データ・スキルデータ、使用方法などをシステム班やモブ班に共有してください。

⚠️ **GitHub.com Fallback** ⚠️