アットウィキロゴ

変数への足し算など

例として次のような変数「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