【解決済】「BMSP_StateDisplayExtension」の不具合について

アバター
HiOCAY
記事: 13
登録日時: 2016年9月15日(木) 00:46

【解決済】「BMSP_StateDisplayExtension」の不具合について

投稿記事by HiOCAY » 2021年7月24日(土) 09:01

お世話になっております。
件名の通りgentlawkさんの「BMSP_StateDisplayExtension」の不具合に悩んでおり、お知恵を拝借したく書き込ませていただきます。

ツクールのバージョンは1.6.2です。

gentlawkさん
 BMSP_StateDisplayExtension(Ver1.02)
 http://blueredzone.com/script/mv/mv_statedisplayextension.html
↑のプラグインを使用するために
 BMSP(Ver1.11)
 http://blueredzone.com/script/mv/mv_bmsp.html
 BMSP_ContentsUpdator(Ver1.01)
 http://blueredzone.com/script/mv/mv_contentsupdator.html
この二つが必要。

不具合の内容ですが、BMSP_StateDisplayExtensionがONになっていると、
1、マップシーンではメニュー画面にて状態異常にかかっているアクターのステータスを見て他のアクターにページを切り替えるとステートアイコンが表示されたままになってしまう。
2、戦闘中にアクターの編成を行う画面でステートがかかっていないアクターにもステートが表示されてしまう。

といった状況になってしまいます。

ScreenShot2.jpg
ScreenShot2.jpg (73.12 KiB) 閲覧数: 1805 回

ハロルドくんが戦闘不能(戦闘終了時解除されない)になったまま戦闘終了し、メニューでステータスを見て他のアクターにページを切り替えた際、戦闘不能のステートアイコンが残ったままになってしまっている。
(戦闘不能ハロルドくんのステータスを開かなければ他のアクターにステートアイコンは表示されません、一度表示してしまうと残り続けてしまう、といった感じのようです。)

また、2に関してですが、拙作ではやなさんの
 SceneFormation(並び替えシーン ver1.09)
 https://w.atwiki.jp/pokotan/pages/3.html
も、利用させていただいているのですが、

ScreenShot.jpg
ScreenShot.jpg (133.18 KiB) 閲覧数: 1805 回

編成画面を開くと同じように、ステートにかかっていないアクターにもステートアイコンが表示されてしまいます。

「BMSP_StateDisplayExtension」だけをOFFにすればこの不具合は起こらず、
素人考えで1の事象を解決すれば2の事象も解決するだろう、と考えておりまして「BMSP_StateDisplayExtension」をどうにかすればいいのではないか、というところまではたどり着いたのですが、BMSP_ContentsUpdatorでは「ウインドウの指定領域の表示内容を切り替える機能を提供します。」と記載されているので、この辺りも関わっているのか、皆目見当がつきません……。

当方、スクリプトの知識は皆無でございまして、プラグインは読めず書けずといった有様なのですが、gentlawkさんも2016年ごろから活動をお休みされていて、サイトの更新もないようですし、ツクールMVのプラグインに関してはMITライセンスだとサイトにも記載されておりましたので、もし修正が可能なようでしたら、何行目をなんと書き直せ(足せ)ばよい、など(はたまたどうにもならないのか…)、ご教示いただければ幸いです。(テキストエディタでプラグインを書き換えたりするのは良くないというのだけは聞きかじっていたのでVSCodeだけはインストールしております… :oops:

乱文、長文失礼いたしました。
どうぞよろしくお願いいたします。
最後に編集したユーザー HiOCAY on 2021年7月25日(日) 08:40 [ 編集 1 回目 ]

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by Plasma Dark » 2021年7月24日(土) 12:34

1、マップシーンではメニュー画面にて状態異常にかかっているアクターのステータスを見て他のアクターにページを切り替えるとステートアイコンが表示されたままになってしまう。


BMSP_StateDisplayExtension のバグですね。アクター切り替え時に、AreaManagerをリフレッシュしていないので前のアクターのアイコンが残り続けます。
下記のコードをプラグイン化して読み込むことで、解決します。

コード: 全て選択

(function () {
  'use strict';

  Window_Base.prototype.clearUpdateArea = function () {
    this.areaManager.unregisterAll();
  };

  const _Window_Status_refresh = Window_Status.prototype.refresh;
  Window_Status.prototype.refresh = function () {
    this.clearUpdateArea();
    _Window_Status_refresh.call(this);
  };
})();


2、戦闘中にアクターの編成を行う画面でステートがかかっていないアクターにもステートが表示されてしまう。

SceneFormation のバージョンは 1.091 であることを前提として書きます。(手元にあるのがそのバージョンだったので)
これも本質的には1と同じ不具合なんですが、 SceneFormation のスコープ内でリフレッシュ処理が完結してしまっているのが厄介です。
1の対処プラグインを導入した状態で、 SceneFormation にコードを追記するのが一番ラクだとは思います。

コード: 全て選択

Window_FormationStatus.prototype.refreshContents = function(){
+  this.clearUpdateArea();
  ...
};


先頭に+と書いた行の、+以外を追記してみてください。
アバター
HiOCAY
記事: 13
登録日時: 2016年9月15日(木) 00:46

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by HiOCAY » 2021年7月24日(土) 14:52

Plasma Dark さんが書きました:
1、マップシーンではメニュー画面にて状態異常にかかっているアクターのステータスを見て他のアクターにページを切り替えるとステートアイコンが表示されたままになってしまう。


BMSP_StateDisplayExtension のバグですね。アクター切り替え時に、AreaManagerをリフレッシュしていないので前のアクターのアイコンが残り続けます。
下記のコードをプラグイン化して読み込むことで、解決します。

コード: 全て選択

(function () {
  'use strict';

  Window_Base.prototype.clearUpdateArea = function () {
    this.areaManager.unregisterAll();
  };

  const _Window_Status_refresh = Window_Status.prototype.refresh;
  Window_Status.prototype.refresh = function () {
    this.clearUpdateArea();
    _Window_Status_refresh.call(this);
  };
})();


2、戦闘中にアクターの編成を行う画面でステートがかかっていないアクターにもステートが表示されてしまう。

SceneFormation のバージョンは 1.091 であることを前提として書きます。(手元にあるのがそのバージョンだったので)
これも本質的には1と同じ不具合なんですが、 SceneFormation のスコープ内でリフレッシュ処理が完結してしまっているのが厄介です。
1の対処プラグインを導入した状態で、 SceneFormation にコードを追記するのが一番ラクだとは思います。

コード: 全て選択

Window_FormationStatus.prototype.refreshContents = function(){
+  this.clearUpdateArea();
  ...
};


先頭に+と書いた行の、+以外を追記してみてください。


こんにちは! ありがとうございます!
おかげさまで他のアクターにステートの表示が残り続けてしまう不具合は解消されました!
マップシーンでも、編成画面でもスッキリしました!
本当に助かりました!

Plasma Darkさんに謝らなければならないことが二つあります…。

一つはやなさんのSceneFormationなのですが、ずっとサイトの方からzipファイルをDLしていたのでやなさんがGitHubにプラグインをアップロードされていることを存じ上げておりませんでした…。
現在はGitHubよりDLし、バージョン1.093を導入しました。こちらの確認不足で申し訳ございません。(なおver1.093でも上記の不具合は出たので、教えていただいたコードの記述はさせていただきました。ありがとうございます!)

そしてもう一つは、ステートの表示が残ってしまう部分がもう一箇所あったことです。
戦闘に参加しているアクターと控えのアクターを交代させた時、先に戦闘に参加していたアクターのステートが下部のウィンドウに残り続けてしまうといった症状です。
編成画面を開くと消えてしまう部分だったので完全に見逃しておりました…。

スクリーンショット.jpg
スクリーンショット.jpg (111.44 KiB) 閲覧数: 1739 回


こちらもやはり「BMSP_StateDisplayExtension」をOFFにすると解消されます。試しに「SceneFormation」はONのまま試してみました(エラーが出てしまったのでこの状態でテストプレイする際は『this.clearUpdateArea();』の記述は消しております)が、この場合は編成画面を閉じると交代先のアクターのステート表示はリフレッシュされていました。
こちらの対処方法はございますでしょうか…?

わざわざご回答いただいたのに、こちらの確認不足でさらに質問が増えてしまい、申し訳ございません。

どうぞよろしくお願いいたします。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by Plasma Dark » 2021年7月24日(土) 16:57

現在はGitHubよりDLし、バージョン1.093を導入しました。こちらの確認不足で申し訳ございません。


1.093が公開されていたことに、私も今気が付きました。
(1年以上前の更新履歴の中に私の名前があるけど、今となっては全く思い出せません)

そして、どうも私の手だか助言だかによる更新があったおかげで、2の対処のために SceneFormation.js を直接書き換えなくても良さそうです。
前の書き込みの1の対処プラグインに加えて、下記をプラグイン化して導入してみてください。

コード: 全て選択

(function () {
  'use strict';

  const _Window_FormationStatus_refreshContents = Window_FormationStatus.prototype.refreshContents;
  Window_FormationStatus.prototype.refreshContents = function () {
    this.clearUpdateArea();
    _Window_FormationStatus_refreshContents.call(this);
  };
})();


そしてもう一つは、ステートの表示が残ってしまう部分がもう一箇所あったことです。


この症状、原理的にはステートアイコンを表示するあらゆるウィンドウで起こります。
実は、メニューウィンドウでアクター選択をスクロールする場合にも、ステートアイコンが残ってしまいますね。

こうなってくると流石に、AreaManagerをウィンドウの子要素にしていないのがそもそもの間違いな気はしてきました。
が、根本的な設計の間違いに対処しようとすると1から作り直しになってしまうので、それは誰かにお任せするとして、パッチで都度対処してしまうのが今は一番楽ですね。

https://gist.github.com/elleonard/e28cc7781c3313def08119c9ded9df35

こちらのコードを、1の対処プラグインに上書きしてください。(Rawボタンを右クリックして対象をファイルに保存すると簡単です)
とりあえず Window_Selectable にも対応しておけば、メニュー画面や戦闘時の表示も問題なくリフレッシュされてくれるはずです。
アバター
HiOCAY
記事: 13
登録日時: 2016年9月15日(木) 00:46

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by HiOCAY » 2021年7月25日(日) 01:33

Plasma Darkさん

こんばんわ!お世話になっております!
お返事が遅くなってしまいまして申し訳ありません、仕事で出かけておりました…。

結果からお伝えしますと、変更後のメンバーにステートの表示が残り続けてしまう症状は、解消されませんでした。

スクリーンショット2.jpg

新規のプロジェクトにて動作確認をしていますので、何か他のものが悪さをしているようなことはないと思われます。
(コンソールを開いて確認しましたが赤文字が表示されることはありません。)


念の為確認させていただきたいのですが
2の対処のために SceneFormation.js を直接書き換えなくても良さそうです。
前の書き込みの1の対処プラグインに加えて、下記をプラグイン化して導入してみてください。

とありましたので、『this.clearUpdateArea();』の部分は消し。

コード: 全て選択

(function () {
  'use strict';

  const _Window_FormationStatus_refreshContents = Window_FormationStatus.prototype.refreshContents;
  Window_FormationStatus.prototype.refreshContents = function () {
    this.clearUpdateArea();
    _Window_FormationStatus_refreshContents.call(this);
  };
})();


こちらを「SceneFormationPatch」と名前をつけてプラグイン化しました。(打ち間違い防止のため、コピペをしさせていただきました。ありがとうございます!)

https://gist.github.com/elleonard/e28cc7781c3313def08119c9ded9df35
こちらのコードを、1の対処プラグインに上書きしてください。

ということでしたので、追記ではなく上書きならば、と1の対処のため作ったプラグインを削除し、DLさせていただいたパッチのプラグインをそのままのファイル名で追加させていただきました。

プラグインのリストは現在このようになっております。
スクリーンショット1.jpg
スクリーンショット1.jpg (47.28 KiB) 閲覧数: 1654 回

(色々と順番を変えてみたりしたのですが効果はありませんでした…。)

まだこちらで試せることはありますでしょうか?
お手数をおかけいたしますが、どうぞよろしくお願いいたします。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by Plasma Dark » 2021年7月25日(日) 05:40

大変失礼しました。 Window_BattleStatus は refresh メソッドを上書きしていましたね。
1の対処プラグインを下記のものに差し替えていただければ解決します。

https://gist.github.com/elleonard/e28cc7781c3313def08119c9ded9df35
アバター
HiOCAY
記事: 13
登録日時: 2016年9月15日(木) 00:46

Re: 「BMSP_StateDisplayExtension」の不具合について

投稿記事by HiOCAY » 2021年7月25日(日) 08:39

Plasma Darkさん

おはようございます! お世話になっております!

改めて頂いたパッチを使用したところ、ステートのアイコンが正しく表示されるようになりました!
何度も何度もご対応いただき、本当にありがとうございます!

トピックに貼らせていただいていたスクショ画像は、新規プロジェクトで試したものだったため、戦闘不能アイコン一つでしたが、実際作成中のデータは状態異常もバフもデバフもモリモリになる仕様で組んでいたため、解決しなかったら大惨事になるところでした。最悪ステート表示か仲間編成か、いずれかを諦めようとさえ考えていたところでしたので、勇気を出してトピ立てして本当によかったです……。

貴重なお時間を割いていただきまして、本当にありがとうございました!
重ねてお礼申し上げます!

これにて【解決済み】とさせていただきます! :D

“MV:質問” へ戻る