最終更新日 2024-09-25

On_戦争開始時

On_戦争開始時

戦争が発生したタイミングで呼ばれるイベントハンドラとなります。

このイベントハンドラと対を成す役割となるのが、「On_戦争終了時」のイベントハンドラとなります。

注意点

「PC勢力かNPC勢力かは関係ありません、また、戦争を見る設定か見ない設定かも関係ありません。
全ての戦争において、戦争が発生したタイミングでこのイベントハンドラは呼ばれます。

使い処

一般的には、「戦争が発生した時、どこの軍団が、どこの城に攻めたのか?」
の情報を保持しておきたい場合に、このイベントハンドラを利用します。

使用例①

戦端が開かれた城と、攻め込んだ軍団、攻められた軍団を得る。
void 天翔記クラス::On_戦争開始時(int 城番号, 戦争開始パラメタ型^ パラメタ) {
  int iTargetCastleID = 城番号;
  int iAttackGundanID = パラメタ->攻撃側軍団番号;
  int iDefendGundanID = パラメタ->守備側軍団番号;

  if (0 <= iTargetCastleID && iTargetCastleID < 城->配列->Count) {
    デバッグ出力 << "戦争が発生しました。" << "対象は" << 城->配列[iTargetCastleID]->城名称 << "です" << endl;

    // それぞれの軍団長
    if (0 <= iAttackGundanID && iAttackGundanID < 軍団->配列->Count &&
      0 <= iDefendGundanID && iDefendGundanID < 軍団->配列->Count) {
      int iAttackLeader = 軍団->配列[iAttackGundanID]->軍団長_武将番号;
      int iDefendLeader = 軍団->配列[iAttackGundanID]->軍団長_武将番号;

      if (0 <= iAttackLeader && iAttackLeader < 武将->配列->Count &&
        0 <= iDefendLeader && iDefendLeader < 武将->配列->Count) {
        デバッグ出力 << "攻撃軍団:" << 武将->配列[iAttackLeader]->姓名 << endl;
        デバッグ出力 << "守備軍団:" << 武将->配列[iDefendLeader]->姓名 << endl;
      }
    }
  }
}

使用例②

何か戦争が始まる前に、値を保持しておき、戦争が終わったら元へと戻す、
といったような目的でも利用することが可能です。

戦争開始時に値を控えておき、戦争終了時に変動値を一定以内に抑える。
int 熟練値控え[532] = { 0 };
void 天翔記クラス::On_戦争開始時(int 城番号, 戦争開始パラメタ型^ パラメタ) {

  // 戦争が始まる前に戦争の熟練値を保存しておき…
  for each (auto b in 武将->配列) {
    熟練値控え[b->番号] = b->戦闘熟練;
  }
}


void 天翔記クラス::On_戦争終了時() {

  // 保存しておいた値に従って…
  for each (auto b in 武将->配列) {
    // 極端に熟練値が上がってしまった武将は、1回の戦闘で戦闘熟練+100までの上昇に抑える。
    if (b->戦闘熟練 > 熟練値控え[b->番号] + 100) {
      b->戦闘熟練 = 熟練値控え[b->番号] + 100;
    }
  }

}

その他

「On_戦争開始時」イベントハンドラについて、主な解説は以上となります。