皆様にはいつも大変お世話になっております。久しぶりに質問させていただきます。
「放置したまま勝手に戦闘する」というのを作りたいのです。
『放置の部屋』みたいな所に入ると、勝手に(ランダムで)歩き回って、エンカウントして、自動で戦って、戦闘が終わってまた歩き回って、エンカウントして、戦って‥‥というような感じです。
ところが戦闘に入ると通常は「○○が出現!」と表示されて、そのままキー入力待ちになってしまいます。これだと放置状態では先に進みません。
『用語』の『メッセージ』で「出現」のところを「%1が出現!\|\^」(1秒表示してスキップ)にすれば解決はするのですが、こうしてしまうと通常の戦闘(放置の部屋でないとき)もスキップされてしまいます。
通常時はコマンド入力待ちにして、放置状態のときだけメッセージをスキップ、なんていう設定はできないものでしょうか?皆様のお知恵を拝借したいのです。
よろしくお願いいたします。
【再び】条件による異なったメッセージの表示方法
Re: 条件による異なったメッセージの表示方法
コアスクリプトrpg_objects.jsの421行目の書き換えで良いと思います(2行追加)
スイッチ番号3がオンであれば、表示するテキストに \|\^ を追加します
▲これを▼のように書き換えます
これで、スイッチ番号3がオンのときはオートメッセージになり、
そうでないときは通常通りになります
スイッチ番号3がオンであれば、表示するテキストに \|\^ を追加します
コード: 全て選択
Game_Message.prototype.add = function(text) {
this._texts.push(text);
};
▲これを▼のように書き換えます
コード: 全て選択
Game_Message.prototype.add = function(text) {
var switch_number = 3;
if ($gameSwitches.value(switch_number)) { text += "\x1b|\x1b^"; }
this._texts.push(text);
};
これで、スイッチ番号3がオンのときはオートメッセージになり、
そうでないときは通常通りになります
Re: 条件による異なったメッセージの表示方法
コアスクリプトを書き換えないで済む方法を。
用語の出現メッセージには実は変数が使えます。(添付画像1枚め参照)
なので、通常時は変数を空っぽにしておいて(添付画像2枚め参照)
放置部屋のときは制御文字を入れれば(添付画像3枚め参照)
ご期待の動作をするのではないかと。
制御文字の入れ方が少々特殊( \ ではなく \x1b とするところ)である点にご注意ください。
用語の出現メッセージには実は変数が使えます。(添付画像1枚め参照)
なので、通常時は変数を空っぽにしておいて(添付画像2枚め参照)
放置部屋のときは制御文字を入れれば(添付画像3枚め参照)
ご期待の動作をするのではないかと。
制御文字の入れ方が少々特殊( \ ではなく \x1b とするところ)である点にご注意ください。
Re: 条件による異なったメッセージの表示方法
> 奏ねこま様
確かに良いですが、
スイッチ一発の方が楽じゃないですか?
そして、全てのメッセージに \v[1] と書くんですか?
コアスクリプトを汚したくないなら、
▼こいつをプラグインにしてjs/pluginsに追加すれば済みます
確かに良いですが、
スイッチ一発の方が楽じゃないですか?
そして、全てのメッセージに \v[1] と書くんですか?
コアスクリプトを汚したくないなら、
▼こいつをプラグインにしてjs/pluginsに追加すれば済みます
コード: 全て選択
var _Game_Message_add = Game_Message.prototype.add;
Game_Message.prototype.add = function(text) {
var switch_number = 3;
if ($gameSwitches.value(switch_number)) { text += "\x1b|\x1b^"; }
_Game_Message_add.call(this, text);
};
Re: 【解決済】条件による異なったメッセージの表示方法
ジャングル様、奏ねこま様、ありがとうございました。
ご教示いただくのが早すぎて、私が追いつかないです‥^^;
それにしても「\x1b」にする、なんていう情報はどこでお知りになるのですか?
Javascript界では常識なんですかね??(自分がJavascriptをよく知らないもので‥)
また、プラグインにする方法までご教示いただき、大大感謝です!m(_ _)m
誠にありがとうございました。
ご教示いただくのが早すぎて、私が追いつかないです‥^^;
それにしても「\x1b」にする、なんていう情報はどこでお知りになるのですか?
Javascript界では常識なんですかね??(自分がJavascriptをよく知らないもので‥)
また、プラグインにする方法までご教示いただき、大大感謝です!m(_ _)m
誠にありがとうございました。
Re: 【解決済】条件による異なったメッセージの表示方法
解決されたようで良かったです
>どこでお知りになるのですか?
プラグインとかコアスクリプトとかに書かれてます
\V[2]などの\は、エスケープ文字なのでそれだけでは文字と認識されません
だから"\"と認識させたい場合は"\\"と書く必要があります
※イベントコマンド「文章の表示」では\V[2]は\\V[2]に加工されてから$gameMessage.add()に渡されます
で、\\ は内部的に \x1b に変換されて処理されます★
つまり内部的に\\は\x1bになっているので、最初からそれを与えても良いわけです
もちろん\x1bではなく\\を与えても機能します
$gameMessage.add("\x1bV[2]"); // これで変数2の値が表示されます
$gameMessage.add("\\V[2]"); // これでも構いません
※Vでもvでも構いません
※\C[2]など上記で変換していないタグは、書き出す直前にprocessEscapeCharacterメソッドで値だけが取り出されます
僕も最初は意味不明でした
>どこでお知りになるのですか?
プラグインとかコアスクリプトとかに書かれてます
\V[2]などの\は、エスケープ文字なのでそれだけでは文字と認識されません
だから"\"と認識させたい場合は"\\"と書く必要があります
※イベントコマンド「文章の表示」では\V[2]は\\V[2]に加工されてから$gameMessage.add()に渡されます
で、\\ は内部的に \x1b に変換されて処理されます★
コード: 全て選択
Window_Base.prototype.convertEscapeCharacters = function(text) {
text = text.replace(/\\/g, '\x1b');//←★
text = text.replace(/\x1b\x1b/g, '\\');
text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
return $gameVariables.value(parseInt(arguments[1]));
}.bind(this));
text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
return $gameVariables.value(parseInt(arguments[1]));
}.bind(this));
text = text.replace(/\x1bN\[(\d+)\]/gi, function() {
return this.actorName(parseInt(arguments[1]));
}.bind(this));
text = text.replace(/\x1bP\[(\d+)\]/gi, function() {
return this.partyMemberName(parseInt(arguments[1]));
}.bind(this));
text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
return text;
};
つまり内部的に\\は\x1bになっているので、最初からそれを与えても良いわけです
もちろん\x1bではなく\\を与えても機能します
$gameMessage.add("\x1bV[2]"); // これで変数2の値が表示されます
$gameMessage.add("\\V[2]"); // これでも構いません
※Vでもvでも構いません
※\C[2]など上記で変換していないタグは、書き出す直前にprocessEscapeCharacterメソッドで値だけが取り出されます
僕も最初は意味不明でした
Re: 【再び】条件による異なったメッセージの表示方法
申し訳ありません、解決かと思ったのですが、問題が発生しました‥
放置の状態で、戦闘後レベルアップをするとキー入力待ちになってしまいます。
調べてみると、どうやらGame_Actor.prototype.displayLevelUpという所にある
$gameMessage.newPage();
というのが原因のようです。(↑これをやるとキー入力待ちになるみたいです。)
放置状態のときは↑をやらない、とすればとりあえずは先に進むと思うのですが、
どうせならせっかくなので教えていただいたプラグインにくっつけたいのですが、
見様見真似でやってみてもどうにもうまくいかないのです‥(ToT)
図々しいお願いで誠に恐縮なのですが、レベルアップ時にもキー入力を
スキップするようになるプラグインを教えていただけないでしょうかm(_ _)m
図々しくて、本当に申し訳ありません
何卒よろしくお願いいたします。
放置の状態で、戦闘後レベルアップをするとキー入力待ちになってしまいます。
調べてみると、どうやらGame_Actor.prototype.displayLevelUpという所にある
$gameMessage.newPage();
というのが原因のようです。(↑これをやるとキー入力待ちになるみたいです。)
放置状態のときは↑をやらない、とすればとりあえずは先に進むと思うのですが、
どうせならせっかくなので教えていただいたプラグインにくっつけたいのですが、
見様見真似でやってみてもどうにもうまくいかないのです‥(ToT)
図々しいお願いで誠に恐縮なのですが、レベルアップ時にもキー入力を
スキップするようになるプラグインを教えていただけないでしょうかm(_ _)m
図々しくて、本当に申し訳ありません
何卒よろしくお願いいたします。
Re: 【再び】条件による異なったメッセージの表示方法
遅くなって済みません。
さっき返信を見つけました(忙しくてツクマテ見てなくて・・・)
これでいけませんか?
さっき返信を見つけました(忙しくてツクマテ見てなくて・・・)
これでいけませんか?
コード: 全て選択
(function() {
var switch_number = 3;
var auto_text = "\x1b|\x1b^";
var _Game_Message_add = Game_Message.prototype.add;
Game_Message.prototype.add = function(text) {
if ($gameSwitches.value(switch_number)) { text += auto_text; }
_Game_Message_add.call(this, text);
};
var _Window_Message_updateInput = Window_Message.prototype.updateInput;
Window_Message.prototype.updateInput = function() {
if ($gameSwitches.value(switch_number)) {
return false;
}
return _Window_Message_updateInput.call(this);
};
var _Window__updatePauseSign = Window.prototype._updatePauseSign;
Window.prototype._updatePauseSign = function() {
_Window__updatePauseSign.call(this);
if ($gameSwitches.value(switch_number)) {
this._windowPauseSignSprite.alpha = 0;
}
};
})();