メインコンテンツへスキップ
  1. SOroom/

HP回復時に現在HPが最大HPを上回ったら最大HPと同じにするマクロ

ゲ制 ティラノスクリプト

戦闘とかでHP回復する時に、現在HPが最大HPを上回ったら最大HPと同じにする処理と、名前指定できるようにしたマクロです。

使用変数例

  • 現在HP:f.hoge_hp
  • 最大HP:f.hoge_maxhp

末尾の文字(_hpとか_maxhp)はどのキャラも共通のものとします。これは分かりやすいのに変えてもらって大丈夫です。ただの思いつきなのでちょっと分かりにくいですね……。

[macro name="HP回復"]
  [iscript]
    f[mp.name+"_hp"] += parseInt(mp.num);
    if(f[mp.name+"_hp"]>=f[mp.name+"_maxhp"]){
        f[mp.name+"_hp"]=f[mp.name+"_maxhp"];
        }
  [endscript]
[emb exp="f[mp.name+'_hp']"]
[endmacro]

これで

@HP回復 name=“hoge” num=“5”

とかとすると、f.hoge_hpの値が回復されます。embをマクロに入れない場合は、[emb exp=“f.hoge_hp”]というように、普通に変数指定すればOKです。maxhpの値がレベルによって変動するなら、f.hoge_maxhpを変動の度に更新するか、判定時にレベルの値を足します(末尾をとりあえず_lvに)。

[macro name="HP回復"]
  [iscript]
    f[mp.name+sf.hp] += parseInt(mp.num);
    if(f[mp.name+sf.hp]>=f[mp.name+sf.maxhp]+f[mp.name]+"_lv"){
        f[mp.name+sf.hp]=f[mp.name+sf.maxhp]+f[mp.name]+"_lv";
        }
  [endscript]
[emb exp="f[mp.name+sf.hp]"]
[endmacro]

回復量に変数を使いたい時は、&で渡します。

@HP回復 name=“hoge” num="&f.kaihuku"

変数名の_hpとか_maxhpとかを、例えば_NOW_HPとか_MAX_HPとかにした場合、iscriptタグ内の同じ文字をそれに置換すれば、問題なく使えます。この末尾の命名規則も変数に入れるという手もあります。

[eval exp="f.hoge_now_hp=1,f.hoge_max_hp=3"]
[eval exp="sf.hp='_now_hp',sf.maxhp='_max_hp'"]
[macro name="HP回復"]
  [iscript]
    f[mp.name+sf.hp] += parseInt(mp.num);
    if(f[mp.name+sf.hp]>=f[mp.name+sf.maxhp]){
        f[mp.name+sf.hp]=f[mp.name+sf.maxhp];
        }
  [endscript]
[emb exp="f[mp.name+sf.hp]"]
[endmacro]

@HP回復 name=“hoge” num="&f.kaihuku"

この辺の変数は配列で作っても良さそうですが、そこまでやると私の頭がこんがらがりそうなのでやめておきます。

一々マクロでパラメータ指定すんのめんどくせえ!という私のようなタイプは、マクロを個人名にして数値ごとに分けてしまうという力業を使うこともあります。

[macro name="ほげ_HP回復_1"]
  [iscript]
    f.hoge_hp += 1;
    if(f.hoge_hp>=f.hoge_maxhp){
        f.hoge_hp=f.hoge_maxhp;
        }
  [endscript]
[emb exp="f.hoge_hp"]
[endmacro]

@ほげ_HP回復_1

これの難点は、キャラ数が増えると同じ処理のマクロをキャラ名だけ変えたものを量産することになるので、コードが増えてしまうことですね。キャラが一人だけとかならこれでもいいかもしれません。

もっと分かりやすいやり方があるような気もしますが、いかんせん基礎知識が! 足りない!