MOD/イベントの書き方 のバックアップ差分(No.3)



 
#contents
 





*イベントの書き方・読み方 [#tc9577d0]
ここではイベントを改造・追加したいという人向けにその書き方を適当に書いていこうと思います。

 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 }
	}
 }
まず、この誰もが一度は目にした事がある、「ラインラント進駐」イベント。実際には\db\event\germany.txtに入っています。

**イベントの宣言 [#h6e6f8ae]
 event = {
 }
あたりまえですが、最初の「event = { 」から一番最後の「 } 」までが一つのイベントしてカウントされます。&br;
イベントを一つ作った!という時に動かないのはまず「event = { } 」がきちんとなっていないことが多いです。&br;つまり、内側の「trigger = { } 」や「command = { } 」の「 { } 」の数が多かったり少なかったりする事で、途中でイベントが終わったと認識されたり、いつまでも一つのイベントが終わらないように認識されてしまうのです。

**イベントの初期設定 [#ka465e83]
では、「event = { } 」の中には何を記述すればよいのでしょうか?&br;
実は、順序はあまり関係ないのですが、関係ないにせよ、順序をそろえた方が自分にとってもだれか他の人が読む場合にも読みやすいです。&br;
最初の行には
 id = xxxxxx#数字
を記述しましょう。これはeventIDといって、event一つ一つに固有の数字を割り当てる必要があります。&br;その代わり、何桁でもよいので、とりあえず9とか7とかをたくさん頭につけておきましょう。&br;


次に、
 random = no#これはランダムイベントでは無い
を書きます。&br;
random = yesは「ランダムイベント」という位置づけとなって、date(後述)の記述がスキップされます。&br;つまり、「大衆紙が政府の政策を攻撃」や「首都で軍事パレード」や「学徒動員」といった、triggerを満たした状態で非常に低い確率で発生するイベントとして扱われます。&br;
初心者がまず作ってみたいイベントはそういったものではないでしょうから、上のように記述してください。&br;


そして、
 country = GER#このイベントはドイツで発生する
を書きます。これはどこの国で発生するかを書いたものです。&br;国コードは別途に参照してください。


**イベントのtrigger [#i6d8af51]
では、次にイベント記述の最初の山場、triggerを読解してみましょう。
 trigger = {
 	ai = no						#この国はプレイヤーが操作している
 	NOT = {						#以下の条件は「いずれかが発生していない状態である」を満たす
 		war = { country = GER country = FRA }	#ドイツはフランスと戦争状態である
 		alliance = { country = GER country = FRA }	#ドイツとフランスは同盟を結んでいる
 	}						#ここで「NOT ={ } 」はおしまい。
 	garrison = { country = GER province = 75 size = 1 }	#ドイツが75番州に駐屯部隊を1以上置いている
 }
ほとんど上に書いたとおりですが、&br;
まず、「trigger = { NOT = { } } 」という風に{}の階層が合致している事を確認してください。&br;これで「trigger= { } 」がきちんと記述されている事になります。&br;
次に「NOT = { } 」の中身を読解してみましょう。
***''NOT文'' [#aa1883ca]
NOT文は、内部に書かれた条件をどれ一つとして満たしていない状態を示します。
~つまり、上の記述では、
++ドイツはフランスと戦争をしていない
++フランスと同盟を結んでもいない
--そのいずれの状態でもない
-これがNOT文の中に記述された条件です。

では、他の条件文はを見てみましょう。
***''OR文'' [#wd5a3639]
OR文はNOT文の逆で、内部に書かれた条件のいずれかを満たしている状態を示します。
~もし、上の「NOT ={ }」をORにすると、
++フランスとドイツが同盟している
++フランスとドイツが戦争中
--このいずれかである
-これがその場合のOR文の記述です。

***''AND文'' [#i07e4f3f]
最後にAND文です。これは特殊な条件文で、通常はOR文の中で使います。
 OR = {
	AND = {					#以下が同時に発生する
		event = 3800			#3800番が発生済み
		random = 33			#33%の確率で発生する
	}					#AND文はここまで
	war = { country = JAP  country = USA }	#日本がアメリカと戦争中
 }
これがAND文の使用の例です。
-この時の条件の読解は
++イベント3800番が既に起こっていて、33%の確率を満たした
++日本がアメリカと戦争中
--このいずれかである。
-つまり、''AとBが発生した''、または''CとDが発生した''の''どちらかを発生条件としたい''、という時にOR文の中にAND文を作るのです。

***NOT、OR、AND文への追記 [#p1e73ba5]
-無記述列挙
--列挙した条件は, 特にANDの記述がなくてもすべてAND文の中にあるのと同様に扱われる。
~つまり、
&br;trigger= { A B C }
&br;trigger= { AND ={ A B C } }
~は同じ効果である。当然後者は''非推奨''

--ただし例外として、''NOTのカッコ内に列挙した条件はすべてOR文の中にあるのと同様に扱われる''。この部分だけ注意。
~つまり、
&br;trigger= { NOT = { A B C } }
&br;trigger= { NOT = { OR = { A B C } } }
~は同じ効果である。当然後者は''非推奨''。
ちなみにこれを書き換えると、
&br;trigger= { NOT = { A } NOT = { B } NOT = { C } }
~になります。(何故そうなるかは[[ここ>http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%BB%E3%83%A2%E3%83%AB%E3%82%AC%E3%83%B3%E3%81%AE%E6%B3%95%E5%89%87]]などを参照)

//#別のところに記述する予定
-ちなみに、スペースは全角を使ってはいけません。全角スペースを使ってよいのは#の後のコメントアウト欄と""で囲まれた場所の中だけです。
-イベントの読み込み途中でhoi.exeがうんともすんとも言わなくなった場合はeventファイルの中を全角スペースで検索してみましょう。

//とりあえずここまでで。
//ここから別人の記入です。ていうかメモです。すみません。
**注意すべきこと [#s3f0a5c6]
DD英語版Ver1.3aにおいての仕様です。
DD1.3aにおいての仕様です。
-rarematerials
他の戦略資源と違って何故かこれだけ複数形なので注意。

-プロヴィンスの加算・減算
工場は、例え起こったイベントが当事国の占領して(control)なくても減算、加算処理はされる。
但し、電力、鉄、希少資源、石油といったプロヴィンスの産出物については起こったイベントの当事国の占領地(control)でなければ処理されない。
後、テキストで電力何%増加とか%表示で出るのは嘘。
ほとんど1単位計算である。

-free_manpower問題
free_manpowerコマンドは一日に増加する値。
free_manpowerの値に小数点以下を設定すると効かない。
つまり、1未満の値は無視される。
 結論
よほどの大国でもない限りfree_manpowerつかえねー。
 →その後の状況(#更に別の人#)
DA1.2でfree_manpowerは小数第二位まで扱えるようになった。

-countryタグについて便利な機能
countryタグを書かなければ、すべての国家が対象になる。
無論そのままではバグると思うので、control = -1などの条件を指定しよう。
その条件に合致する国家が自国イベントとして発生するぞ!
そうすれば、○月△日にどこそこのプロヴィンスの鉄を無条件で10増やしたいということも
前述の資源算出問題を気にすること無く楽々とできてしまうのだ!
但し、連鎖先のイベントでは例外でこの処理は起こらないらしい。
-連鎖イベント条件判定
意外と知られていないと思うのがこの機能。
trigger whichコマンドで連鎖すると指定されたidイベントが発生するが、その時に、条件文があると条件判定できる。
つまり、条件に合致しなければ、連鎖したと見せかけて連鎖しない状態になる。あまり使わないかもしれないけれど、覚えて損は無い。
但し、これを使うときはプレイヤーに連鎖イベントに欠陥があると思われかねないので、予め説明文で断っておくといいだろう。
バニラでは仏印進駐イベントでこのテクニックが使われており、日本が無所属の場合と枢軸の場合で別のイベントが発生し、また日英同盟中は何も発生しないようになっている。

//ここから追記です
-「secedeprovince」の影響範囲
イベントコマンド「secedeprovince」が動作する条件として、
--該当プロヴィンスが割譲元の国の占領(control)状態にある
--該当プロヴィンスが割譲先の国の占領(control)状態にある
のどちらかを満たす必要があります。
そのため、たとえばDA1.1以前のバージョンにおいて、ビターピースで割譲される予定のプロヴィンスをドイツ以外の国が占領していた場合、上記のどちらにも当てはまらないためにソ連領のまま虫食い状態で残っていたわけです。
ちなみにこの判定は所有(owned)状態の如何を問わない、更に言うと発生国の如何も問わないので、たとえば枢軸ドイツが連合ペルシャのプロヴィンスを占領している状態でビターピースが起こると、ペルシャのプロヴィンスがイベントで割譲される範囲に含まれているため、ソ連とペルシャが無関係であったとしても、ドイツ占領下のペルシャのプロヴィンスが勝手に割譲されてしまうということも起こり得ます。

-「secedeprovince」の列挙
 command = { secedeprovince which = FIN value = 1 }
 command = { secedeprovince which = ITA value = 1 }
 command = { secedeprovince which = GER value = 1 }
たとえばこのように、一つのイベントで同じプロヴィンスに続けて「secedeprovince」を列挙すると、一番下の判定が優先されて発生します。
具体例を挙げると、ID1のプロヴィンスをFIN、ITA、GERのどれかが占領していたならば、上記より1つのコマンドしか機能しないために占領中の該当国に割譲されます。
もし割譲元の国が占領中であれば、すべてのコマンドが機能しますが一番下のコマンドが優先され、GERに割譲されることになります。

-プロヴィンス移動による再配置
「secedeprovince」されたプロヴィンスにいる部隊は問答無用で強制的に首都に再配置されるが、「control」により占領国がかわったプロヴィンスにいる場合は再配置されない。
(ただし、新たな占領国の通行権がない場合は時間を進めると再配置されてしまうが)