最終更新日 2024-09-25
void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号)
void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) { }
引数の補足
-
軍団番号:
現在ターンが回ってきた軍団の軍団番号。
「pターン情報.現在の軍団【軍団番号】」と同じ番号
タイミング
- メイン画面において、天翔記では、「各大名」にターンが回ってくるのであるが、
さらにその内訳をみると、大名麾下の軍団が順次処理をしていく。(大名自身も軍団長である)
このメソッドは、その各軍団にターンが回ってきた先頭で、呼び出される。
厳密には下記の通りである。
これら矢印のタイミングでメソッドが呼ばれることとなる。。
一般的用途
- 各軍団が処理を行う直前に、何か処理を加えたい場合、このメソッドを利用する。
- このメソッドはセーブやロードによって何度も実行される、といったことがなく、
ゲームを通して必ず「1季節ごとに各軍団1回だけ」実行される。
よって、「季節ごとに各軍団必ず1回やっておきたい処理」を記述するのに非常に向いている。
- よって、歴史イベントの記述を加えるのにも向いている。
例①
void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) { /* * 「プレイヤ勢力麾下の軍団」でないならば * CPUが処理をする前に、金欠、米欠なら、恵む。 */ int iGundanID = 軍団番号-1; if ( ! Is_プレイヤ担当軍団( iGundanID ) ) { if ( p軍団情報[iGundanID].米 < 500 ) { p軍団情報[iGundanID].米 = 500; } if ( p軍団情報[iGundanID].金 < 500 ) { p軍団情報[iGundanID].金 = 500; } } }
例②
/* * 織田信長のイベントを段階的に進捗させていく、というサンプル */ #define 織田信長イベント名 "SPL_EV01" #define 織田信長イベント進捗・A フラグ枠::A #define 織田信長イベント進捗・B フラグ枠::B bool Check_イベント001(int 軍団番号【配列用】) { // 「SPL_EV01というフラグのA枠」がFALSEなら if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・A) == FALSE ) { // 1550年~60年の間なら発生 if ( 1550 <= Get_西暦() && Get_西暦() <= 1560 ) { // 軍団長の武将番号【配】を求める int iGundanLeaderBushouID = p軍団情報[軍団番号【配列用】].軍団長【武将番号】-1; // 居れば if ( 0 <= iGundanLeaderBushouID && iGundanLeaderBushouID < 最大数::武将情報::配列数 ) { if ( p武将戸籍情報[iGundanLeaderBushouID].顔番号 == 顔番号::織田信長 ) { // 織田信長の顔番号 // この軍団長は、大名でもある if ( p武将戸籍情報[iGundanLeaderBushouID].状態 == 状態::大名 ) { 実行/取消ダイアログ表示("織田信長にターンが回る直前、何かイベント発動\x0A★★★★★★★★★★★"); // このイベントが発生したというのをフラグ名SP_EV01に残す。 Set_フラグ(織田信長イベント名, TRUE, 織田信長イベント進捗・A); return true; // イベントは起きた } } } } } return false; // イベントは起きてない。 } bool Check_イベント002(int 軍団番号【配列用】) { // 「SPL_EV01というフラグのA枠」がFALSEならまだこのイベントは早い。まずは、Aが進んでから。 if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・A) == FALSE ) { return false; } // 進捗Bがまだ発生していない。 if ( Get_フラグ(織田信長イベント名, 織田信長イベント進捗・B) == FALSE ) { if ( 1563 <= Get_西暦() && Get_西暦() <= 1565 ) { // イベント進捗Bのための処理 // このイベントが発生したというのをフラグ名SP_EV01に残す。 実行/取消ダイアログ表示("織田信長にターンが回る直前、何かイベント発動、その②\x0A★★★★★★★★★★★"); Set_フラグ(織田信長イベント名, TRUE, 織田信長イベント進捗・B); return true; } } return false; // イベントは起きてない。 } void カスタム::On_軍団ターン変更《メイン画面》(int 軍団番号) { Check_イベント001(軍団番号-1); Check_イベント002(軍団番号-1); }