memo

ゲーム制作やデザインについての個人的メモ

【ティラノスクリプト】特定の文章をバックログに表示しない方法

========================================

[nolog] バックログ記録停止

http://tyrano.jp/tag/#nolog

Ver4.50rc7以降で公式に[nolog][endnolog]タグが追加されました。以下は古いバージョン向けの情報になりますのでご注意ください。

========================================

息抜き小ネタです。

コンフィグ画面でテキストのスピードを変えた時のテストでメッセージが表示されますよね。コンフィグから抜けてバックログを開いてみると、そのメッセージ(例:テキストの表示速度サンプルです。等)もばっちり反映されちゃってます。これはかっこわるいな~。なんとかしたいな~。

で、色々考えた結果(力業ですが)一応実装できたのでご紹介。コンフィグ画面に限らず、テキストをバックログに保存させたくない場面はたくさんあるので(自分の中で)需要アリ。

・気軽にやる

バックログの文章はConfig.tjsにも書いてあるとおり、tf.system.backlogの配列にどんどん追加されていきます。

そこで文章の直後に、

[iscript]
tf.system.backlog.pop();
[endscript]

と記述する。(マクロ化するといいかも)

pop()は配列の末尾を削除するメソッドです。

つまり、文章が表示されたそばからログを削除していることになります。これならバックログに残りません。

この方法はログを記録しないわけではなく、あくまで記録した後に消去してるので、例えばバックログの最大保存数(デフォルトでは50)がすでに記録されている状態でコンフィグを表示するとその直前まで保存されていたログの一番古いやつが押し出されて消えます。ひとつだけなのでそんなに気にならないかとは思うのですが…。

・本体をちょっといじる

tyrano/plugins/kag/kag.js

pushBackLog: function(str) {
var max_back_log = parseInt(this.kag.config["maxBackLogNum"]);
if (max_back_log < 1) return;
//tf.nologを作成
this.variable.tf["nolog"];
//tf.nologがtrueのときはバックログに記録しない
if (this.variable.tf["nolog"] == true){
}else{
this.variable.tf["system"]["backlog"].push(str);
}
//this.variable.tf["system"]["backlog"].push(str);
if (max_back_log < this.variable.tf["system"]["backlog"].length) this.variable.tf["system"]["backlog"].shift()
},

赤字が追記分で灰色が元の記述の削除部分です

バックログに記録したくない場所で

[eval exp="tf.nolog = true"]

と記述すればOKです。

抜けるときは

[eval exp="tf.nolog = false"]

で。(コンフィグなら無くても大丈夫そうだったけど一応)

自分はこれをマクロ化して[nolog][endnolog]というタグをつくってみました。

使い方はこんな感じ。

[nolog]ここは記録されないよ。[endnolog]ここから記録されるよ。[l]

この方法だと文章の途中でも特定のメッセージだけログに記録させないことが可能です。ちょっと便利になりました。