「if~elseと条件式関数(イベントの発生と条件分岐)」の編集履歴(バックアップ)一覧に戻る

if~elseと条件式関数(イベントの発生と条件分岐) - (2024/02/29 (木) 16:09:43) のソース

**&color(green){if~else文の構文}
if (条件式) { 
  関数 
} else { 
  関数 
} 

if (条件式) { 
  関数 
} 
else if (条件式) { 
  関数 
} 
else { 
  関数 
} 

**&color(green){while文の構文}
while (条件式) { 
  関数 
} 

while (条件式) {
  &bold(){continue()}  条件式のトップに戻る(この際、再度条件式を満たすかを確認する。満たさない場合、ループから抜ける)
  &bold(){break()}    このwhileループから抜ける
}

**&color(green){rif文}
rif (条件式) { 
  関数 
}
&color(blue){rif}文は戦闘中イベントで用います。
戦闘中イベントでの&color(blue){if}文は一度真が返って内部が実行されると消滅しますが、&color(blue){rif}文は繰り返し判定されて実行されます。


**&color(green){条件式内の構文ルール}
-条件式内では&color(magenta){数値変数}を記述するとそのまま数値として見なされます。
-等値性比較&color(blue){==}, &color(blue){!=}の式中に限って、先頭に&color(blue){@}を記すと&color(blue){文字変数}と見なされます。
-そこ以外では&color(magenta){数値変数}とみなされるようです。(きのこたけのこ戦争・IFの記述から推測)

二項演算子&color(blue){==}、&color(blue){!=}の比較式では、
どちらかの先頭に&color(blue){@}を付けると文字変数と見なされ文字列の比較となります。
>if (@textvar == goto)   文字変数textvarの要素が「goto」と等しいかを調べる。
>if (@textvar != goto)   文字変数textvarの要素が「goto」と異なるかを調べる。
文字変数が空文かどうかを調べる時は以下の様にします。
>if (@textvar == @)   @は空文を示します
単項式では結果が0でないなら「真」となり、0なら「偽」となります。
>if (isPlayer(evt1))
>if (var1)    数値変数 var1 が0以外なら真

-演算子の優先順位
1、( )内
2、*  /  %
3、+  -
4、==  !=  <=  >=  <  > 
5、&&(論理積) 
6、||(論理和) 
ここでの&color(blue){%}演算子は百分率計算です。「var % 75」とすると変数varの数値の75%の数値が返ります。


**&color(green){条件式で使われる関数}
赤色の引数には&color(red){文字変数}が使えます(先頭に @ を付けると文字変数と見なされます) 
グレー色のは以前の関数名です(それも引き続き使えます)
:yet(イベント)|
返値:&color(blue){1 = イベント未発生、0 = イベント発生済み}
引数にはevent構造体のタグ名を指定する。
event()関数でイベントを発生させた時に自動的にセットされる内部フラグを調べる。
:rand()|
返値:&color(blue){0~99の乱数}
:count(文字変数)|
返値:&color(blue){文字変数が持つ要素の数}
:has(文字変数, &color(red){文字列}, &color(red){文字列}, ‥)|
返値:&color(blue){1 = 全部含んでいる、 0 = そうじゃない}
:reckon(文字変数, &color(red){文字列})|
返値:&color(blue){文字変数内に含まれてる文字列の数}
:equal(文字変数, &color(red){文字列})|
返値:&color(blue){1 = 二つの引数が等しい、 0 = そうじゃない}

:ptest(領地, ユニット)|
返値:&color(blue){領地に存在するユニットの数}
内政モード用のチェック関数です。
引数の領地には内政領地の識別子を、ユニットには内政ユニットの識別子を記述して
内政ユニットの数量によるイベントトリガとしてください。

:getMode()|
返値:&color(blue){0 = easy、1 = normal、2 = hard、3 = luna}
進行中ゲームの難易度を調べる。
:isScenario(scenario構造体の識別子)|
返値:&color(blue){1 = 引数のシナリオ進行中、0 = そうじゃない}
:isGameClear()|
返値:&color(blue){1 = ゲームクリア状態、0 = 未クリア}
現在ゲームクリア状態か調べる。
:isWatching()|
返値:&color(blue){1 = 観戦モード、0 = 観戦モードじゃない}
昔はisNPM()だったようです
:isWorld()|
返値:&color(blue){1 = 世界地図シーン(簡易戦闘中)、0 = 戦場シーン}
:isEvent()|
返値:&color(blue){1 = 戦場シーン、0 = 世界地図シーン(簡易戦闘中)}
:isWorldMusicStop()|
返値:&color(blue){1 = ワールドBGMフラグがOFF、0 = ワールドBGMフラグがON}
:isPeace()|
返値:&color(blue){1 = 標準クリア状態、0 = 未クリア状態}
残存する全勢力が敵国と隣接してないか調べる。
全勢力が敵国と隣接してなかったらゲームクリア状態と判定されます。

:isNewTurn()|
返値:&color(blue){1 = 新ターン開始時、0 = そうじゃない}
新ターン開始時か調べる。
独自ルールによるEDチェックなど新ターン開始時のみ実行させるイベントがある時に使ってください。
:isPlayerTurn()|
返値:&color(blue){1 = プレイヤー勢力ターン開始時、0 = そうじゃない}
プレイヤー勢力のターン開始時か調べる。
:isPlayerEnd()|
返値:&color(blue){1 = プレイヤー勢力ターン終了時、0 = そうじゃない}
プレイヤー勢力のターン終了時か調べる。
:isComTurn()|
返値:&color(blue){1 = COM勢力ターン開始時、0 = そうじゃない}
:isComTurn(&color(red){勢力})|
返値:&color(blue){1 = 引数COM勢力のターン開始時、0 = そうじゃない}
:istoWorld()|
返値:&color(blue){1=戦闘画面からワールドマップ画面に切り替わる時、0 = そうじゃない}

:isPlayer(&color(red){勢力/ユニット})|
返値:&color(blue){1 = プレイヤー勢力、0 = CPU}
勢力/ユニットがプレイヤー担当か調べる。
:isNpc(&color(red){勢力/ユニット}, &color(red){勢力/ユニット}, ‥)|
返値:&color(blue){1 = 全てCPU勢力、0 = そうじゃない}
列挙された勢力/ユニットが全てCPU担当か調べる。
:isAlive(&color(red){勢力/ユニット}, &color(red){勢力/ユニット}, ‥)|
返値:&color(blue){1 = 全て生存、0 = そうじゃない}
列挙された勢力/ユニットが全て生存してるか調べる。
:isEnable(&color(red){ユニット})|
返値:&color(blue){1 = 登場中、0 = そうじゃない}
ユニットが登場中か調べる
:isTalent(&color(red){ユニット})|
返値:&color(blue){1 = 人材、0 = そうじゃない}
ユニットが人材か調べる
:isMaster(&color(red){ユニット})|
返値:&color(blue){1 = マスター、0 = そうじゃない}
ユニットがマスターか調べる
:isLeader(&color(red){ユニット})|
返値:&color(blue){1 = 部隊長、0 = そうじゃない}
ユニットが勢力所属の部隊長か調べる
:isVassal(&color(red){ユニット})|
返値:&color(blue){1 = 陪臣、0 = そうじゃない}
ユニットが陪臣になってるか調べる
:isRoamer(&color(red){ユニット})|
返値:&color(blue){1 = 放浪中、0 = そうじゃない}
ユニットが放浪中か調べる
:isRoamLeader(&color(red){ユニット})|
返値:&color(blue){1 = 放浪中のリーダー、0 = そうじゃない}
ユニットが放浪中のリーダーか調べる
:isArbeit(&color(red){ユニット})|
返値:&color(blue){1 = 傭兵、0 = そうじゃない}
ユニットが傭兵か調べる
:isDone(&color(red){ユニット})|
返値:&color(blue){1 = 行動済み、0 = そうじゃない}
ユニットが行動済みか調べる

:isEnemy(&color(red){ユニット/領地}, &color(red){ユニット/領地})|
返値:&color(blue){1 = 違う勢力、0 = 同じ勢力}
両ユニットor両領地の所属勢力が異なるか調べます。
:isFriend(&color(red){ユニット/領地}, &color(red){ユニット/領地})|
返値:&color(blue){1 = 同じ勢力、0 = 違う勢力}
両ユニットor両領地の所属勢力が同じか調べます。
:isJoin(&color(red){勢力}, &color(red){勢力})|
返値:&color(blue){1 = 隣接、0 = 非隣接}
勢力の領地が隣接してるか調べる
:isJoin(&color(red){領地}, &color(red){領地})|
返値:&color(blue){1 = 連結、0 = 連結してない}
領地が連結してるか調べる
:isJoin(&color(red){領地A}, &color(red){領地B}, on)|
返値:&color(blue){1 = 連結、0 = 連結してない}
第三引数にonを記すと領地Aの所属勢力領内で連結してるか調べます。
:isNext(&color(red){領地}, &color(red){領地})|
返値:&color(blue){1 = 隣接、0 = 隣接してない}
領地が隣接してるか調べる。
:isNext(&color(red){領地}, &color(red){領地}, 距離数値)|
返値:&color(blue){1 = 隣接、0 = 隣接してない}
距離数値を指定すると、例えば2とすると2マス以内にいるか判定できます。
:isWar(&color(red){勢力}, &color(red){勢力})|
返値:&color(blue){1 = 交戦した、0 = まだ交戦してない}
勢力の間で1度でも戦争したか調べる
:isInvade(&color(red){勢力A})|
返値:&color(blue){1 = 勢力Aが攻撃した、0 = そうじゃない}
isWar()の後で使ってください。直前の戦闘での攻撃側を調べます。
ヴァーレントゥーガ本体に同梱されているendless_v3.51/event/triggar(gj).datに記載されている2引数についての説明は最新版のVahrenに対しては不正確です。1番目の引数しか見ません。
:isLeague(&color(red){勢力}, &color(red){勢力})|
返値:&color(blue){1 = 同盟中、0 = 非同盟}

:getTurn()|
返値:&color(blue){ターン数}
:countPower()|
返値:&color(blue){現在生存してる勢力の数}
:countSpot(&color(red){勢力})|
返値:&color(blue){勢力が所持してる領地数}
:countForce(&color(red){勢力})|
返値:&color(blue){勢力の総戦力}
:countGain(&color(red){勢力})|
返値:&color(blue){勢力の総経済値}
:countMoney(&color(red){勢力})|
返値:&color(blue){勢力の軍資金}

:inPower(&color(red){勢力}, &color(red){領地/ユニット}, &color(red){領地/ユニット}, ‥)|
返値:&color(blue){1 = 全て所持、0 = 所持してない}
勢力が、列挙された領地/ユニットを全て所持してるか調べる。
:inSpot(&color(red){領地}, &color(red){ユニット}, &color(red){ユニット}, ‥)|
返値:&color(blue){1 = 全ている、0 = いない}
領地に、列挙されたユニットが全ているか調べる(放浪中だといないと見なされます)
:inRoamSpot(&color(red){領地}, &color(red){ユニット}, &color(red){ユニット}, ‥)|
返値:&color(blue){1 = 全ている、0 = いない}
領地に、列挙されたユニットが放浪状態で全ているか調べる

**&color(green){主に戦闘シーンで使われる条件式関数}
:inBattle(&color(red){ユニット/勢力}, ‥)|
返値:&color(blue){1 = 全ている、0 = いない}
現在の戦闘シーンに列挙されたユニット、又は勢力が全部いるか調べる
:isSameArmy(&color(red){ユニットA}, &color(red){ユニットB})|
返値:&color(blue){1 = 同じ陣営、0 = そうじゃない}
現在の陣営で両ユニットの所属陣営(青か赤)が異なるか調べます。
:isNowSpot(&color(red){領地})|
返値:&color(blue){1 = この領地で現在戦闘中、0 = そうじゃない}

:getTime()|
返値:&color(blue){システム内の戦闘カウント}
戦闘カウントとは戦闘開始からの経過時間を示すシステム内の数値です。
画面左上ウィンドウの制限時間が1減ると戦闘カウントは10増えてます。
これは&color(blue){resetTime()}関数でゼロにできます。
:getLimit()|
返値:&color(blue){残り制限時間}
画面左上の制限時間ウィンドウの数値が返ります。
:isInterval(数値)|
返値:&color(blue){1 = 指定数値の間隔、0 = そうじゃない}
一定間隔毎に1が返る関数です。戦闘カウントが数値で割り切れたら1が返ります。
&color(blue){rif}の条件文で用いる必要があります。

:isDead(&color(red){ユニット}, &color(red){ユニット}, ‥)|
返値:&color(blue){1 = 全部やられた、0 = そうじゃない}
列挙されたユニットが全部やられてるか調べる
:isAnyDead(&color(red){ユニット}, &color(red){ユニット}, ‥)|
返値:&color(blue){1 = 一人以上やられた、0 = そうじゃない}
列挙されたユニットの内、誰かがやられたか調べる
:isAllDead(&color(red){ユニット})|
返値:&color(blue){1 = 全滅した、0 = そうじゃない}
指定ユニットの所属陣営が全滅したか調べる
:isRedAlive()|
返値:&color(blue){1 = 「赤」陣営が生存、0 = 「赤」陣営が全滅}
:isBlueAlive()|
返値:&color(blue){1 = 「青」陣営が生存、0 = 「青」陣営が全滅}
:getRedCount()|
返値:&color(blue){「赤」陣営の生存ユニット数}
:getBlueCount()|
返値:&color(blue){「青」陣営の生存ユニット数}

:getLife(&color(red){ユニット})|
返値:&color(blue){残りHPの百分率(0~100)}
:countUnit(&color(red){ユニット})|
返値:&color(blue){指定ユニットの生存数。一般兵士の識別子を指定してください。}
:isActive(&color(red){ユニット})|
返値:&color(blue){1 = アクティブ部隊、0 = そうじゃない}
そのユニットの部隊がアクティブか調べる

:getDistance(&color(red){ユニット}, &color(red){ユニット})|
返値:&color(blue){ユニットとユニットの距離ドット}
指定ユニット同士の距離ドットを返します。
:getDistance(&color(red){ユニット}, x座標, y座標)|
返値:&color(blue){ユニットと指定座標の距離ドット}
指定ユニットと指定座標の距離ドットを返します。
引数のxy座標はMapMakerの座標を用いてください。内部でクォータービュー座標に変換されます。
:isPostIn((red/blue), &color(red){ユニット}, 数値)|
返値:&color(blue){1 = 指定ユニットの数値半径内にいる、0 = そうじゃない}
指定ユニットの数値半径ドット以内に「赤」「青」陣営のユニットが一人でもいるか調べます。
:isPostIn((red/blue), x座標, y座標, 数値)|
返値:&color(blue){1 = 座標の数値半径内にいる、0 = そうじゃない}
指定座標の数値半径ドット以内に「赤」「青」陣営のユニットが一人でもいるか調べます。
引数のxy座標はMapMakerの座標を用いてください。内部でクォータービュー座標に変換されます。
:isPostIn((red/blue), left座標, top座標, right座標, bottom座標)|
返値:&color(blue){1 = 指定領域内にいる、0 = そうじゃない}
指定座標の四角形内に「赤」「青」陣営のユニットが一人でもいるか調べます。
引数の座標はMapMakerの座標を用いてください。内部でクォータービュー座標に変換されます。

:isDungeon()|
返値:&color(blue){1 = ダンジョンにいる、0 = そうじゃない}
:isDungeon(dungeon構造体の識別子)|
返値:&color(blue){1 = 指定ダンジョンにいる、0 = そうじゃない}
:isDungeon(dungeon構造体の識別子, 数値)|
返値:&color(blue){1 = 指定ダンジョンの(数値)階にいる、0 = そうじゃない}
:getClearFloor(dungeon構造体の識別子)|
返値:&color(blue){引数ダンジョンの到達階}

**&color(red){詳細不明な条件式関数}
:eqVar(引数不明)|
:inVar(引数不明)|
:amount(引数不明)|
:conVar(引数不明)|
:isSelect(引数不明)|
:countPost(引数不明)|
:isWhoDead(引数不明)|
:countSkill(引数不明)|
:getLifePer(引数不明)|
:isGameOver(引数不明)|




- このあたりの関数はファーレントゥーガと比べて劇的に改善されてる点だな  -- mititdoll  (2023-08-18 01:40:27)
#comment(size=60,vsize=2)