EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by ksk » 2022年4月30日(土) 17:34

いつもお世話になります。

やな様が作成された装備&ショップステータス改造プラグインについて相談させていただけますでしょうか。
https://plugin.fungamemake.com/archives/2063

本プラグインは導入することでショップ画面・装備画面が独自のデザインとなるプラグインです。
しかし、プラグイン導入時に両手持ち装備の武器(特徴欄に、装備封印:盾を設定)にカーソルを合わせた際、
装備後の表示ステータスが正常に表示されない現象を確認し、修正したいと考えております。

具体的な説明としましては、装備画面でのカーソルを片手武器→両手武器→片手武器と切り替えていったときに、
両手武器にカーソルが移動して以降、別の武器でも盾を装備していない能力値が表示されるようになってしまいます。
上記説明だけだと分かりにくいと思いますので画像を添付いたします。
※盾の装備状況が分かりやすくなるよう、盾の能力値を攻撃500・防御500と極端に高く設定しています。

添付の画像を見てもらうと分かるように、2枚目の両手持ち武器にカーソルが移動して以降、
片手武器に戻した場合にも盾のステータスが反映されてない能力値が表示されるようになってしまいます。
これを、片手武器選択時には盾の能力値も反映した数値が表示されるよう修正したいのですが、
プラグインのどの記述を修正すればよいかご教示いただけないでしょうか。

環境の再現が大変だと思うので、必要最低限の要素をまとめたサンプルプロジェクトのDLリンクを添付します。
https://23.gigafile.nu/0530-b3561d0644e ... c7e2df3766
パスワード:322

なお、補足の情報といたしまして、本プラグインにはショップ購入画面も独自のレイアウトに変更する機能があるのですが、
そちらについては片手武器・両手武器に関わらず能力値が正常に表示されるようです。
添付ファイル
001.png
①片手武器にカーソル
002.png
②両手武器にカーソル移動
003.png
③片手武器にカーソル移動

名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by 名無し蛙 » 2022年5月01日(日) 17:06

サンプル動かしてみましたけど再現しませんでしたよ
多分他のプラグインとの競合か、あるいは何らかの設定が必要ではないかと思います
一応処理の流れも軽くチェックしてみましたけど何とも言えませんね
再現出来ない事には見当がつかないです
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by ksk » 2022年5月01日(日) 18:52

まさか、と思いアップロードしたファイルをDLしてテストしてみましたが、
やはり不具合と思われる挙動は再現されるようです。
お手数ですが、下記操作で状況が再現されるかご確認いただけないでしょうか。

・DLしたサンプルプロジェクトを起動し、テストプレイを実施。
・装備メニューからハロルドの武器:剣にカーソルを合わせる。この時装備まではさせてない。
 (表示上のステータス:攻撃516→526 ※盾を装備したステータスが表示されている) 
・カーソルを1つ下の斧に移動させ、装備させずにステータスを確認。
 (表示上ステータス:攻撃:516→26 防御536→36 ※盾を外したステータスが表示されている)
・再度カーソルを1つ上の剣に移動させ、装備させずにステータスを確認。
 (表示上ステータス:攻撃:516→26 防御536→36 ※盾を外したステータスが表示されている)

上記のように、一度両手持ち武器にカーソルを合わせると、それ以降は片手武器の場合でも
盾を外した状態のステータスが表示されるようになるのですが、いかがでしょうか。
※武器を装備した後に確認するとちゃんと正常な数値で表示されます。盾も勝手に外されたりはしません。
 あくまで装備画面で武器のカーソルを切り替えていった際の表示が、
 両手持ち武器にカーソルを合わせた前後で変わってしまうようです。

もしやコアスクリプトが破損しているのかとも思い再インストール等試してみましたが結果変わらずでした。
また、サンプルプロジェクトは本プラグインしか導入していないため競合の可能性は低いと考えてます。
参考までにツクールのバージョンは1.6.3でwindowsのダウンロード版を使用しています。
最後に編集したユーザー ksk on 2022年5月01日(日) 19:26 [ 編集 1 回目 ]
名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by 名無し蛙 » 2022年5月01日(日) 19:26

失礼しました、そちらでしたか。ショップの方かと思いました

直し方は簡単で1363行目

コード: 全て選択

    // 再定義
    Window_EquipItem.prototype.updateHelp = function() {
        Window_ItemList.prototype.updateHelp.call(this);
        if (this._actor && this._statusWindow) {
            if (!this._tempActor) this._tempActor = JsonEx.makeDeepCopy(this._actor);
            var actor = this._tempActor;
            actor.forceChangeEquip(this._slotId, this.item());
            console.log(actor.equips())
            this._statusWindow.setTempActor(actor);
        }
    };

をまるまる削除(コメントアウト)しちゃって良いと思うんですよ。
問題は何故こんなバグの温床にしかならないような処理を書いたのか、
その理由がよく分からないんですけど中途半端に修正するよりかはばっさり切った方が良いと思いますね。
これを削る事により発生する不具合というものがちょっと見当つかないです。
アバター
リクドウ
記事: 84
登録日時: 2019年9月03日(火) 23:21
連絡を取る:

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by リクドウ » 2022年5月01日(日) 19:48

こんにちは。
サンプルプロジェクトをダウンロードさせていただき確認してみましたところ、
おっしゃっている不具合が再現しました。

私の環境は下記のとおりです。
OS: Windows10
MV本体: v1.6.3/ストア版(Steam版ではない方)

試している間に名無し蛙様から解決方法の回答がついているようなので不要かとは思いつつ、
気になった点がありましたので、一応回答をつけさせていただきます。

ダウンロードさせていただいたプロジェクトに同梱されていた
プラグインのバージョンが、v1.09となっていたのですが、
やな様のサイトでつい先ほどダウンロードした該当のプラグインは
バージョンの表記がv1.08となっておりました。
こちらに差し替えてみたところ、私には正常に動作しているように見えました。

(名無し蛙様の回答がついているのでスルーしていただいて全く問題ありませんが)
以下のやな様のサイトからプラグインをダウンロードし直して、
一度お試しになってみていただければと思います。
https://w.atwiki.jp/pokotan/pages/3.html

※ 装備&ショップステータス改造 の文字列で検索をかけていただければすぐ見つかると思います。
------------------------------------------------------------------------------
リクドウ[Rikudou]
Twitter: https://twitter.com/Rikudou_gdv

下記サイトにて、
制作中の作品紹介や、自作素材の配布などを行っています。
https://kai-rikudou.com/
------------------------------------------------------------------------------
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by ksk » 2022年5月01日(日) 20:27

リクドウ様

情報提供ありがとうございます。
おっしゃる通り、v1.08で試してみたところ私の環境でも正常に動作しているように見えました。
加えて、プラグインの中身を確認したところ名無し蛙様が指摘された『再定義』に関する記述もないようです。

v1.08→v1.09への更新履歴を確認してみたところ、
・ver1.09:180315 会心回避と魔法回避の表示が入れ替わっていたのを修正。
としか書かれていないため、特に再定義については触れられていないように思いますが、不思議ですね……。
※余談ですが、ざっと確認したところv1.08において、
 とくに会心回避と魔法回避の表示が入れ替わっているようにも見えませんでした。

上記少し気になるところではございますが、v1.09において
名無し蛙様がご指摘くださった記述をコメントアウトすることで正常に描写されるようになりましたので、
ひとまず最新版のファイルを修正したものを使用してみようと思います。

簡単にテストプレイした限りでは不具合は確認できませんでしたが、
上記バージョン違いによる差異など少し気になるポイントもありますので、
スレッドを解決済にするのはもう少し待ってからにしようと思います。
ここまで調査にご協力して下さった皆様、本当にありがとうございました。


■以下、蛇足
同様の現象が、フトコロ様が作成されたFTKR_RestrictRefreshWindows.jsでも発生する事がわかりました。
viewtopic.php?t=7123
サンプルプロジェクトにそのまま放り込んで再現できます。

こちらのプラグインについては、導入はしておりましたが必須ではなかったため
ひとまず機能をOFFにすることで回避することにいたします。
恐らく『装備データ比較用のダミーアクターの作成処理に関する軽量化』の影響だと思われますが、
素人目にみてもプラグインの根幹に関わる機能であるため修正は難しいのではないか?と考えております。

もし有識者の方で、『いやいやこの記述を修正すれば正常に表示されるようになるよ』と
知見をお持ちの方がおりましたら返信いただけますと幸いです。
名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by 名無し蛙 » 2022年5月02日(月) 01:35

ksk さんが書きました:もし有識者の方で、『いやいやこの記述を修正すれば正常に表示されるようになるよ』と
知見をお持ちの方がおりましたら返信いただけますと幸いです。

指定のスロット以外の装備品が途中で外れてしまう事を想定していないが故のチェック漏れだと思いますね。
見映えは悪いですけど

コード: 全て選択

Window_EquipItem.prototype.updateTempActorEquip = function() {
        if (this._actor && this._statusWindow && this._index >= 0) {
            if (!this._statusWindow._tempActor
            || this._actor.equips().filter((e, i) => (i !== this._slotId) && e).length
            !== this._statusWindow._tempActor.equips().filter((e, i) => (i !== this._slotId) && e).length) {
                var actor = JsonEx.makeDeepCopy(this._actor);
                actor.forceChangeEquip(this._slotId, this.item());
                this._statusWindow.setTempActor(actor);
            } else {
                this._statusWindow._tempActor.forceChangeEquip(this._slotId, this.item());
                this._statusWindow.refresh();
            }
        }
};

と条件を一つ加える事で一応対応は出来ます。
対象スロットID以外で現在装備と一時装備の個数に変動があった場合、
その次の更新処理からtempActorを仕切り直します。

※条件にミスがあったので修正
ksk
記事: 108
登録日時: 2020年11月15日(日) 19:05

Re: EquipAndShopStatusR.jsで両手装備時のステータスを正常に表示したい

投稿記事by ksk » 2022年5月02日(月) 11:16

名無し蛙様

何度もアドバイスいただきありがとうございます。
ご指摘いただいた通り記述を追加したところ正常に表示されるようになりました。
本当にありがとうございました。

“MV:質問” へ戻る