Call条件・スキルの追加方法 - TUSB/TheUnusualSkyBlock GitHub Wiki
スキルを発動する条件とスキルの追加する方法をまとめる。
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/
フォルダの中に、<条件ファイル名>"
で付けた名前のファイルもしくはフォルダを作成する。
あとは条件の内容を自由に作成しましょう。
ファイルの最後に、条件に成功した場合は_ Calc
を1
に設定し、条件に失敗した場合は_ Calc
を0
に設定する。
条件データについては、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のファイル名にする。
レーザーでは主に、ダメージを与える・演出を表示する・照射距離を設定する、などの処理を記述する。
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レーザーが進むかを指定する。
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レーザーが進むという指定ができる。
条件・スキルの名前、条件データ・スキルデータ、使用方法などをシステム班やモブ班に共有してください。