MOD/イベントの書き方 のバックアップソース(No.5)

 
----
当コンテンツは、特に記載がない場合、DHnoneを基準に書かれています。
----

 
#contents
 

**イベントの基本 [#z1a49502]

ここではイベントを改造・追加したいという人向けに、その書き方を解説します。

まず、誰もが一度は目にした事がある「ラインラント進駐」イベント。
これは、db/event/germany.txtに入っています。

 event = {
	id = 2000
	random = no
	country = GER
	trigger = {
		ai = no
		NOT = {
			war = { country = GER country = FRA }
			alliance = { country = GER country = FRA }
		}
		garrison = { country = GER province = 75 size = 1 }
	}
 
	name = "EVT_2000_NAME"
	desc = "EVT_2000_DESC"
	style = 0
	picture = "Rhineland"
 
	date = { day = 0 month = january year = 1936 }
	offset = 1
	deathdate = { day = 30 month = december year = 1947 }
 
	action_a = {
		name = "OK"
		command = { type = relation which = FRA value = -15 }
		command = { type = relation which = ENG value = -5 }
		command = { type = relation which = BEL value = -10 }
		command = { type = relation which = HOL value = -5 }
		command = { type = belligerence which = GER value = 5 }
		command = { type = dissent value = -2 }
		command = { type = money value = 500 }
		command = { type = peacetime_ic_mod value = 10 }
		command = { type = manpowerpool value = 50 }
		command = { type = trigger which = 51 } # UK Gears up for war
		command = { type = trigger which = 52 } # France Gears up for war
		command = { type = sleepevent which = 2060 }
		command = { type = domestic which = defense_lobby value = 1 }
	}
 }

 
 
**イベントの宣言 [#h6e6f8ae]

 event = {
 }

当たり前ですが、最初の「event = { 」から最後の「 } 」までが、一つのイベントしてカウントされます。

イベントを作ったとき、正常に動作しない原因は、
「trigger = { } 」や「command = { } 」の「 { } 」の数が適正でないことで、途中でイベントが終わったと認識されたり、いつまでも一つのイベントが終わらないように認識されていることが多いです。


 
 
**イベントの基本設定 [#ka465e83]

では、「event = { } 」の中には何を記述すればよいのでしょうか?

記述の順序はあまり関係ないですが、順序を揃えたほうが、自分にとっても他の人にとっても読みやすいです。

最初の行には、

 id = xxxxxx

と数字を記述しましょう。

これは、イベントIDと言って、イベント一つ一つに固有の数字を割り当てる必要があります。
数字が被っていると、正常に動作しません。


 
次に、

 random = no #ランダムイベントでは無い

を書きます。

random = yesは「ランダムイベント」という位置付けとなり、後述のdateについての情報がスキップされます。
ここでは、「アーティストのレコード」や「首都で軍事パレード」といった、triggerを満たした状態で確率で発生するイベントとして扱われます。
初心者が最初に作るイベントは、まずそういったものではないでしょうから、上のように、ランダムイベントでは無いと記述してください。

 
そして、

 country = GER #イベントはドイツで発生する

と、イベントを発生させたい国のコードを書きます。
アルファベット三文字で表記される国タグについては、[[こちら>データ集/国タグ]]をご覧ください。


 
 

**イベントのトリガー [#i6d8af51]

次に、イベント記述の最初の山場となる、triggerを読解してみましょう。

 trigger = {
 	ai = no						        # この国は、AIの操作ではない
 	NOT = {						        # 以下の「NOT ={ } 」では、その条件を満たしていないことを確認する
 		war = { country = GER country = FRA }	        # ドイツが、フランスと戦争状態である
 		alliance = { country = GER country = FRA }	# ドイツとフランスが、同盟を結んでいる
 	}						        # ここで「NOT ={ } 」はおしまい
 	garrison = { country = GER province = 75 size = 1 }	# ドイツが、ID75のプロヴィンス(ケルン)に、陸軍を1以上置いている
 }


まず、「trigger = { NOT = { } } 」という風な、{ }の階層が合致している事を確認してください。先に述べたように、{ }にズレがあると正しく動作しません。

 
***NOT文 [#wbfee7d9]

次に「NOT = { } 」の中身を読解してみましょう。

NOT文は、内部に書かれた条件を、どれ一つとして満たしていない状態を示します。

~つまり、上の例文の記述では、
++ドイツが、フランスと戦争状態である
++ドイツとフランスが、同盟を結んでいる
--上記のいずれの状態でもない


 
***OR文 [#fa62084d]

では、(上の例文には書かれていない)他の条件文を見ていきましょう。

OR文は、NOT文の逆で、内部に書かれた条件のいずれかを満たしている状態を示します。

~もし、上の例文の「NOT ={ }」をORにすると、
++ドイツが、フランスと戦争状態である
++ドイツとフランスが、同盟を結んでいる
--上記のいずれかの状態である


 
***AND文 [#ua8f0bc0]

次に、AND文です。

 OR = {
	AND = {					# 以下の条件が、同時に満たされる
		event = 3800			# ID3800のイベントが発生済み
		random = 33			# (判定日数ごと)33%の確率で発生する
	}					# AND文はここまで
	war = { country = JAP  country = USA }	# 日本が、アメリカと戦争状態である
 }

この条件は、

++ID3800のイベントが既に発生しており、33%の確率を引いた
++日本が、アメリカと戦争状態である
--上記のいずれかの状態である

つまり、''AとBが発生した''、または''CとDが発生した''の、''どちらかを発生条件としたい''、というとき、OR文の中にAND文を作るのです。


 
***無記述文 [#w1d632c2]

最後に、NOTもORもANDも無い文です。
この場合、列挙した条件は、AND文の中にあるのと同様に扱われます。

 trigger= { A B C }
 trigger= { AND ={ A B C } }

上の二つが同じ効果となります。わざわざ後者のように書く必要はありません。

 
ただし、''NOTの括弧内の条件は、OR文の中にあるのと同様に扱われます。''

 trigger= { NOT = { A B C } }
 trigger= { NOT = { OR = { A B C } } }

上の二つが同じ効果となります。
ちなみに、以下のように書き換えることもできます。

 trigger= { NOT = { A } NOT = { B } NOT = { C } }




 
 
**注意すべきこと [#s3f0a5c6]

例文の中にある「#」の記述は、#以後の、その行の文を無視する(コメントアウト)効果があります。
主として、イベントについてのメモ書きとして扱います。

 
スペースは、全角を使ってはいけません。
全角スペースを使って良いのは、#の後のコメントアウト欄と、""で囲まれた説明欄の中だけです。