void On_プレイヤコマンド完了直前《メイン画面》

void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {
}

タイミング

  • メイン画面上において、プレイヤによって実行されたコマンドが完了した際に実行される。
    「完了」とはコマンドの「成功」「失敗」「キャンセル」「ゲーム脱却」など全てを総称して、「完了」したと見なす。

一般的用途

  • 特定のコマンドに機能を付与する際に、何らかの値を操作する必要がある時、利用する。
  • このコマンドは、該当コマンドの開始ハンドラに相当する、「On_プレイヤコマンド発生直前《メイン画面》」と対で使ってこそ威力を発揮する。

例①

void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {
  デバッグ出力 << "コマンド発生" << endl;

}

void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {
  デバッグ出力 << "コマンド完了" << endl;
}

例②

/*
 * 登用に失敗した場合には持参金の分は返してもらう
 */


int 実行中コマンド = 0;
int 登用持参金 = 0;
BOOL 登用失敗状態 = FALSE;

void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {

  /* 登用コマンドが発生したら、特別にフラグを立てる */
  if ( サブコマンド番号 == メイン画面::サブコマンド名::人事::登用 ) {
    実行中コマンド = メイン画面::サブコマンド名::人事::登用;
    登用持参金 = 0; // コマンド実行の度に持参金リセット
    デバッグ出力 << "登用コマンド発生" << endl;
  }
}

void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {

  /* 完了したのが登用コマンドであれば、 */
  if ( 実行中コマンド == メイン画面::サブコマンド名::人事::登用) {

    // 登用に失敗してたなら、登用持参金が返ってくる。
    if ( 登用失敗状態 ) {
      // 現在操作中の軍団番号【配列用】
      int iGundanID = pターン情報.現在のターン【軍団番号】-1;

      // 金を増やすのでオーバーフローしないように。
      int 金 = p軍団情報[iGundanID].金;

      金 += 登用持参金;  // 登用持参金が返ってくる。
      金 = min( 60000, 金 ); // オーバーフロー対策

      p軍団情報[iGundanID].金 = 金;

      登用失敗状態 = FALSE;
    }


    デバッグ出力 << "登用コマンド脱却" << endl;
  }

  実行中コマンド = 0; // 何のコマンドが完了しても、0にしてしまう。
}

string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {

  if ( 実行中コマンド == メイン画面::サブコマンド名::人事::登用 ) {

    // 登用失敗を汎用的に判定するAPIはTSModから提供されていない。よってこの吹き出しメッセージでその状態を検知する。
    if ( Is_正規表現マッチ(
      元メッセージ,
      "頭を下げても\x0Aだめ|"
      "お気持ちだけ\x0A受け取らせて|"
      "人の心を金品で|"
      "金品に込められし|"
      "民百姓のすすり泣く|"
      "何故に.+?に\x0A仕官せねば|"
      "当家に仕官する気は\x0Aないと|"
      "礼をわきまえぬ者の\x0A言葉など|"
      "見え透いた追従は\x0Aかえって気分を|"
      "追従では.+\x0A.+は本心から|"
      "嘘・偽りは心の|"
      "まさかこの.+に\x0A仕官しろというのでは|"
      "では宝の持ち腐れ…|"
      "望まれる方は迷惑千万|"
      "下手な追従されても") ) {
        登用失敗状態 = TRUE; // コマンド完了のメソッドにて、判定に利用する。

    }
  }

  // 変更しない場合""
  return "";
}

void カスタム::On_数値入力ダイアログ決定時(string メッセージ, 数値入力ダイアログパラメタ型 パラメタ ) {

  // 登用コマンドの場合、入力した持参金を保持しておく。
  if ( 実行中コマンド == メイン画面::サブコマンド名::人事::登用 ) {
    // 入力を取り消していないなら
    if ( パラメタ.入力値 != 0xFFFF ) {
      登用持参金 = パラメタ.入力値;
    }
  }
}