【解決済み】ChatGPT 4oで作ったプラグインの相談

こうこう
記事: 13
登録日時: 2021年2月15日(月) 19:22

【解決済み】ChatGPT 4oで作ったプラグインの相談

投稿記事by こうこう » 2024年5月15日(水) 18:34

投稿者はJavaScriptについて無知です。
現在ChatGPT 4oで自分の欲しいプラグインを作れないか試行錯誤しています。
ツクールに同梱されている「AltMenuScreen」でメニュー画面を変更した後に、メニュー画面のアクターのパラメータ欄に新しい数値を表示したいと思っています。

命令はこうしました
(AltMenuScreenの中身を全てコピー&ペースト)
このプラグインを使ってメニュー画面を変更します。
そしてMPゲージの下に空腹、睡眠の文字列を新しく追加するプラグインを作ってほしいです。
仕様
空腹:変数の値
睡眠:変数の値
このように表示してください  

追加された文字列のサイズはHP、MPと同じサイズにして、メニュー画面からはみ出ないようにしてください。
MPゲージの下に表示してください。(TPは使いません)

空腹、睡眠の値は変数で操作でき最大値は100、最低値は0を超えないようにしてください。

パーティメンバーは複数の予定です。なので、どのアクターIDに変数を割り当てるかプラグインの設定のパラメータ欄で変更できるようにしてください。
(例:アクターID1に変数1と2を割り当てる
   アクターID2に変数3と4を割り当てる
   アクターID3に変数5と6を割り当てる)

デフォルトは空腹、睡眠ですがプラグインの設定のパラメータ欄で名称を変更できるようにしてください。
以上を元にプラグインを作ってください。

この命令を元に8回ほど手直しをしました。
しかし、何度やっても上手くいかないことがあります。
・変数の値が、メニュー画面の空腹、睡眠の値に一度も反映されない。
・空腹、睡眠の文字列がMPゲージの下に表示されない(同じ命令をしているのに、命令する度に表示される場所が変わる)

空腹、睡眠の数値が一定値を下回ると戦闘中に、攻撃力、守備力にデバフがかかる。という仕様のゲームを作りたいと思っています。(デバフプラグインは一応作れました。こちらも一応添付しておきます)
できれば、手直しをしていただけるか、こんな命令だとうまくいくなどの回答が欲しいです。

最後に利用規約には生成AIで作ったプラグインなどの、公開や相談をしてはいけないという文章はありませんでしたが、大丈夫でしょうか?

長文失礼しました。よろしくお願いします。
添付ファイル
ActorSpecificDebuffPlugin.js
(2.46 KiB) ダウンロード数: 2 回
z8.js
(3.88 KiB) ダウンロード数: 3 回
最後に編集したユーザー こうこう on 2024年5月19日(日) 06:36 [ 編集 2 回目 ]

basu
記事: 33
登録日時: 2024年3月29日(金) 00:34

Re: ChatGPT 4oで作ったプラグインの相談

投稿記事by basu » 2024年5月15日(水) 21:25

添付されているプラグインを試してみましたが空腹値などは正常に変数値に反映されました。
反映されない理由として以下のことが考えられます。

・プラグイン名の誤り
「const parameters = PluginManager.parameters('YourPluginName');」の「'YourPluginName'」はファイル名と同じにする必要がありますが、あっていますでしょうか?

・パラメータの誤り
アクターIDや変数IDの設定に誤りはないでしょうか?

また、描画位置に関してはHPなどのステータス描画後に新たに空腹値などの描画を行っているためずれが生じています。
ステータスの描画は「Window_StatusBase.prototype.placeBasicGauges」で行われているためここの修正を行う必要があります。
ただ、ゲージの描画も必要になるためゲージのスプライトの修正も必要になります。

簡単に修正をしましたのでサンプルとしてコードを記載します(パラメータ部は省略)

コード: 全て選択

(() => {
    const parameters = PluginManager.parameters('z8'); //ファイル名と同じにする必要あり
    const actorVariables = JSON.parse(parameters['ActorVariables'] || '[]').map(JSON.parse);
    const hungerText = String(parameters['HungerText'] || 'Hunger');
    const sleepText = String(parameters['SleepText'] || 'Sleep');

    const getVariableValue = (actorId, variableId) => {
        const actorVariable = actorVariables.find(av => av.ActorID == actorId);
        if (actorVariable) {
            return $gameVariables.value(actorVariable[variableId]);
        }
        return 0;
    };

// ステータスの描画
Window_StatusBase.prototype.placeBasicGauges = function(actor, x, y) {
    this.placeGauge(actor, "hp", x, y);
    this.placeGauge(actor, "mp", x, y + this.gaugeLineHeight());
    this.placeGauge(actor, "test", x, y + this.gaugeLineHeight() * 2); //空腹値を追加
    if ($dataSystem.optDisplayTp) {
        this.placeGauge(actor, "tp", x, y + this.gaugeLineHeight() * 3);
    }
};

// ゲージ部の修正(Keyは'test'にして修正しています)
Sprite_Gauge.prototype.currentValue = function() {
    if (this._battler) {
        switch (this._statusType) {
            case "hp":
                return this._battler.hp;
            case "mp":
                return this._battler.mp;
            case "tp":
                return this._battler.tp;
            case "time":
                return this._battler.tpbChargeTime();
            case "test":
                return getVariableValue(this._battler.actorId(), 'HungerVariableID');
        }
    }
    return NaN;
};

Sprite_Gauge.prototype.currentMaxValue = function() {
    if (this._battler) {
        switch (this._statusType) {
            case "hp":
                return this._battler.mhp;
            case "mp":
                return this._battler.mmp;
            case "tp":
                return this._battler.maxTp();
            case "time":
                return 1;
            case "test":
                return 100;
        }
    }
    return NaN;
};

Sprite_Gauge.prototype.label = function() {
    switch (this._statusType) {
        case "hp":
            return TextManager.hpA;
        case "mp":
            return TextManager.mpA;
        case "tp":
            return TextManager.tpA;
        case "test":
            return "空腹度";
        default:
            return "";
    }
};
})();


簡単な修正なためパラメータ名(空腹値)は直書きとなっています。(既存関数も再定義せず直接上書いています)
ゲージの色については別途Sprite_Gaugeの修正が必要となります。
また、簡単な動作確認しかしていないので操作方法によっては予期せぬ動きになる可能性があります。

よろしくお願いします。
こうこう
記事: 13
登録日時: 2021年2月15日(月) 19:22

Re: ChatGPT 4oで作ったプラグインの相談

投稿記事by こうこう » 2024年5月15日(水) 23:32

basu様返信ありがとうございます。

・プラグイン名の誤り
「const parameters = PluginManager.parameters('YourPluginName');」の「'YourPluginName'」
これをファイル名と同じにしたら正常に反映されました

描画位置に関してはサンプルコードの「// ステータスの描画から下」をプラグインにさせていただきました。
勝手ながらバトル画面では空腹度が表示されない、名称の変更が可能になる。などをChatGPT 4oで追加させていただきました。
動作確認をした所、エラーも起きません。

この度は回答と手直しをしていただき誠にありがとうございます。
おかげさまで自分の作りたいゲームにぐっと近づくことができました。
添付ファイル
New Parameter.js
(4.37 KiB) ダウンロード数: 1 回

“MZ:質問” へ戻る