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);
    }