変数への足し算など
例として次のような変数「sample_var」を作ります。
[set_variable]
name=sample_var
value=2
[/set_variable]
「sample_var」には現在2が入ってます。
「sample_var」に4を足したいときには、次のように書くことができます。
[set_variable]
name=sample_var
add=4
[/set_variable]
また、次のように「sample_var」自身を参照することもできます。
[set_variable]
name=sample_var
value="$(4 + $sample_var)"
[/set_variable]
左側の $ を忘れないように。 value="(4 + $sample_var)" と書くと結果は (4 + 2) となってしまいます。
マクロを使って、次のようにも書けます。
{VARIABLE sample_var "$(4 + $sample_var)"}
「繰り返し」処理を行う
その1
例として次のような変数「heroes」を作ります。
[set_variables]
name=heroes
[value]
name="Kerorin"
gold=15
fame=100
[/value]
[value]
name="Lulu"
gold=60
fame=101
[/value]
[value]
name="Pop-On"
gold=90
fame=150
[/value]
[/set_variables]
heroes の中身はこんな感じになっています。
heroes[0番目] { name=>"Kerorin" gold=>15 fame=>100 }
heroes[1番目] { name=>"Lulu" gold=>60 fame=>101 }
heroes[2番目] { name=>"Pop-On" gold=>90 fame=>150 }
Kerorin、Lulu、Pop-On 3人の所持金の合計値を出したいときに、
[set_variable]
name=all_gold
value=$heroes[0].gold
[/set_variable]
[set_variable]
name=all_gold
add=$heroes[1].gold
[/set_variable]
[set_variable]
name=all_gold
add=$heroes[2].gold
[/set_variable]
と一人ずつ足し上げていけば出せますが、人数が多くなってくると大変です。
そんなときに FOREACH マクロを利用すると、次のようにシンプルに書くことができます。
{FOREACH heroes index}
[set_variable]
name=all_gold
add=$heroes[$index].gold
[/set_variable]
{NEXT index}
こうすると、$index に0から順番に数字が代入され、変数「all_gold」に加算されていきます。
注意! {NEXT index を忘れないように!}
書き方のおさらい
{FOREACH "参照元の変数(今回はheroes)" "このマクロの中で繰り返しに使う変数(今回はindex)"}
(処理内容)
{NEXT "FOREACHマクロの第2引数と同じ(今回はindex)"}
その結果、Kerolyn君は自分たちの所持金を正確に把握することができました。
[message]
speaker=Kerolyn
message= _ "俺たちの持ち金は $all_gold 円だね。"
[/message]
その2
別の例をやってみます。
まず、適当にユニットを配置します。
{NAMED_UNIT 1 "Elvish Shaman" 7 15 Lala らら子 ()}
{NAMED_UNIT 1 "Elvish Shaman" 8 15 Lili リリ子 ()}
{NAMED_UNIT 1 "Elvish Shaman" 9 15 Lele レレ子 ()}
{NAMED_UNIT 1 "Elvish Shaman" 10 15 Lolo ろろ子 ()}
次に「Shaman」という変数を作り、値として各ユニットの id を保持します。
[set_variables]
name=Shamans
[value]
id=Lala
[/value]
[value]
id=Lili
[/value]
[value]
id=Lele
[/value]
[value]
id=Lolo
[/value]
[/set_variables]
{FOREACH}マクロを使って、各ユニットのデータを store_unit しつつ kill します。
{FOREACH Shamans n}
[store_unit]
[filter]
id=$Shamans[$n].id
[/filter]
variable=$Shamans[$n].id|_back #<-ここの書き方に注意!
kill=yes
[/store_unit]
{NEXT n}
ここで気をつけるのは、variable の書き方です。
variableを「ユニットID_back(例:Lala_back)」としたいのですが、「$Shamans[$n].id_back」と書いてしまうと、ゲームは「id_back」という名前の値を探しに行ってしまい、「そんな価はありません」とエラーになってしまいます。
このような場合は、区切りたいところに「|」を入れることで、ゲームに認識させることができます。
次に、元いた場所に再登場させてみます。
{FOREACH Shamans m}
[unstore_unit]
variable=$Shamans[$m].id|_back
x=$$Shamans[$m].id|_back.x #<- $のつけ方に注意!
y=$$Shamans[$m].id|_back.y #<- $のつけ方に注意!
[/unstore_unit]
[message]
speaker=Karolyn
message= _ "$$Shamans[$m].id|_back.name が現れた" #<- $のつけ方に注意!
[/message]
{NEXT m}
ここで気をつけなればいけないのは、変数の書き方です。
例えば、Lala の元いた場所のX座標を示すときに x=$Shamans[$m].id|_back.x と書いてしまうと、解釈の結果は x=Lala_back.x となってしまい、そんな座標はないとエラーになってしまいます(実際には何も起こりません。エラーメッセージも出ません。)。
Lala_back.x をさらに解釈させるために、先頭にもうひとつ $ 記号をつける必要があります。
最終更新:2017年12月03日 17:05