/
nobu_mod_the_snmod_methodref_on_fukidashi_message.html
141 lines (126 loc) · 6.51 KB
/
nobu_mod_the_snmod_methodref_on_fukidashi_message.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
%(hilight)s
<div class="content-box mb-3 content-lighten">
<h2><i class="fa fa-book fa-fw"></i>string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報)</h2>
<br><br>
<div class="code">
<pre class="brush:cpp;">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
}
</pre>
</div>
</div>
<div class="content-box mb-3 content-lighten">
<h3>引数の補足</h3>
<ul class="pointlist">
<li>
<h4>武将名:</h4>
噴出しを出す武将の姓名(フルネーム)
<li>
<h4>元メッセージ:</h4>
これから噴出に出す予定の文字列。特に何も変更しなければその文字列が出る。
<li>
<h4>メッセージ関連情報:</h4>
メッセージの第1人称や、第2人称、場合によっては、2人の話中に出てくる第3人称まで入っていることがある。<br>
但し、これらの値は特に第2人称以降は、有効な値が入っていないことが多いので注意すること。
</ul>
<ul class="pointlist">
<li>
<h4>使用禁止関数:</h4>
このメソッドの中で、別の「噴出系ダイアログ」や「確認ダイアログ」等、別のダイアログ描画を伴うものを呼び出すのは厳禁である。<br>
</ul>
</div>
<div class="content-box mb-3 content-lighten">
<h3>タイミング</h3>
<ul>
<li><b>噴出しが出される直前に呼ばれるが、このメソッドは吹き出し以外のタイミングでも呼ばれている。<br>
(例えば、ダイアログのメッセージや武将列伝を表示するタイミングなど)<br><br>
しかし、あくまでも使用対象や書き換え対象は「噴出系メッセージ」のみとすること。<br></b>
<p><img src="./cnt_mod/mod_snmod/cnt_mod_scenario_mod_ref_030.png"><br></p>
</ul>
</div>
<div class="content-box mb-3 content-lighten">
<h3>一般的用途</h3>
<ul>
<li>既存に存在する噴出しのメッセージを、特定の状況下で別文字列に置き換えたい場合に使用する。
<li>特定の噴出メッセージが出るのと同時に、何かパラメータの変更処理を行いたい場合に使用する。
</ul>
</div>
<div class="content-box mb-3 content-lighten">
<h3>例①</h3>
<div class="code">
<pre class="brush:cpp;">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
// http://www19.atwiki.jp/nobu6/pages/267.html セリフ等
// 会見メッセージの商業系の「商業を盛んに」という文字列が元メッセージに含まれているならば…
if ( Is_文字列マッチ(元メッセージ, "商業を盛んに") ) {
return "とにかく商業!\x0A商業!\x0A商業!";
}
return "";
}
</pre>
</div>
</div>
<div class="content-box mb-3 content-lighten">
<h3>例②</h3>
<div class="code">
<pre class="brush:cpp;">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
/*
正規表現もどこでも利用可能である。
正規表現が使えることで、可変する部分の文字列はあいまいなまま判定できる。
「^」:文章先頭、 「.+?」:不定形な文字列。
正規表現では、PerlやRubyに搭載されているほとんど全てのメタ文字機能が利用できる。
*/
if ( Is_正規表現マッチ(元メッセージ, "^開墾…\x0A.+?…") ) {
return "開墾…\x0A田畑を耕す…\x0Aのですな…";
}
return "";
}
</pre>
</div>
<p><img src="./cnt_mod/mod_snmod/cnt_mod_scenario_mod_ref_031.png"><br></p>
</div>
<div class="content-box mb-3 content-lighten">
<h3>例③</h3>
<div class="code">
<pre class="brush:cpp;">
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 "";
}
</pre>
</div>
</div>
<div class="content-box mb-3 content-lighten">
<h3>例④</h3>
<div class="code">
<pre class="brush:cpp;">
string カスタム::On_噴出メッセージ直前(string 武将名, string 元メッセージ, メッセージ関連情報型 メッセージ関連情報) {
// 以下のように正規表現のマッチ結果を保存しておくことも可能である。
// 基本的にPerl、Ruby、Python等で正規表現の記述の基礎中の基礎が身についていることが望ましい。
正規表現マッチ結果型 myマッチ結果;
if ( Is_正規表現マッチ(元メッセージ, "^他でも.+?([米馬鉄砲]+?)を(\\d+)ほど\\s売りたい", &myマッチ結果 ) ) {
デバッグ出力 << "マッチ範囲:" << myマッチ結果[0] << endl;
デバッグ出力 << "取引対象:" << myマッチ結果[1] << endl;
デバッグ出力 << "取引量" << myマッチ結果[2] << endl;
}
return "";
}
</pre>
</div>
</div>