最終更新日 2024-06-21

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



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

引数の補足

タイミング

一般的用途

例①

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

  // http://www19.atwiki.jp/nobu6/pages/267.html セリフ等

  // 会見メッセージの商業系の「商業を盛んに」という文字列が元メッセージに含まれているならば…
  if ( Is_文字列マッチ(元メッセージ, "商業を盛んに") ) {
    return "とにかく商業!\x0A商業!\x0A商業!";
  }

  return "";
}

例②

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

  /*
     正規表現もどこでも利用可能である。
     正規表現が使えることで、可変する部分の文字列はあいまいなまま判定できる。
     「^」:文章先頭、 「.+?」:不定形な文字列。
     正規表現では、PerlやRubyに搭載されているほとんど全てのメタ文字機能が利用できる。
   */

  if ( Is_正規表現マッチ(元メッセージ, "^開墾…\x0A.+?…") ) {
    return "開墾…\x0A田畑を耕す…\x0Aのですな…";
  }

  return "";
}

PICTURE

例③

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

  // 商業系で、米・馬・鉄砲の売却時のメッセージの時
  if (Is_正規表現マッチ(元メッセージ, "^他でも.+?[米馬鉄砲]+?を[0-9]+ほど\\s売りたい" )) {

    // メッセージ関連情報を使用する。
    int iBushouID = メッセージ関連情報.第1人称【武将番号】-1; // 1人称の武将IDを得る。
    int iTargetID = メッセージ関連情報.第2人称【武将番号】-1; // 2人称の武将IDを得る。

    // 範囲をチェックして~
    if ( 0 <= iBushouID && iBushouID < 最大数::武将情報::配列数) {

      // メッセージのタイミングでデータパラメタを変更したりする。
      if ( p武将情報[iBushouID].野望 < 110 ) {
        p武将情報[iBushouID].野望 += 1; // 野望を1アップ。
      }

      デバッグ出力 << 元メッセージ << endl;
      デバッグ出力 << "話者:" << Get_名字(iBushouID)+Get_名前(iBushouID) << endl;
      デバッグ出力 << "相手:" << Get_名字(iTargetID)+Get_名前(iTargetID) << endl;
    }
  }

  return "";
}

例④

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

  // 以下のように正規表現のマッチ結果を保存しておくことも可能である。
  // 基本的にPerl、Ruby、Python等で正規表現の記述の基礎中の基礎が身についていることが望ましい。
  正規表現マッチ結果型 myマッチ結果;
  if ( Is_正規表現マッチ(元メッセージ, "^他でも.+?([米馬鉄砲]+?)を(\\d+)ほど\\s売りたい", &myマッチ結果 ) ) {
    デバッグ出力 << "マッチ範囲:" << myマッチ結果[0] << endl;
    デバッグ出力 << "取引対象:" << myマッチ結果[1] << endl;
    デバッグ出力 << "取引量" << myマッチ結果[2] << endl;
  }

  return "";
}