chatGDPで作成したプラグインが動かない

opi0123
記事: 2
登録日時: 2024年1月05日(金) 13:03

chatGDPで作成したプラグインが動かない

投稿記事by opi0123 » 2024年1月15日(月) 20:58

こんにちは。
僕は自分の作品に組み込みたいシステムをchatGDPで作成したのですが、
どうしても動きません、
プラグインの内容は
全てのアクターに戦闘開始時にチェックが入り、指定したパラメーター(atkなど)が
指定した値になったら特定のスキルを覚えるというものです。
みなさんの力をお借りしたいです!よろしくお願いします!

コード: 全て選択

//=============================================================================
// ActorSkillsLearnPlugin.js
//=============================================================================
/*:
 * @plugindesc 戦闘開始時にアクターが特定のパラメーター条件を満たすと複数のスキルを習得するプラグインです。
 * @version 1.0.1
 * @author OpenAI (日本語ヘルプ追加 by ChatGPT)
 *
 * @param SkillList
 * @text スキルリスト
 * @desc アクターが習得するスキルのリストを指定します。各スキルは「スキルID:(アクターのパラメーター),(そのパラメーターの数値)」の形式で指定します。複数指定する場合はカンマで区切ってください。
 * @default 1:mhp,100, 2:mmp,50
 *
 * @param LearnMessage
 * @text 習得メッセージ
 * @desc スキルを習得したときに表示するメッセージのテンプレートです。 %1: アクター名, %2: 習得したスキル名
 * @default %1は%2を覚えた!
 *
 * @help
 * ===========================================================================
 * ■ 使用方法
 * ===========================================================================
 * このプラグインは、戦闘開始時にアクターが特定のパラメーター条件を満たすと、
 * 指定したスキルを同時に習得します。
 *
 * ===========================================================================
 * ■ パラメーターの詳細
 * ===========================================================================
 * SkillListの書式: スキルID:(アクターのパラメーター),(そのパラメーターの数値)
 * 例: 1:mhp,100, 2:mmp,50
 * これはアクターがスキルIDが1のスキルを習得するために、
 * アクターのmhpが100以上である必要があることを示します。
 * 複数のスキルを指定する場合は、カンマで区切ってください。
 *
 * LearnMessageのテンプレート内で使用可能なプレースホルダ:
 * %1: アクター名
 * %2: 習得したスキル名
 *
 * ===========================================================================
 * ■ 更新履歴
 * ===========================================================================
 * 1.0.1 (YYYY-MM-DD): 戦闘開始時にスキルを習得するタイミングを変更。
 */
(function() {
    var parameters = PluginManager.parameters('ActorSkillsLearnPlugin');
    var skillList = String(parameters['SkillList'] || '');
    var learnMessageTemplate = String(parameters['LearnMessage'] || '%1は%2を覚えた!');

    var skillsArray = parseSkillList(skillList);

    var _Scene_Battle_start = Scene_Battle.prototype.start;
    Scene_Battle.prototype.start = function() {
        _Scene_Battle_start.call(this);
        $gameParty.members().forEach(function(actor) {
            actor.checkSkillsLearnConditions();
        });
    };

    Game_Actor.prototype.checkSkillsLearnConditions = function() {
        skillsArray.forEach(function(skillData) {
            var skillId = skillData.skillId;
            var paramType = skillData.paramType;
            var requiredValue = skillData.requiredValue;

            if (this.checkLearnCondition(paramType, requiredValue) && !this.isLearnedSkill(skillId)) {
                this.learnSkill(skillId);
                this.displayLearnMessage(skillId);
            }
        }, this);
    };

    Game_Actor.prototype.checkLearnCondition = function(paramType, requiredValue) {
        if (typeof this[paramType] === 'function') {
            return this[paramType]() >= parseInt(requiredValue);
        }
        return false;
    };

    Game_Actor.prototype.displayLearnMessage = function(skillId) {
        var skill = $dataSkills[skillId];
        if (skill) {
            var message = learnMessageTemplate.replace('%1', this.name()).replace('%2', skill.name);
            $gameMessage.add(message);
        }
    };

    function parseSkillList(skillList) {
        return skillList.split(',').map(function(skillData) {
            var parts = skillData.trim().split(':');
            var skillId = parseInt(parts[0]);
            var paramParts = parts[1].split(',');
            var paramType = paramParts[0].trim();
            var requiredValue = paramParts[1].trim();
            return {
                skillId: skillId,
                paramType: paramType,
                requiredValue: requiredValue
            };
        });
    }
})();


ecf5DTTzl6h6lJj02
記事: 457
登録日時: 2018年12月23日(日) 13:55

Re: chatGDPで作成したプラグインが動かない

投稿記事by ecf5DTTzl6h6lJj02 » 2024年1月16日(火) 16:56

こんにちは。
opi0123 さんが書きました:こんにちは。
僕は自分の作品に組み込みたいシステムをchatGDPで作成したのですが、
どうしても動きません、
プラグインの内容は
全てのアクターに戦闘開始時にチェックが入り、指定したパラメーター(atkなど)が
指定した値になったら特定のスキルを覚えるというものです。
みなさんの力をお借りしたいです!よろしくお願いします!

パラメータの説明の中のこの部分、
* ===========================================================================
* ■ パラメーターの詳細
* ===========================================================================
* SkillListの書式: スキルID:(アクターのパラメーター),(そのパラメーターの数値)
* 例: 1:mhp,100, 2:mmp,50
* これはアクターがスキルIDが1のスキルを習得するために、
* アクターのmhpが100以上である必要があることを示します。
* 複数のスキルを指定する場合は、カンマで区切ってください。

複数のスキルを指定する場合はカンマ区切りとなっていますが、
判定に使用するパラメータと、必要になる数値の間にもカンマが入っているため、
スキル毎の設定をカンマで分割したいのに、実際にカンマで分割すると、
1:mhp 100 2:mmp 50
という4つに分割されてしまうため、
パラメータが正常に設定できず、エラーが発生しています。

このパラメータは、コードを見る限り、
スキルID、条件となる能力値、必要な数値 の3つのパラメータ(プロパティ)を持つオブジェクトの
配列として、保持したいみたいなので、
struct を設定して、その配列という形で、設定させるようにするほうが好ましいのかなと思います。

struct については、
https://tkool.jp/mz/plugin/make/annotation.html
をご参考頂ければと思います。
MZ用の記事ですが、MVでもほぼ同様です。

修正かけてみましたので、お試しください。
更新履歴などの部分は変更していないので、必要ならご自身で変更をお願いします。
ActorSkillsLearnPlugin.js
(4.78 KiB) ダウンロード数: 2 回

尚、プラグインパラメータ SkillList の設定方法を変更しているので、
パラメータを再設定する必要があります。

あと、気になった点として、
スキルを覚える際の条件に1つのパラメータしか設定できないようになってますが、
2つ以上のパラメータを設定できるようにしないでいいのでしょうか。
opi0123
記事: 2
登録日時: 2024年1月05日(金) 13:03

Re: chatGDPで作成したプラグインが動かない

投稿記事by opi0123 » 2024年1月16日(火) 22:56

バグの修正ありがとうございます!
僕のツクールmvに導入したところ、想定通りの動作をしてくれました。
それだけでなく、以前よりも使いやすさもだんぜん上がってます!
他の方のプラグインを使っているときによく見てたアレはstructって言うんですね(笑)

「あと、気になった点として、
スキルを覚える際の条件に1つのパラメータしか設定できないようになってますが、
2つ以上のパラメータを設定できるようにしないでいいのでしょうか。」

とありましたが、僕が今制作しているゲームではそのシステムを入れる
つもりはないので大丈夫です!
たしかに、HPと俊敏性(体力と速さ)がある程度ないと出せない技とかも
できそうで、おもしろそうですね!
これからはecf5DTTzl6h6lJj02さんのような親切な方たちやAIに、頼りぱなし
にならないよう、JavaScriptの勉強も同時にしていきたいと思います!
ありがとうございました!

“MV:質問” へ戻る