最終更新日 2024-09-25
void カスタム::On_シナリオデータ反映直後(int シナリオ番号)
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
}
タイミング
-
見た目的には特定のシナリオで大名選択画面になる前、
シナリオ説明表示で「確認ボタン」を押した直後、「シナリオデータの各種の配置データを反映した直後」となります。

一般的用途
-
特定のシナリオで与えられているデータの初期値を変更したい場合に利用する。
用途が、「On_シナリオ大名選択直前」と類似していますが、
- このタイミングは「シナリオの本来の配置データ」をScenaroModで微修正するのに非常に適したタイミングだと言えます。
例①
各大名の軍団長の忠誠が0の状態からのスタート。
ゲーム開始直後付近は、独立・裏切りが跋扈する。
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
for (int iBushouID = 0; iBushouID < 最大数::武将情報::配列数; iBushouID++) {
if (p武将戸籍情報[iBushouID].状態 == 状態::軍団長) {
p武将情報[iBushouID].忠誠 = 0;
}
}
}
例②
シナリオ5で、明智光秀の軍団がまるまる大名として独立した状態とする
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
if (シナリオ番号 == 5) {
// 明智光秀を探す
int iBushouID = Get_武将番号【配列用】(顔番号::明智光秀);
// 登場している
if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
// 光秀は軍団長だ
if (p武将戸籍情報[iBushouID].状態 == 状態::軍団長) {
// 所属軍団
int iGundanID = p武将情報[iBushouID].所属軍団【軍団番号】 - 1;
// 該当の軍団長は、大名として独立する
int iDaimyoID = Set_軍団独立(iGundanID);
// 成否をチェック
if (iDaimyoID != 0xFFFF) {
デバッグ出力 << "明智光秀は独立に成功した" << endl;
}
}
}
}
}

例③
シナリオ3~5で、織田家の配下から武将を見繕って、軍団を新設する。
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
if (3 <= シナリオ番号 && シナリオ番号 <= 5) {
int iBushouID = Get_武将番号【配列用】(顔番号::織田信長);
if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
if (p武将戸籍情報[iBushouID].状態 == 状態::大名) {
// 信長の大名としての番号
int pDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1;
// 信長家で、軍団を新設したいが、可能なのか?
// どのような「城」で、どのような「武将」が新たな軍団長となれるのか
auto ret = Get_軍団新設候補情報(pDaimyoID);
デバッグ出力 << "この大名が軍団を新設することは?" << (ret.Is新設可能 ? "可能" : "不可能") << endl;
if (ret.Is新設可能) {
デバッグ出力 << "2~8で余っている軍団割当番号は? ";
for each(auto wn in ret.候補軍団割当番号リスト) {
デバッグ出力 << wn << " ";
}
デバッグ出力 << endl;
デバッグ出力 << "どの城に軍団を新設できますか?";
for each(auto cn in ret.候補城番号【配列用】リスト) {
デバッグ出力 << Get_城名(cn) + Get_城称(cn) << " ";
}
デバッグ出力 << endl;
デバッグ出力 << "誰を軍団に任命できますか?";
for each(auto bn in ret.候補武将番号【配列用】リスト) {
デバッグ出力 << Get_名字(bn) + Get_名前(bn) << " ";
}
デバッグ出力 << endl;
// 候補のうち、一番先頭の武将、先頭の城で、軍団を新設する
int iGundanID = Set_軍団新設(ret.候補武将番号【配列用】リスト[0], ret.候補城番号【配列用】リスト[0], ret);
if (iGundanID != 0xFFFF) {
デバッグ出力 << "軍団番号【配列用】" << iGundanID << "に軍団が新設された" << endl;
}
else {
デバッグ出力 << "軍団の新設には失敗した" << endl;
}
}
}
}
}
}
例④
シナリオ3で、真田幸隆が独立した状態でスタートする。
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
if (シナリオ番号 == 3) {
int 幸隆BushouID = Get_武将番号【配列用】(顔番号::真田幸隆);
// 居る
if (0 <= 幸隆BushouID && 幸隆BushouID < 最大数::武将情報::配列数) {
// 現役
if (p武将戸籍情報[幸隆BushouID].状態 == 状態::現役) {
int 幸隆の所属大名DaimyoID = p武将情報[幸隆BushouID].所属大名【大名番号】 - 1;
// 今、幸隆がいる大名家は、新軍団を作成できますか?
auto 情報 = Get_軍団新設候補情報(幸隆の所属大名DaimyoID);
if (情報.Is新設可能) {
// 軍団を新設する候補情報の、軍団長になりうる人物として、幸隆は含まれているのか?
auto biter = std::find(情報.候補武将番号【配列用】リスト.begin(), 情報.候補武将番号【配列用】リスト.end(), 幸隆BushouID);
// 軍団を新設する候補情報の、城情報リストの中に「戸石城」はあるか?
auto citer = std::find(情報.候補城番号【配列用】リスト.begin(), 情報.候補城番号【配列用】リスト.end(), 城::城配列番号::戸石城);
// 両方大丈夫
if (biter != 情報.候補武将番号【配列用】リスト.end() &&
citer != 情報.候補城番号【配列用】リスト.end()) {
int i幸隆の新設GundanID = Set_軍団新設(幸隆BushouID, 城::城配列番号::戸石城, 情報);
// 軍団化に成功している
if (i幸隆の新設GundanID != 0xFFFF) {
int i幸隆の新設DaimyoID = Set_軍団独立(i幸隆の新設GundanID);
if (i幸隆の新設DaimyoID != 0xFFFF) {
デバッグ出力 << "幸隆は大名化した" << endl;
}
}
}
}
}
}
}
}
例⑤
シナリオ3~5で、織田家の配下から武将を見繕って、軍団を新設し、
その軍団長は、信長から可能なかぎりありったけの城をもっていき、
そして独立して大名となる。
void カスタム::On_シナリオデータ反映直後(int シナリオ番号) {
if (3 <= シナリオ番号 && シナリオ番号 <= 5) {
int iBushouID = Get_武将番号【配列用】(顔番号::織田信長);
if (0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {
if (p武将戸籍情報[iBushouID].状態 == 状態::大名) {
// 信長の大名としての番号
int pDaimyoID = p武将情報[iBushouID].所属大名【大名番号】 - 1;
// 信長家で、軍団を新設したいが、可能なのか?
// どのような「城」で、どのような「武将」が新たな軍団長となれるのか
auto ret = Get_軍団新設候補情報(pDaimyoID);
デバッグ出力 << "この大名が軍団を新設することは?" << (ret.Is新設可能 ? "可能" : "不可能") << endl;
if (ret.Is新設可能) {
デバッグ出力 << "2~8で余っている軍団割当番号は? ";
for each(auto wn in ret.候補軍団割当番号リスト) {
デバッグ出力 << wn << " ";
}
デバッグ出力 << endl;
デバッグ出力 << "どの城に軍団を新設できますか?";
for each(auto cn in ret.候補城番号【配列用】リスト) {
デバッグ出力 << Get_城名(cn) + Get_城称(cn) << " ";
}
デバッグ出力 << endl;
デバッグ出力 << "誰を軍団に任命できますか?";
for each(auto bn in ret.候補武将番号【配列用】リスト) {
デバッグ出力 << Get_名字(bn) + Get_名前(bn) << " ";
}
デバッグ出力 << endl;
// 候補のうち、一番先頭の武将、先頭の城で、軍団を新設する
int iGundanID = Set_軍団新設(ret.候補武将番号【配列用】リスト[0], ret.候補城番号【配列用】リスト[0], ret);
if (iGundanID != 0xFFFF) {
デバッグ出力 << "軍団番号【配列用】" << iGundanID << "に軍団が新設された" << endl;
}
else {
デバッグ出力 << "軍団の新設には失敗した" << endl;
}
int list_castle_cnt = ret.候補城番号【配列用】リスト.size();
// 最初の城(vix==0)は軍団長独立に使ったので残りの候補の城を全て奪う、
for (int vix = 1; vix < list_castle_cnt; vix++) {
Set_非本拠城所属軍団(ret.候補城番号【配列用】リスト[vix], iGundanID);
}
// 奪うだけ奪ってから独立
int iDaimyoID = Set_軍団独立(iGundanID);
if (iDaimyoID != 0xFFFF) {
デバッグ出力 << "独立し、大名化に成功した" << endl;
}
else {
デバッグ出力 << "独立し、大名化に失敗した" << endl;
}
}
}
}
}
}
