スイッチONの時、メッセージ自動送り。【解決】

スギスズキ
記事: 71
登録日時: 2016年5月13日(金) 11:58

スイッチONの時、メッセージ自動送り。【解決】

投稿記事by スギスズキ » 2016年7月17日(日) 09:16

お世話になっております。

簡易的な全自動ダンジョン探索システムを制作していたのですが、
戦闘終了時のメッセージで入力待ちが入る為、そこでストップしてしまいます。

スイッチがONの時にメッセージを自動送りに
できるようにしてみたいのですが再現できず困っています。

this._messageWindow.terminateMessage();
これがメッセージを終了させるという意味と思い、

BattleManager.displayRewards = function() {
this.displayExp();
this.displayGold();
this.displayDropItems();
};

この辺りを色々編集してみましたがうまくいきません。

自動メッセージ送りできるプラグインを公開されている方もいらっしゃったのですが、
今回は、システムを起動中の戦闘終了時のメッセージだけ自動送りにしたいだけなので、
何とかできないかと思い質問させていただきました。
もし可能でしたらご助言頂けると助かります…。
最後に編集したユーザー スギスズキ on 2016年7月17日(日) 15:40 [ 編集 1 回目 ]

アバター
Trb
記事: 151
登録日時: 2015年11月15日(日) 19:26
連絡を取る:

Re: スイッチONの時、メッセージ自動送り。

投稿記事by Trb » 2016年7月17日(日) 14:06

戦闘終了時のメッセージには通常の会話イベントなどと同じように制御文字が使えるので、
メッセージの最後にメッセージを自動送りする制御文字『 \^ 』を付けて
制御文字の判定をしているメソッドを改変するのが簡単かなと思います。

『 \^ 』の判定はrpg_window.js 4520行目からの

コード: 全て選択

Window_Message.prototype.processEscapeCharacter = function(code, textState) {
    switch (code) {

    ~中略~

     case '^':
        this._pauseSkip = true;
        break;
 
    ~中略~
 
     }
};

でやっているので、この部分をたとえば

コード: 全て選択

    case '^':
        if($gameParty.inBattle() && !$gameSwitches.value(1)){
            break;
        }
        this._pauseSkip = true;
        break;

こんな風にすれば、戦闘中スイッチ1がオフの時は『 \^ 』が無視され
スイッチがオンの時だけ自動送りが有効になります。
アバター
Trb
記事: 151
登録日時: 2015年11月15日(日) 19:26
連絡を取る:

Re: スイッチONの時、メッセージ自動送り。

投稿記事by Trb » 2016年7月17日(日) 14:21

すみません、投稿してから思いつきましたがもっと単純なやり方がありました。

コード: 全て選択

BattleManager.displayRewards = function() {
    this.displayExp();
    this.displayGold();
    this.displayDropItems();
    if($gameSwitches.value(1)){
        $gameMessage.add('\\^');
    }
};

こんな感じで、スイッチ1がオンの時メッセージの最後に制御文字『\^』を追加するということも出来ます。
($gameMessage.addで制御文字を入力する時は『 \\ 』 というように \ を2つ重ねて下さい)
スギスズキ
記事: 71
登録日時: 2016年5月13日(金) 11:58

Re: スイッチONの時、メッセージ自動送り。

投稿記事by スギスズキ » 2016年7月17日(日) 15:40

Trbさん

返信ありがとうございます。

制御文字が使えるという事は知らなくて、
参考コードのようにしてみたらうまくいきました…!が、
レベルアップした時に再度入力待ちで止まってしまいました;

それで再度メッセージ関連を見ていたら、
入力待ちの部分を見つけまして、

コード: 全て選択

Window_Message.prototype.updateInput = function() {
    if (this.isAnySubWindowActive()) {
        return true;
    }
    if (this.pause) {
    // スイッチがONの時、入力待ち省略
        if (this.isTriggered() || $gameSwitches.value(4)) {
            Input.update();
            this.pause = false;
            if (!this._textState) {
                this.terminateMessage();
            }
        }
        return true;
    }
    return false;
};


このようにしてみたらうまく作動しました!

ただこのままだと
経験値・ゴールド・アイテム取得メッセージ→レベルアップメッセージへの切り替えが早すぎたので、
教えて頂いた制御文字を使って間を入れると丁度いい感じに表示することができました。

スクリプト中での制御文字の使い方も知らなかったので
すごく勉強になりました!本当にありがとうございます!

“MV:質問” へ戻る