私の見解では、クラッシュは MOG_SceneEquip.js の内部で発生しているようですが、クラッシュが発生しているシーンは通常の装備シーンではなく、Galv のシャードシーン(Scene_MShards)です。Galv の Window_ShardStatus が Window_EquipStatus をベースに構築されており、MOG_SceneEquip がそのウィンドウの更新方法を上書きしているため、シャードシーンが開いた際に、MOG の装備シーンが通常設定するものが存在せず、ウィンドウがそれを参照しようとしてエラー(‘opacity’ が undefined であるというエラー)を引き起こしているのではないかと考えています。
これを素早く確認する方法として、プラグインマネージャーで MOG_SceneEquip を無効にしてからシャードシーンを再度開いてみてください。エラーが消えれば、それら 2 つのプラグイン間に競合があることがわかります。また、プラグインリストで MOG_SceneEquip と Galv の Magic Shards はどの順番で配置されていますか? 場合によっては順番を入れ替えることで解決することもあるため、試してみる価値があります。
返信ありがとうございます。
エラーは、GalvShardsがMogEquipの上にあっても下にあっても発生します。
MOG_SceneEquip を off にしてクリアすれば解決しますか?そうすれば、これら 2 つがペアであることが確認できるはずです。調べてみると、MOG_SceneEquip に関連するこの正確なエラーが、2017 年に Galv の Magic Shards のページで報告されており、MOG 氏は自身のプラグインの later バージョンで互換性が修正されると述べていました。まず確認すべきは、MOG_SceneEquip ファイルのバージョンで、古い場合は atelierrgss から最新のものを持ってきてください。
すでに最新バージョンである場合は、その 2 つの下に小さなプラグインを追加することで回避できるかもしれません。MOG は Window_EquipStatus に更新処理を追加しており、Galv のシャードウィンドウはこの更新を継承していますが、標準の MV はこのウィンドウに独自の更新処理を提供しません。そのため、このプラグインは更新処理を標準のものに戻します:
Window_ShardStatus.prototype.update = function() {
Window_Base.prototype.update.call(this);
};
これを .js ファイルとして js/plugins に保存し、プラグインマネージャーでそれらの 2 つの下に追加して、シャードシーンを開き直してください。
すみませんが、それもうまくいきません。同じエラーのままです。
具体的に話が進めないと原因を絞り込めません。以下の項目を順番に確認し、それぞれに回答してください。番号ごとに一言の回答でも構いません。
- プラグインマネージャーで MOG_SceneEquip を OFF にし、プロジェクトを保存してプレイテストを行い、シャードシーンを開いてみてください。クラッシュは発生しなくなりましたか?はい/いいえで回答してください。
- MOG_SceneEquip を再度 ON に戻してください。私が投稿したワークアラウンド用プラグインが、プラグインマネージャーのリストに表示されており、ステータスが ON になっていますか?また、そのプラグインが GALV_MagicShards と MOG_SceneEquip の両方の下に配置されていますか?追加後にプロジェクトを保存しましたか?
- Windows エクスプローラーで「表示」タブを開き、「ファイル名拡張子」にチェックを入れてから、js/plugins フォルダー内のファイルを確認してください。正確なファイル名は何ですか?拡張子が .js.txt のように付いてしまい、何も読み込まれていない可能性がないか確認しています。
- ワークアラウンドを ON の状態でシャードシーンを開き、クラッシュした際に F8 を押してコンソールを開くか、クラッシュ画面のスクリーンショットを撮影してください。それをここに投稿してください。確認したいのは、最上行にまだ MOG_SceneEquip.js:487 と表示されているか、それとも別の内容に変わっているかです。
- MOG_SceneEquip と GALV_MagicShards のファイルには、どのようなバージョン番号が記載されていますか?これらはプラグインマネージャー内の各プラグインの説明の上部に記載されています。
- もし数分時間があるようでしたら、Galv の Magic Shards デモをダウンロードし、そこに MOG_SceneEquip のみを追加してシャードシーンを開いてみてください。同じ方法でクラッシュしますか?
これらの回答をいただければ、当てずっぽうではなく、具体的な問題点を指摘できます。
それらを確認してくれてありがとう。MOG_SceneEquipをオフにするとクリアされるので、それらがペアであることがわかります。私が調べた限りでは、1.0が最新のMOG_SceneEquipのようですね。そのため、アップデートは選択肢ではありません。
MOG_SceneEquipの487行目は this._faceSprite.opacity = this.contentsOpacity で、これは装備ステータスウィンドウに追加されるアクターの顔スプライトをフェードインさせる箇所です。シャードウィンドウも同じ更新処理を実行しているようですが、顔スプライトが設定されないため、設定する対象がありません。新しいスクリーンショットでもまだ487行目を指しているため、私が投稿したパッチが実際に実行されていないようです。Galvが Window_ShardStatus を他のプラグインからアクセスできないように彼のプラグイン内部に保持している可能性があります。もしそうなら、ゲーム起動時に最後のパッチでエラーが発生し、何もしないことになります。
このバージョンはMOGの関数を直接パッチするため、Galvのウィンドウにアクセスする必要はありません。古いパッチをOFFにした後、これを新しい .js ファイルとして js/plugins に保存し、MOG_SceneEquipの以下のどこかに配置してください:
var _baz_mogEquipStatusUpdate = Window_EquipStatus.prototype.update;
Window_EquipStatus.prototype.update = function() {
if (this._faceSprite) {
_baz_mogEquipStatusUpdate.call(this);
} else {
Window_Base.prototype.update.call(this);
}
};
それでもクラッシュする場合は、開発者ツールのスクリーンショットを確認してください。Elementsタブで開かれているので、上部のConsoleをクリックして、そこに何が表示されているかをスクリーンショットに収めてください。隅の赤い12は12件のエラーがログに記録されていることを意味しており、その中にパッチが読み込まれない理由が書かれている可能性があります。
MOGの装備シーンでは、ステータス名はレイアウト画像から取得されるため、drawParamName が空の関数に置き換えられています。Galvのシャードウィンドウはこの設定を継承しているため、隣に何も表示されない状態で数値のみが描画されてしまいます。
顔スプライトを持たないウィンドウに対してのみ、同じ方法で名前を戻すことができます。同じファイル内の最初のパッチの下に以下のコードを追加してください:
Window_EquipStatus.prototype.drawParamName = function(x, y, paramId) {
if (this._faceSprite) return;
this.changeTextColor(this.systemColor());
this.drawText(TextManager.param(paramId), x, y, 120);
};
名前が数値と重なってしまう場合は、まず120の値を小さくしてみてください。それでも重なる場合は、x を x + 8 などに書き換えて位置をずらせば、希望する配置に調整できるはずです。
Parのグラフィックはすでにそのウィンドウに読み込まれていますが、サイズ調整が行われません。MOGはrefresh内で画像から_parDataを埋めていますが、シャードウィンドウではそのrefreshが実行されないため、幅と高さが0のままになり、bltが何も描画しません。
以下のコードを他の2つの下に追加してください:
var _baz_mogDrawRightArrowM = Window_EquipStatus.prototype.drawRightArrowM;
Window_EquipStatus.prototype.drawRightArrowM = function(x, y, paramId) {
if (!this._faceSprite) {
if (!this._parImg) { this._parImg = ImageManager.loadMenusequip("Par"); }
if (this._parImg.width > 0) {
this._parData = [this._parImg.width / 3, this._parImg.height];
}
}
_baz_mogDrawRightArrowM.call(this, x, y, paramId);
};
Par.pngはimg/menus/equipに配置する必要があります。これはMOG自身の装備シーンで使用されているものと同じです。シーンを開いた直中に記号が表示されず、カーソルを移動すると表示される場合は、画像がまだ読み込み中だからです。
ありがとう、今動きました。シャードの画面で、ウィンドウの透明度を0に設定することは可能ですか?
そうです。MOGは自身の装備シーンでまさにそれを行っています。すべてのウィンドウのopacityを0に設定し、レイアウト画像をその背後に配置しています。つまり、Galvのシーンでも同じことをするだけです。
GalvがScene_MShardsを公開しており、別のファイルからそれを取得できるかどうかは分かりません。そのため、ここでは実行時にシーン名をチェックしています。これを同じパッチファイルに追加してください:
var _baz_sceneBaseStart = Scene_Base.prototype.start;
Scene_Base.prototype.start = function() {
_baz_sceneBaseStart.call(this);
if (this.constructor.name === "Scene_MShards" && this._windowLayer) {
this._windowLayer.children.forEach(function(w) {
if (w instanceof Window_Base) w.opacity = 0;
});
}
};
これにより、シャードシーン内のすべてのウィンドウ(ヘルプウィンドウを含む)のフレームと背景がクリアされ、テキストとシャードアイコンはそのまま保持されます。もしフレームは維持したまま背景だけをフェードアウトさせたい場合は、opacityの代わりにbackOpacityを使用してください。



