戦闘終了後の挙動を入れ替えたい

返信する
rio_a_lavender
記事: 5
登録日時: 2023年12月10日(日) 19:11

戦闘終了後の挙動を入れ替えたい

投稿記事 by rio_a_lavender »

タイトル通りです。
通常だと戦闘終了後はドロップアイテム情報→レベルアップの順に表示されると思うのですが
ドラクエ式にレベルアップ→ドロップアイテム情報の順番に入れ替えたいです。
上記が可能になるプラグインなどをご存知の方は教えてください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by ムノクラ »

rio_a_lavender さんが書きました:タイトル通りです。
通常だと戦闘終了後はドロップアイテム情報→レベルアップの順に表示されると思うのですが
ドラクエ式にレベルアップ→ドロップアイテム情報の順番に入れ替えたいです。
上記が可能になるプラグインなどをご存知の方は教えてください。
デフォルト動作では、
・経験値取得
・レベルアップがあるなら、表示
・所持金獲得
・ドロップアイテムの表示
の順で処理される仕様のようです。

コード: 全て選択

BattleManager.gainRewards = function() {
    this.gainExp();
    this.gainGold();
    this.gainDropItems();
};
何かプラグインなどを入れて、挙動が変化していませんか?
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rio_a_lavender
記事: 5
登録日時: 2023年12月10日(日) 19:11

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by rio_a_lavender »

ムノクラさん、ご回答ありがとうございます。

プラグインの干渉を調べるため、コピーした環境下ですべてのプラグインをオフにして試しましたが
『ドロップアイテム情報』→『レベルアップ』の順番は変わりませんでした。

次に、完全に新規のプロジェクトを作成して挙動が変化するか調べましたが
『ドロップアイテム情報』→『レベルアップ』の順番は変わりませんでした。

rpg_managersも確認しましたが、コピー環境、テスト環境とも同一でした。

コード: 全て選択

BattleManager.gainRewards = function() {
    this.gainExp();
    this.gainGold();
    this.gainDropItems();
};

BattleManager.gainExp = function() {
    var exp = this._rewards.exp;
    $gameParty.allMembers().forEach(function(actor) {
        actor.gainExp(exp);
    });
};

BattleManager.gainGold = function() {
    $gameParty.gainGold(this._rewards.gold);
};

BattleManager.gainDropItems = function() {
    var items = this._rewards.items;
    items.forEach(function(item) {
        $gameParty.gainItem(item, 1);
    });
};
今のところお手上げ状態です……。
引き続き情報をお待ちしております。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by ムノクラ »

rio_a_lavender さんが書きました:ムノクラさん、ご回答ありがとうございます。

プラグインの干渉を調べるため、コピーした環境下ですべてのプラグインをオフにして試しましたが
『ドロップアイテム情報』→『レベルアップ』の順番は変わりませんでした。

次に、完全に新規のプロジェクトを作成して挙動が変化するか調べましたが
『ドロップアイテム情報』→『レベルアップ』の順番は変わりませんでした。

rpg_managersも確認しましたが、コピー環境、テスト環境とも同一でした。

コード: 全て選択

BattleManager.gainRewards = function() {
    this.gainExp();
    this.gainGold();
    this.gainDropItems();
};

BattleManager.gainExp = function() {
    var exp = this._rewards.exp;
    $gameParty.allMembers().forEach(function(actor) {
        actor.gainExp(exp);
    });
};

BattleManager.gainGold = function() {
    $gameParty.gainGold(this._rewards.gold);
};

BattleManager.gainDropItems = function() {
    var items = this._rewards.items;
    items.forEach(function(item) {
        $gameParty.gainItem(item, 1);
    });
};
今のところお手上げ状態です……。
引き続き情報をお待ちしております。
私も新規プロジェクトでテストしているのですが、上記に上げた通りの動作になっているので、ちょっと分かりそうもないですね…

できそうな事は、
1.一度ツクールを完全アンインストール
https://fungamemake.com/archives/2998
2.再インストール
3.新規プロジェクトでテスト
くらいでしょうか。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rio_a_lavender
記事: 5
登録日時: 2023年12月10日(日) 19:11

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by rio_a_lavender »

ムノクラさん、ご回答ありがとうございます。

記事に記載のある通り、完全アンインストール
(steam版ではなかったので、AppData内のキャッシュファイルを削除)してから再インストールし、
新規プロジェクトでの挙動を確認しましたが、やはりドロップアイテム情報→レベルアップの順番でした。

私の環境だけでこの現象は起きていて、ムノクラさんを含むほかの方の環境では再現できないのでしょうか……?
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by Plasma Dark »

表示と実際の取得は別処理ですので、質問者さんの仰る通り、ドロップアイテム入手の表示の後にレベルアップの表示が来ます。
詳しくは BattleManager.processVictory から処理を追ってみてください。

レベルアップの表示が経験値の取得処理とある意味密結合であるため、戦闘勝利時の表示順を思い通りに変えるのは少し面倒になっています。
displayExpをフックして経験値取得までさせ、gainRewardsでは経験値取得を行わないように上書きするとか、勝利時の処理順をいじってなんとかするのが一番カンタンな方法ですが、戦闘報酬周りのプラグインとは競合しやすくなりそうです。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by ムノクラ »

新規プロジェクトで確認したつもりでしたが、スクリーンショットを取りながら見返すと、確かに

勝利、獲得
ドロップアイテム
レベルアップ
の順でした…

混乱を招いてしまい、申し訳ございません。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rio_a_lavender
記事: 5
登録日時: 2023年12月10日(日) 19:11

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by rio_a_lavender »

Plasma Darkさん、補足とご回答ありがとうございます。

現在、戦闘報酬に関するプラグインは
・MKR_LevelUpMessageEx
・LevelupRecover
・YEP_BattleEngineCore
などを入れています。

これらと競合しない形で意図通りに順番を変える方法はありますでしょうか?

ムノクラさん、訂正をありがとうございます。
どうかお気になさらないでください。
アバター
ムノクラ
記事: 2118
登録日時: 2018年2月23日(金) 11:41
連絡する:

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by ムノクラ »

rio_a_lavender様
私の誤情報で、混乱させてしまい、大変申し訳ございませんでした。
Plasma Dark さんが書きました:表示と実際の取得は別処理ですので、質問者さんの仰る通り、ドロップアイテム入手の表示の後にレベルアップの表示が来ます。
詳しくは BattleManager.processVictory から処理を追ってみてください。

レベルアップの表示が経験値の取得処理とある意味密結合であるため、戦闘勝利時の表示順を思い通りに変えるのは少し面倒になっています。
displayExpをフックして経験値取得までさせ、gainRewardsでは経験値取得を行わないように上書きするとか、勝利時の処理順をいじってなんとかするのが一番カンタンな方法ですが、戦闘報酬周りのプラグインとは競合しやすくなりそうです。
ヒントのとおりに作ってみました。

コード: 全て選択

(() => {
    'use strict';

    BattleManager.gainRewards = function () {
        this.gainGold();
        this.gainDropItems();
    };

    const _BattleManager_displayExp = BattleManager.displayExp;
    BattleManager.displayExp = function () {
        _BattleManager_displayExp.call(this);
        this.gainExp();
    };

})();
表示順はレベルアップの部分が独特で戦闘中と条件分岐したり、試行錯誤したのですが、難しく時間がかかりそうなので、先にこちらをお出しします。

ファイル名は何でもよいですが、一応添付します。

ちょっと競合は分からないです…
・MKR_LevelUpMessageEx
・LevelupRecover
・YEP_BattleEngineCore
は入れてみましたが、競合しなかったように見えます。
添付ファイル
changeResult.js
(330 バイト) ダウンロード数: 8 回
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
rio_a_lavender
記事: 5
登録日時: 2023年12月10日(日) 19:11

Re: 戦闘終了後の挙動を入れ替えたい

投稿記事 by rio_a_lavender »

ムノクラさん、ご回答とプラグインの作成をありがとうございます。
お返事が遅くなり申し訳ありません。

さっそく確認したところ、おおむね意図した通りの挙動になっていました。ありがとうございます!
こちらのままでも問題はないのですが、細かなところで一点だけよろしいでしょうか?

こちらのプラグインの挙動と表示は現在、
1,経験値を獲得
2,レベルアップ
3,ゴールドを取得
4,ドロップアイテムを取得
の順序になっているかと思います

この順番を、
1,経験値を獲得
2,ゴールドを取得
3,レベルアップ
4,ドロップアイテムを取得
に変えていただくことは可能でしょうか??

なるべくドラクエに近づけたいなと思い、念のためお聞ききしてみました。
もし難しいようであればこのまま使用させていただきます。
もちろん完成後のクレジットにはムノクラさんのお名前を入れさせていただきます。
返信する

“MV:質問”に戻る