条件イベント

概要

条件イベントでは、特定の条件に当てはまる状態になった場合に、あらかじめ指定したメッセージや効果を発生させることができる。
この条件イベントを駆使することで、さまざまな効果を発生させることができる。
例:
1.ある年がきたら、メッセージを表示する
2.ある城を攻略したら、城の名前を改名する
3.ある勢力を滅ぼしたら、他の勢力が臣従する
ひとつの条件イベントにつき、最大50個の条件・50個の効果をつけることができる。
また、条件イベント数の上限は2000である(以前は1000だったがVersion 1.14から倍増)。

発生条件

条件イベントでは、まず、発生条件を設定する。

発生条件には「全て成立したときにイベント発生」と、「一つでも成立したときイベント発生」の2種類ある。
「全て成立したときにイベント発生」を選ぶと、指定した条件が全部成立したときのみイベントが起きる。
「一つでも成立したときイベント発生」を選ぶと、1行でも条件が満たされれば、他の行で条件が満たされていなくてもイベントが起きる。

問題になるのは、両方を混在した条件でイベントを発生させたいときである。
たとえば、「ユーザーが大名Aを担当していて、かつ、城Bまたは城Cを所有したとき」にイベントを起こしたいとする。この場合、一つの条件イベントでは記述できない。
このような場合は二つの条件イベントと変数を使用することになる。

条件イベント1(一つでも成立したとき)
 条件:・ユーザー大名が城Bを所有
    ・ユーザー大名が城Cを所有
 イベント:変数 UserSyoyuFlg に 1 を代入

条件イベント2(全て成立したとき)
 条件:・UserSyoyuFlg = 1 
    ・ユーザーが大名Aを担当
 イベント:~


ループ

条件イベントでは、大名家・城・武将のいずれかのループを設定して、その数と同じ回数だけ指定した変数に1ずつ加算しながら同じイベントを一度に発生させることができる。
例えば特定の大名家に所属する城または武将・特定の大名家に従属・臣従する大名家などのデータを一斉に変化させたい場合などに有効。

サブルーチン

条件イベントでは、他のイベント内で呼び出せるサブルーチンイベントを設定することができる。
例えば特定の城にいる全ての武将の兵数を増減させるイベントを複数作りたいなど、似たような効果のイベントをいくつも作りたい場合に有効。
また、全て成立した時と一つでも成立した時の混在した条件でイベントを発生させたい時に、フラグ変数の代わりにこちらを使うという手もある。

条件イベント1(一つでも成立した時)
 条件:・ユーザー大名が城Bを所有
    ・ユーザー大名が城Cを所有
 イベント:サブルーチン呼び出し(イベントID:UserSyoyu)

サブルーチンUserSyoyu(全て成立した時)
    ・ユーザーが大名Aを担当
 イベント:~


サブルーチン内でサブルーチンイベントを呼び出すことも可能。そのイベント自身を呼び出して条件を満たさなくなるまで繰り返すこともできるが、気をつけないと無限ループになってしまうこともあるので注意。

メッセージ

条件イベントでは、条件が成立したときにメッセージを表示することができる。

特徴
  • 1.メッセージがなにもないときは、条件が成立しても画面にメッセージウィンドウは表示されない。
  • 2.%大名(変数名)% や %城(変数名)% 、 %(変数名)%; という形で、表示する内容を動的に変えることができる。
  • 3.一つのメッセージは最大5000文字まで。(改行は2文字とする)

特徴1により、メッセージのないイベントを作ることができる。たとえば、特定条件が成立したときに、ユーザーにはなにも知らせずに変数の値を変更するということができる。

特徴2は、うまくつかうと便利。とくに、大名名や城名が改名するシナリオの場合は必須であろう。
たとえば、前もって変数DaimyouNoに#大名番号(D_ODA) をセットしておいて、メッセージに「%大名DaimyouNo%は勢力が拡大した」と設定すると、実行時に「織田家は勢力が拡大した」と表示される。
注意点としては、変数に値がセットされていないと%大名DaimyouNo%がそのまま表示されてしまう。
また、変数に存在しない大名番号をセットすると、実行時には「???」になってしまう。
城についてもおなじ使い方ができる。
%(変数名)% を使った場合は、実行時に変数の値がそのまま表示される。小数点以下に数字がある場合、小数点以下4桁まで表示される。

また、「%武将(変数名)%」という記述は以前は郎党武将の場合に問題が発生するためであるということで使えなかったが、Version 1.13より使用可能になった。イベントメッセージ設定ウィンドウ下部の説明文では明記されていないが、変数から武将名を表示させることはできる。

発生イベント

条件イベントでは、城や武将、大名の改名や、武将の所属変更・移動・石高変更など多くのことができる。

注意点
  • 1.石高や経済の「増加」はできるが、直接の値の指定はできない
  • 2.変数に値を代入する場合に数式を使うことができる

  • 注意点1について
たとえば、城Aの石高を10000にしたいとしても、「城Aの石高を式1の値にする」という発生イベントはない。あるのは「城Aの石高に式1の値を増加させる」という発生イベントのみである。最大石高が10000ならばよいのであるが、10000を超える場合は次の手順を踏む。
・城Aの石高に式1の値を増加させる 式1:-999999
・城Aの石高に式1の値を増加させる 式1:10000
つまり、最初の発生イベントでマイナス999999だけ城Aの石高を増やす(=999999だけ石高を減らす)が、石高の最小値はゼロのため、石高はゼロになる。
そして、次の発生イベントで石高ゼロに10000を加算して、城Aの石高は10000になる。

  • 注意点2について
カッコや四則演算も使える。
ただし、ゼロで割り算を実行するとエラーになるので、注意。

変数

変数とは、値をいれる箱である。たとえば、「変数aaaに10を代入」というのは、「aaaという箱に10という数字を入れる」ということである。また、「変数aaaに変数bbb*3」を代入というのは、「bbbという箱に入っている数字に3をかけた結果をaaaという箱に入れる」ということになる。
つまり、同じ名前の変数でも、そこまでの経過によって、中に入っている値は異なる場合があるのである。

普通、プログラミング言語では文字型や整数型などがあるが、戦国史では、数字型(実数型)の変数のみ使える。実数型とは、小数点以下も表示するということである(「10÷4」を変数cccに代入した場合、変数cccには「2」ではなく「2.5」が入る)。
プログラムを作る場合、変数がバグ(不具合)の原因になることが多い。戦国史でも、変数名のタイプミスや代入式のミスにより、バグが発生することがあるので注意が必要である。おかしい動きをした場合は条件イベントの表示のときに「変数一覧」ボタンを押すと各変数の中の値が表示されるので、ここから不具合の調査をすることになる。
戦国史では、変数は、石高や兵士数の保持、ある月からのカウント、イベントが発生したかどうかのフラグ処理などに多く使われることになるであろう。

また、変数名には内容を想像できるような名前の付け方をしたほうがよい。たとえば、ある武将が死亡した場合にある変数に1をセットする場合、変数「abc」に1を代入するより、変数「SibouFlg」に1を代入したほうが良いということである。

配列変数

変数を箱とするなら、配列変数は複数の箱が合わさったロッカーのようなものである。「変数名[番号]」の形で記述する。大名家や城などに属性を設定したい場合に有効。
例えば、プレイヤー大名が関東地方の城を一定数以上所有していると関東管領上杉家と宿敵になるイベントを作りたい場合、配列変数に同じ番号の城の所属する国番号を代入しておき、城ループでカウントすると比較的容易だが、配列変数を使わないと関東地方にある城ごとに一々プレイヤー大名家所属かどうかチェックしなければいけないので大変である。


関数

関数は、プログラミング言語やエクセルなどの表計算ソフト等で使われてる。
関数というのは、「Aという値を渡して実行したらBという値に置き換わるもの」である。

たとえば、戦国史では#石高順大名という関数があるが、#石高順大名という関数に1という値を渡して実行すると石高順が1位の大名の大名番号が取得できる。なお、関数に渡す値を引数(ひきすう)という。引数に4を渡せば、石高順が4位の大名の大名番号を取得できる。

実際に使ってみる。
発生条件1:データA=データB  データA:#Month  データB:1
発生回数:「何度でも発生」
発生イベント1:変数(データ1)に演算式(データ2)を代入 
                 データ1:Daimyou1 
                 データ2:#石高順大名(1)
発生イベント2:大名1と他の全大名を宿敵化 
                 大名1:(ダブルクリックしてマップの城以外をクリック)Daimyou1
発生時メッセージ 「%大名Daimyou1%は他の全大名と宿敵になった」

簡単な包囲網イベントである。まず、発生条件1で関数#Monthを使っている。この関数は引数がない。毎回実行するたびに現在の月に置き換わる。3月ならば「3」となる。発生条件1では#Month = 1 となる場合にイベントが発生することになるので、つまり、毎年1月にイベントが発生することになる。

発生イベント1で、変数Daimyou1に石高順が1位の大名の大名番号をセットする。そして、発生イベント2で大名番号がDaimyou1の大名について、他の全大名と宿敵になる。
また、メッセージでどの大名が全大名と宿敵になったかを表示している。

実際に包囲網イベントをつくるには、もっと細かい制御(2年連続で同じ大名が石高順1位の場合はイベントを実行しないようにしたり)が必要だが、基本的にはこのような形になる。

補足

「(条件には無関係)」の代入式


条件イベントの条件区分では、基本的には「~のとき」という条件を設定するが、例外的に変数に式の値を代入することができる。それが「変数に演算式を代入(条件には無関係)」というものである。
実は、この「条件には無関係」というのが誤解しやすい点で、場合によっては条件と関係あるのである。

たとえば、次のような二つの条件イベントを作成する。

条件イベント1
(全て成立したときイベント発生)
・変数に演算式を代入(条件には無関係)  データA:aaa データB:11
・データA=データB  データA:1 データB:2
・変数に演算式を代入(条件には無関係)  データA:bbb データB:22

条件イベント2
・メッセージ「%aaa% %bbb%」を表示

戦国史を動かしてみると、変数aaaの値は「11」と表示されるが、変数bbbの値は表示されない。
つまり、変数bbbに値はセットされていないのである。
この原因は、戦国史は「全て成立したときイベント発生」の場合、上から順番に条件を検討し、成立しないものが一つでもあれば、そこから先はなんら評価しないためである。
逆に、「一つでも成立したときイベント発生」にした場合は、成立したものが一つでもあれば、そこから先の条件は評価せず、イベントが発生してしまう。

このように、「変数に演算式を代入(条件には無関係)」とあっても、実際には代入処理が行なわれないことがあるので、注意が必要である。

変数名について
条件イベントの変数名は、実はアルファベットの大文字と小文字を区別する。すなわち、変数AAAと変数aaaは別物ということである。
また、ぜんぶ全角文字の変数は使えないようである(エラーになる)。ただし、「A_あいうえお」という変数は使えるようである。どうやら、最初の文字が全角文字だとエラーになるということのようである。複雑な処理の変数は日本語を使うのもいいかもしれない。

関数一覧

#Random           実数で0~1.0の間の乱数を返す
#Year            現在の年を返す
#Month            現在の月を返す
#Edition           戦国史FEなら0、戦国史SEなら1を返す
#生存大名数          生存している大名数を返す
#生存独立大名数        生存している独立大名数を返す
#石高順大名(順位)       臣従込み石高が指定の順位(1番から指定)の大名家番号を返す
#石高順独立大名(順位)     臣従込み石高が指定の順位(1番から指定)の独立大名家番号を返す
#直轄石高順位大名(順位)    直轄石高が指定の順位(1番から指定)の大名家番号を返す
#ランダム大名         生存する大名家番号をランダムに返す
#ランダム独立大名       生存する独立大名家番号をランダムに返す
#ランダム上位大名(順位)    臣従込み石高が指定の順位以内の大名家番号をランダムに返す
#ランダム上位独立大名(順位)  臣従込み石高が指定の順位以内の独立大名家番号をランダムに返す
#プレイヤー大名        プレイヤー大名の大名家番号を返す
#大名番号(大名家ID)      指定した大名家IDの大名家番号を返す
#城番号(城ID)         指定した城IDの城番号を返す
#武将番号(武将ID)       指定した武将IDの武将番号を返す(未登場または死亡済なら0を返す)
#城支配大名(城ID or 番号)   城を支配する大名家番号を返す
#城包囲大名(城ID or 番号)   城を包囲する大名家番号を返す(非包囲なら0を返す)
#城武将数(城ID or 番号)    城内に居る武将数を返す
#城包囲武将数(城ID pr 番号)  城を包囲する武将数を返す
#主家大名(大名家ID or 番号)  主家(独立大名なら自分自身)の大名家を返す
#大名家武将数(大名家ID or 番号)    大名家(臣従大名含む)の武将数を返す(捕虜は含まない)
#大名家直属武将数(大名家ID or 番号)  大名家(臣従大名含まない)の武将数を返す(捕虜は含まない)
#城数(大名家ID or 番号)    大名家(臣従大名含む)の城数を返す
#直轄城数(大名家ID or 番号)  大名家(臣従大名含まない)の城数を返す
#石高(大名家ID or 番号)    大名家(臣従大名含む)の石高を返す
#直轄石高(大名家ID or 番号)  大名家(臣従大名含まない)の石高を返す
#経済(大名家ID or 番号)    大名家(臣従大名含む)の経済を返す
#直轄経済(大名家ID or 番号)  大名家(臣従大名含まない)の経済を返す
#足軽兵数(大名家ID or 番号)  大名家(臣従大名含む)の足軽兵数を返す
#直轄足軽兵数(大名家ID or 番号)  大名家(臣従大名含まない)の足軽兵数を返す
#騎馬兵数(大名家ID or 番号)    大名家(臣従大名含む)の騎馬兵数を返す
#直轄騎馬兵数(大名家ID or 番号)   大名家(臣従大名含まない)の騎馬兵数を返す
#鉄砲数(大名家ID or 番号)    大名家(臣従大名含む)の鉄砲数を返す
#直轄鉄砲数(大名家ID or 番号)  大名家(臣従大名含まない)の鉄砲数を返す
#従属大名数(大名家ID or 番号)  大名家の従属大名数を返す
#臣従大名数(大名家ID or 番号)  大名家の臣従大名数を返す
#資金(大名家ID or 番号)     大名家の資金を返す
#航海技術(大名家ID or 番号)   大名家の航海技術を返す
#鉱山技術(大名家ID or 番号)   大名家の鉱山技術を返す
#当主城(大名家ID or 番号)    大名家の当主の居る(または包囲している)城番号を返す
#当主(大名家ID or 番号)     大名家の当主の武将番号を返す(当主なしなら0を返す)
#城(武将ID or 番号)       武将の居る(または包囲している)城番号を返す
#包囲中(武将ID or 番号)     武将が包囲中なら1を、それ以外なら0を返す
#所属大名(武将ID or 番号)    武将の所属大名家番号を返す
#捕虜大名(武将ID or 番号)    武将が捕虜ならば拘束している大名家番号を返す(捕虜でなければ0を返す)
#人質大名(武将ID or 番号)    武将が人質ならば拘束している大名家番号を返す(捕虜でなければ0を返す)
#武将足軽兵数(武将ID or 番号)  武将の足軽兵数を返す
#武将騎馬兵数(武将ID or 番号)  武将の騎馬兵数を返す
#武将鉄砲数(武将ID or 番号)   武将の鉄砲数を返す
#統一成立            統一が成立したら1を、それ以外なら0を返す
#Round(数値)          小数点以下を四捨五入
#Floor(数値)          小数点以下を切捨て
#Ceil(数値)           小数点以下を切り上げ

発生イベント一覧

変数(データ1)に演算式(データ2)を代入
変数(データ1)に演算式(データ2)を加算
武将1をデータ1に改名
城1をデータ1に改名
大名1をデータ1に改名
大名1が独立
大名1の従属・臣従大名が全て独立
武将1強制死亡
武将1強制登場
大名1と大名2を宿敵化
大名1と大名2を強制宿敵化(主家の同盟関係無視)
大名1と大名2を宿敵解除
大名1と他の全大名を宿敵化
大名1と他の全大名を宿敵解除
大名1と大名2を不戦同盟(非独立大名でも強制締結)
大名2が大名1に従属
大名2が大名1に臣従
大名1が大名2の城を全て併呑(大名2は滅亡)
大名1が大名2の城と武将を全て併呑(大名2は滅亡)
武将1の足軽兵数にデータ1を加算
武将1の騎馬兵数にデータ1を加算
武将1の鉄砲数にデータ1を加算
大名1の全武将の足軽兵数にデータ1を加算
大名1の全武将の騎馬兵数にデータ1を加算
大名1の全武将の鉄砲数にデータ1を加算
武将2の能力値を武将1にコピー
城1の最大レベルをデータ1に変更
城1の最大石高をデータ1に変更
城1の最大町経済をデータ1に変更
城1の最大鉱山をデータ1に変更
城1のレベルにデータ1を加算
城1の石高にデータ1を加算
城1の町経済にデータ1を加算
城1の鉱山にデータ1を加算
城1の民衆支持にデータ1を加算
城1の守備兵数にデータ1を加算
城1の兵糧にデータ1を加算
城1の交易船数にデータ1を加算
大名1の全城のレベルにデータ1を加算
大名1の全城の石高にデータ1を加算
大名1の全城の町経済にデータ1を加算
大名1の全城の鉱山にデータ1を加算
大名1の全城の民衆支持にデータ1を加算
大名1の全城の守備兵数にデータ1を加算
大名1の全城の兵糧にデータ1を加算
大名1の全城の交易船数にデータ1を加算
大名1の行動タイプを標準に変更
大名1の行動タイプを移動・出陣なしに変更
大名1の行動タイプを出陣なしに変更
武将1を大名1の所属に変更
城1を大名1の領地に変更
季節イベント(データ1:季節イベントID)発動
城1の城タイプをデータ1(城タイプID)に変更
城1の包囲軍を撤退させる
大名1の城を攻める包囲軍を撤退させる
大名1が他家を攻める包囲軍を撤退させる
武将1の相続権所有大名家を大名1に変更
武将1(未登場)の登場城を城1に変更
武将1の継承順位をデータ1に変更
武将1を強制的に当主にする
大名1の資金をデータ1にする
武将1を城1に強制移動
ゲーム終了(統一メッセージなし)
ゲーム終了(大名1の統一メッセージあり)
サブルーチン呼び出し(データ1:条件イベントID)
閲覧専用形式でセーブ
質問文と選択肢(データ2:'/'区切り)を表示し、選択結果を変数(データ1)に代入
質問文(データ2)を表示し、数値入力結果を変数(データ1)に代入
通常時BGMを指定のファイル(データ1)に変更
合戦時BGMを指定のファイル(データ1)に変更
マップ使用エリア変更(データ1にカンマ区切りで数値4つ)
城1情報閲覧可否(データ1) 0=不可 1=可 2=プレイヤー包囲中可 3=城非表示(0~2はプレイヤー自領なら常に閲覧可、3はプレイヤー自領でも非表示で閲覧不可)
シナリオタイトルをデータ1に変更
城1と城2間の経路を、隠す(データ1=1)または復活(データ1=0)する
大名1を不可侵にする(データ1=1)、または不可侵解除(データ1=0)する

イベント発生条件一覧

データA = データB
データA ≠ データB
データA > データB
データA ≧ データB
データA < データB
データA ≦ データB
変数(データA)に演算式(データB)を代入(条件には無関係)
大名Aが独立大名
大名Aが従属・臣従大名(主家は特定しない)
大名Aが従属大名(主家は特定しない)
大名Aが臣従大名(主家は特定しない)
大名Aが大名Bの従属・臣従大名
大名Aが大名Bの従属大名
大名Aが大名Bの臣従大名
大名Aが大名Bの従属・臣従大名ではない
大名Aが大名Bの従属大名ではない
大名Aが大名Bの臣従大名ではない
大名Aと大名Bが敵対
大名Aと大名Bが非敵対(不戦同盟・従属・臣従)
大名Aと大名Bの城(臣従含む)が隣接
大名Aと大名Bの城(臣従含む)が隣接していない
大名Aが滅亡済み
大名Aが生存している
城Aが大名A(従属・臣従大名含まず)の所有
城Aが大名A(従属大名含まず・臣従大名含む)の所有
城Aが大名A(従属・臣従大名含む)の所有
城Aが大名A(従属・臣従大名含まず)の所有ではない
城Aが大名A(従属大名含まず・臣従大名含む)の所有ではない
城Aが大名A(従属・臣従大名含む)の所有ではない
武将Aが存在している(登場済みで死亡していない)
武将Aが存在していない(未登場か死亡済み)
武将Aが未登場
武将Aが死亡済み
武将Aが大名Aに所属
武将Aが大名A以外に所属
武将Aが当主(大名を特定しない)
武将Aが当主ではない(大名を特定しない)
武将Aが大名Aの当主
武将Aが大名Aの当主ではない
武将Aが城A内に在城
武将Aが城A内には居ない
大名Aがプレイヤー担当ではない
大名Aがプレイヤー担当
武将Aがプレイヤー担当大名家の武将ではない
武将Aがプレイヤー担当大名家の武将
城Aが包囲されている
城Aが包囲されていない
質問文(データB)を表示し、YESが選択された
質問文(データB)を表示し、NOが選択された

出典

このページは以下のブログより転載し、一部改変して作成している。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2016年08月22日 14:40