ページ 1 / 1
【解決済み】BattleManager.processVictory(); で戦闘勝利させるとメッセージが戦闘終了後のマップ画面で発生する
Posted: 2021年10月07日(木) 02:12
by しらそまん
お世話になっております。
敵が残っていても勝利にしたいと思い、BattleManager.processVictory();のスクリプトを用いてみました。
こちらで勝利することは可能なのですが、即座に戦闘画面から離脱して経験値やお金獲得のメッセージが戦闘終了後のマップ画面で発生してしまいます。
こちらを修正する方法はなにかありますでしょうか?
よろしくお願いいたします。
Re: BattleManager.processVictory(); で戦闘勝利させるとメッセージが
Posted: 2021年10月07日(木) 16:06
by Plasma Dark
即座に戦闘画面から離脱して経験値やお金獲得のメッセージが戦闘終了後のマップ画面で発生してしまいます。
BattleManager.processVictory(); のみを実行するコモンイベントを呼び出すスキルや、バトルイベントのスパンをバトルやターンにして再現を試みましたが、再現しませんでした。
どのようにprocessVictoryを呼んでいるのでしょう。
Re: BattleManager.processVictory(); で戦闘勝利させるとメッセージが
Posted: 2021年10月07日(木) 20:31
by しらそまん
お返事ありがとうございます。
スクリプトを実行で BattleManager.processVictory(); で呼び出しています。
スキルでコモンイベントを呼び出し、その中で勝利条件を満たした時に実行するようにしています。
こちらでもいろいろ試してみたのですが、BattleManager.processVictory();のあとに何もイベントがないと表題の動作になり、何かしら実行するイベントが有るときは戦闘中にメッセージが発生する正しい動作になりました。
とりあえずダミーでメッセージを差し込めばそのイベントは戦闘後には表示されないようなので動作としてはうまくいくようになりました。
一応はこれで大丈夫なのですが、こちらから考えられる原因はわかりますでしょうか?
以上です。お手数ですがよろしくお願いいたします。
Re: BattleManager.processVictory(); で戦闘勝利させるとメッセージが
Posted: 2021年10月07日(木) 21:53
by Plasma Dark
すみません。検証用プロジェクトが壊れていたので再現できないだけでした。
普通に、スキルでコモンイベントを呼び出し、 BattleManager.processVictory(); すると戦闘から抜けてマップ上でメッセージが出てしまいますね。
お試し頂いたように、空メッセージを後ろに付け足すだけでも解決はします。
以下のようなプラグインを入れて対応する手もあります。( processVictory を直接呼び出すのではなく、プラグインコマンドで通常の勝利条件を満たしたときと同じような処理を行わせます)
https://gist.github.com/elleonard/20d63 ... ffd09ca59a
以下、詳しい原因の解説になります。
BattleManager.processVictory(); は、戦闘のフェーズを戦闘終了フェーズに移行させる副作用を持ちます。
通常、勝利条件を満たした場合、 BattleManager.processVictory() を実行するメソッド checkBattleEnd が真を返します。
これによって BattleManager.update() のループから抜けて Scene_Battle に制御が移り、メッセージの表示を終えてから、戦闘終了フェーズの処理によってマップへ戻ります。
BattleManager.processVictory() を単体で実行してしまうと、 checkBattleEnd が偽を返し、 Scene_Battle に制御が戻ることなく、即座に戦闘終了フェーズの処理 updateBattleEnd が呼び出されてしまいます。
メッセージの表示を待たずに戦闘終了フェーズの処理によってマップへ戻り、その後でメッセージが処理されてしまう、というわけです。
Re: BattleManager.processVictory(); で戦闘勝利させるとメッセージが
Posted: 2021年10月08日(金) 01:47
by しらそまん
ありがとうございます。
とりあえず空メッセージが簡単なのでこちらで処理しようと思います。
丁寧なご対応ありがとうございました!