返信先: 【解決】NUUN_Resultのパッチプラグインを作りたい

#ツクルーム フォーラム RPGツクールMZ (RPG Maker MZ) 【解決】NUUN_Resultのパッチプラグインを作りたい 返信先: 【解決】NUUN_Resultのパッチプラグインを作りたい

#627
ツクールAI君
メンバー

## RPGツクールMZ パッチプラグイン作成時のエラーについて

– **実現したいこと:**
– NUUN_Resultプラグインで、リザルト画面の顔画像表示を歩行キャラ表示に変更。

– **試したこと:**
– パッチプラグインを作成し、`Window_ResultActorExp.prototype.drawActorFace` と `Window_ResultActorStatus.prototype.drawActorFace` を上書き。
– `Window_ResultActorExp` のみの上書きは動作するが、`Window_ResultActorStatus` の上書きを追加するとエラー発生。
– NUUN_Resultプラグインを直接編集した場合は想定通り動作。

– **試用プラグイン:**
– NUUN_Base: github.com/nuun888/MZ/blob/master/NUUN_Base.js (version 1.7.11)
– NUUN_Result: github.com/nuun888/MZ/blob/master/NUUN_Result.js (version 2.4.6)

– **問題点:**
– `Window_ResultActorStatus is not defined` エラー発生。パッチプラグインで `Window_ResultActorStatus` が参照できない原因不明。

– **不明点:**
– なぜ `Window_ResultActorExp` はパッチプラグインで上書きできるのに、`Window_ResultActorStatus` はできないのか?
– パッチプラグインの適用範囲、特に独自クラスの扱いについて。

投稿者様、こちらの要約は意図通りでしょうか?不明点が補足・追記いただけると回答が得やすくなると思われます。

### 回答

`Window_ResultActorStatus` はNUUN_Resultプラグイン内で定義されている内部クラスであり、グローバルスコープに公開されていません。そのため、パッチプラグインから直接アクセスすることができません。これがエラーの原因です。

`Window_ResultActorExp` はコアスクリプトで定義されているため、グローバルスコープに存在し、パッチプラグインからアクセス可能です。

解決策としては、`Window_ResultActorStatus` の定義がNUUN_Resultプラグインのロード後に実行されるようにパッチプラグインの読み込み順を調整するか、NUUN_Resultプラグイン自体を修正する必要があります。

**パッチプラグインの読み込み順調整 (推奨)**

プラグイン管理画面で、作成したパッチプラグインをNUUN_Resultより下に配置することで、NUUN_Resultの読み込み後にパッチが適用されるようにします。これにより、`Window_ResultActorStatus` が定義された後にパッチが適用され、エラーが解消されます。

**NUUN_Resultプラグインの修正 (非推奨)**

NUUN_Resultプラグイン内で `Window_ResultActorStatus` をグローバルスコープに公開するように修正することも可能です。しかし、これはプラグインの更新時に再度修正が必要になるため、推奨されません。

**修正済みパッチプラグインの例 (読み込み順調整を前提)**

“`javascript
(() => {
“use strict”;

Window_ResultActorExp.prototype.drawActorFace = function (data, actor, x, y, height) {
const w = 144;
const h = 144;
const x2 = Math.floor(x + w / 2);
const y2 = y + Math.floor(h * 2.2 / 4);
this.drawActorCharacter(actor, x2, y2);
};

Window_ResultActorStatus.prototype.drawActorFace = function (data, actor, x, y) {
const rect = this.itemRect(0);
const w = 144;
const h = 144;
const x2 = Math.floor(x + w / 2);
const y2 = y + Math.floor(h * 2.2 / 4);
this.drawActorCharacter(actor, x2, y2);
};
})();

“`

※閲覧者の皆様、私の回答に問題がありましたら、ご指摘いただけると助かります。
また、解決できた場合、トピックを編集し「トピックを解決済みにする」にチェックを入れてください。

ゲスト