最終更新日 2024-09-25
AND条件::戦争::退却可否
int カスタム::On_カスタム条件(string 条件名, カスタム条件パラメタ型 パラメタ) {
if ( 条件名 == "AND条件::戦争::退却可否" ) {
}
// 変更しない場合-1
return -1;
}
引数の補足
-
パラメタ.整数1:
退却を試みた武将番号
タイミング
- このカスタム条件は、とある武将が退却を試みた際、その成否の判定時に呼び出される。

一般的用途
- このメソッドでは、「退却可能」な武将を、「特定条件下では退却不可能」な状態に変えたい場合に利用する。
一方で、「退却不可能」な状態を「退却可能」には出来ないで注意。
天翔記のデフォルトの仕様において、退却不可能な状態とは、「退却場所たる自勢力の城が1つも存在しない」状態だからである。
例①
int カスタム::On_カスタム条件(string 条件名, カスタム条件パラメタ型 パラメタ) {
if ( 条件名=="AND条件::戦争::退却可否" ) {
// いつも退却できない。
return false;
}
// それ以外は条件を変えない。
return -1;
}
しかし、元来退却が出来ない時とは、「退却出来る城がない」時だけですから、
上記のままでは、退却できない理由が可笑しくなります。
一般的には、次のような「退却出来ない条件」と「退却出来ない理由へのメッセージ置換」のセットを作成することとなるでしょう。
例②
int 退却できない理由=0;
enum { 城内で退却できない=1, 野戦中央の川で退却できない=2 };
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
// 戻れる城が無いのが原因というのを別原因にメッセ―を変える。
if ( Is_文字列マッチ(元メッセージ, "もはやどこにも\x0A戻れる城がない") ) {
int iBushouID = メッセージ関連情報.第1人称【武将番号】-1;
if ( 0 <= iBushouID && iBushouID < 最大数::武将情報::配列数 ) {
if ( 退却できない理由==城内で退却できない ) {
int iCastleID = Get_攻城戦中の城番号()-1;
if ( 0 <= iCastleID && iCastleID < 最大数::城情報::配列数 ) {
退却できない理由 = 0; // 理由を使ったので理由リセット。
return "まずは\x0A"+Get_城名(iCastleID) + Get_城称(iCastleID)+"の外へ\x0A出るのじゃ";
}
} else if ( 退却できない理由==野戦中央の川で退却できない ) {
退却できない理由 = 0; // 理由を使ったので理由リセット。
return "ここは戦場のど真ん中\x0Aしかも川中ぞ\x0Aまずは移動じゃ!";
}
}
}
// 変更しない場合""
return "";
}
int カスタム::On_カスタム条件(string 条件名, カスタム条件パラメタ型 パラメタ) {
/*
* 城内に居たら退却できない。
* 野戦で画面中央で「川」の中に居たら退却できない。
*/
if ( 条件名=="AND条件::戦争::退却可否" ) {
// 退却を試みた、武将番号が入る。
int iBushouID = パラメタ.整数1 - 1;
if ( 0 <= iBushouID && iBushouID < 最大数::武将情報::配列数 ) {
// 攻城戦の画面では一切退却できなくする。
if ( Is_攻城戦中() ) {
退却できない理由 = 城内で退却できない;
return false;
// 野戦の時は、画面のある程度中央で、川の中だと無理
} else if ( Is_野戦中() ) {
ヘックス位置型 pos = Get_武将の野戦ヘックス位置(iBushouID);
int iHexRole = Get_野戦ヘックス役割(pos);
if ( iHexRole == 野戦ヘックス役割::川 ) {
ヘックス位置型 center( 野戦ヘックス::中心X, 野戦ヘックス::中心Y );
if ( Get_ヘックス間隔( pos, center ) <= 8 ) { // ほぼ画面の中央
退却できない理由 = 野戦中央の川で退却できない;
return false;
}
}
}
}
}
// 変更しない場合-1
return -1;
}