-
-
Notifications
You must be signed in to change notification settings - Fork 2
プレイヤースキルの作り方
職業スキル・TUSBメモリーの実行内容の作り方についてまとめる
データパックのskill
名前空間内にスキルの内容が格納されている。
skill
└ fuctions
└ act
└ <job>
└ <skill_name>
└ act0.mcfunction
各トリガーからスキルが実行されたときに、最初に呼び出されるファイルは上の図のact0.mcfunction
である。<job>
や<skill_name>
については v13アイテム - スキル比較New のJob
列やSkill
列から引用すること。
<skill_name>
以下には自由にファイルやフォルダを追加してよい。
以下のスコアボードの値を変更してはいけない。
スキルの効果で変更する必要があればこの限りではない。
スコアホルダー | オブジェクト | 使用用途 |
---|---|---|
_ | MP | 減少MP値 |
_ | Interval | 次のインターバル値 |
スキル発動時に持っているアイテムはitem: Item
に保存されている。
発動するスキルのレベルは_ Level
スコアに保存されている。
スキルで使用するエンティティにはNativeTask
,Skill
タグの付与が必要。
説明を表示
他のモブに対してダメージを与えることは多用される効果だが、与えるまでが少し複雑である。
- ダメージ値を取得する
各スキルに登録されているダメージ値を取得する。
skill: Data.<Job>[{Name:"<スキルの名前>",Level:x}].Damage
を参照し、skill: Damage
へ保存する。
execute if score _ Level matches 1 run data modify storage skill: Damage set from storage skill: Data.Ninja[{Name:"手裏剣",Level:1}].Damage
execute if score _ Level matches 2 run data modify storage skill: Damage set from storage skill: Data.Ninja[{Name:"手裏剣",Level:2}].Damage
execute if score _ Level matches 3 run data modify storage skill: Damage set from storage skill: Data.Ninja[{Name:"手裏剣",Level:3}].Damage
execute if score _ Level matches 4 run data modify storage skill: Damage set from storage skill: Data.Ninja[{Name:"手裏剣",Level:4}].Damage
execute if score _ Level matches 5 run data modify storage skill: Damage set from storage skill: Data.Ninja[{Name:"手裏剣",Level:5}].Damage
<Job>
の職業名には、 v13アイテム - スキル比較New のJob
列の最初を大文字にしたものを記入、Name:"<スキルの名前>"
には、 v13アイテム - スキル比較New のスキル
列のものを記入する。ⅠⅡなどのレベル表示は記入してはいけない。execute if score _ Level matches x run ...
のxとData.<Job>[{Name:"<スキルの名前>",Level:x}]
のxを同じものにし、スキルレベルに合ったダメージ値を取得する。
- ダメージ値を補正する
各属性のダメージ値に、エンチャントでの補正やアイテムダメージの加算補正をする。
Effectiveness
を指定しているスキルの場合、アイテムによるダメージを加算しなければいけないため
function skill:damage/add/skill/weapon
を実行する。
スキルに登録されているダメージのみを補正する場合
function skill:damage/add/skill/magic
を実行する。
- ダメージを与える
Mob
タグを持ったエンティティに対してfunction skill:damage/apply/
を実行する。
例 半径6m以内のMobにダメージを与える。
execute as @e[tag=Mob,distance=..6] run function skill:damage/apply/
説明を表示
スキルの中には手裏剣のような何かを投てきしてそれが当たればダメージを与えるといったものがある。
- ダメージ値の取得・補正
こちらは「ダメージを与える」で解説したものと同じになる。 - 投てき物を召喚する
コマンドの実行位置を目線の高さに合わせたうえで、目線の少し前に矢を召喚する。
execute anchored eyes run summon arrow ^ ^ ^0.5 {Tags:[Skill,Shuriken,NativeTask,FlyingRequired,KillInGround,HasSkillDisplay],NoGravity:1b,damage:1,Color:3752270,SoundEvent:"minecraft:item.trident.hit",Passengers:[{id:"minecraft:item_display",Tags:[SkillDisplay],item:{id:"minecraft:firework_star",Count:1b,tag:{CustomModelData:122,Explosion:{Type:0b,Colors:[I;16777215]}}},billboard:"center"}]}
必要なTagsについて解説。
Tags | 用途 |
---|---|
Skill | スキルに使用するエンティティに付与 |
(Shuriken) | スキルを判別するためのタグ |
NativeTask | NativeTaskの処理を実行する |
KillInGround | 地面に刺さったときに自身をkillする |
HasSkillDisplay | 見た目用のitem_displayを持っているときに付与 |
※あくまで手裏剣のTagsであり、一例である。
NoGravity
のNBTタグをつけることで、投てき物の挙動が変化する。NoGravity:true
にすることで直線状に飛ばすことができる。NoGravity:false
もしくは未指定にすることで放物線を描いて飛ばすことができる。
Passengersで見た目用のアイテムディスプレイを乗せることができる。アイテムディスプレイにはSkillDisplay
タグを付与する必要がある。
- 投てき物にダメージを保存
投てき物がMobに当たったときに与えるダメージ値を保存する。
投てき物に対して実行する。召喚直後のエンティティにはInitialized
タグが付与されていないため、[tag=!Initialize]
のセレクター引数が使える。
execute as @e[tag=Shuriken,tag=!Initialized,distance=..3] run function skill:damage/save
- 投てき物にOwnerを設定
投てき物を飛ばしたプレイヤーのUUIDを投てき物のOwnerに指定する。これにより、プレイヤーが直接投てきしたのと同じことになる。
data modify entity @e[tag=Shuriken,tag=!Initialized,distance=..3,limit=1] Owner set from entity @s UUID
- 投てき物を飛ばす
投てき物に対してベクトルと速度を指定して飛ばす。投てき物に対して実行する。
execute as @e[tag=Shuriken,tag=!Initialized,distance=..3] positioned 0.0 0.0 0.0 positioned ^ ^ ^1.55 run function calc:throw_projectile/
上のコマンドのpositioned ^ ^ ^
でベクトルと速度を指定する。3つ目の^が視線方向へのベクトルとなる。
- Mobに当たったときの動作を追加する
ダメージを与えるだけなら追加する必要はないが、当たったときに演出を表示したいときなどはここの手順に従って追加する必要がある。
playr:trigger/projectile/skill
のfunctionがMobに当たった直後に実行される。これはダメージ値を投てき物から読み込んだ後でMobにダメージを与える前である。
ここにスキルごとに実行したいfunctionに分岐させる。 - 地面に刺さったときの動作を追加する
Mobに当たらず、地面や壁に刺さったときに動作するものを追加する。
entity:in_ground
のfunctionが地面に刺さったときに実行される。
ここにスキルごとに実行したいfuncitonに分岐させる。
説明を表示
-
召喚する
シートのMobを召喚する場合、v13Mob - スポナー管理シートのsummon
列からコピペ。もしくはMOBのsummonコマンドの作り方を参考にsummonコマンドを作成する。
シートのMobの場合、1tick後にワールドに現れるためMobへ何かを実行することはできない。
普通のsummonコマンドで召喚したエンティティには何かを実行することができる。 -
召喚位置を調整する
calc:geometry/search_forward/
のfunctionを使うことで、指定距離までの位置を探索・設定する。詳しい使用方法はCalcファンクションの使い方#前方探索を参照。
0-0-0-0-0
の位置を基準に以降のコマンドを実行していく。
0-0-0-0-0 基準にfunction実行
execute at 0-0-0-0-0 run function
- プレイヤーを回復させる方法
effectで回復させても良いし、HealthHealing
を用いて回復させても良い。
HealthHealing
には回復させる体力量を指定する。これは病気デバフで阻害される可能性がある。
演出コマンドの管理方法を参考に、演出用のfunctionファイルを用意し、それを実行する。
その他追加してほしい具体例があれば教えてね。
v13 アイテム - スキル比較Newの一番下の行に追加していく。職業スキルの場合は、各職業の適切な行に挿入する。
TUSBスプレッドシートの見方#スキル比較newも参照するとよい。
シートに追加できたら、exportツールの使い方を参考に、データパックへ反映する。
Copyright © 2024 TUSB Corporation. All Rights Reserved.
このページの内容もしくは直接リンクを他サイトやSNSへの転載もしくは引用する事を禁止します。