ページ 11

装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月05日(水) 10:40
by Iron
CahtGPTを利用してアイテムを購入した際にメモ欄に武器セット、防具セット、アイテムセットという文字列がある場合にその後ろにある数字を変数35に代入し、変数35と一致するIDの武器防具アイテムを同時に購入するというプラグインを作成したのですがうまく動作しません
動作としてはメモ欄に武器セット: 3, 5と記入されていた場合そのアイテムを購入時に同時に武器ID3, 5の武器も同時に手に入るといった形です
何とか修正していただくことは可能でしょうか?
一般化して再配布していただいてもかまいません
使用用途としては○○防具一式を一括で購入する、みたいなのを考えています

コード: 全て選択

(() => {
    const parameters = PluginManager.parameters('Setget');
    const setItemFlag = parameters['SetItemFlag'] === 'true';
    const setWeaponFlag = parameters['SetWeaponFlag'] === 'true';
    const setArmorFlag = parameters['SetArmorFlag'] === 'true';

    // アイテム、武器、防具の購入処理をフック
    const _Game_Party_gainGold = Game_Party.prototype.gainGold;
    Game_Party.prototype.gainGold = function(amount) {
        _Game_Party_gainGold.call(this, amount);
        this.processSetItems();
    };

    Game_Party.prototype.processSetItems = function() {
        // 最後に購入したアイテムを取得
        const lastItem = $gameParty.lastItem();

        if (lastItem) {
            // アイテムセットの処理
            if (setItemFlag && lastItem.meta['アイテムセット']) {
                const itemSet = lastItem.meta['アイテムセット'].split(',').map(Number);
                // 最初のアイテムセットIDを変数35に設定
                const firstItemId = itemSet[0];
                if (firstItemId) {
                    $gameVariables.setValue(35, firstItemId);  // 変数35に最初のIDを設定
                }
                itemSet.forEach(itemId => {
                    const setItem = $dataItems[itemId];
                    if (setItem) {
                        $gameParty.gainItem(setItem, 1); // アイテムをパーティに追加
                    }
                });
            }

            // 武器セットの処理
            if (setWeaponFlag && lastItem.meta['武器セット']) {
                const weaponSet = lastItem.meta['武器セット'].split(',').map(Number);
                // 最初の武器セットIDを変数35に設定
                const firstWeaponId = weaponSet[0];
                if (firstWeaponId) {
                    $gameVariables.setValue(35, firstWeaponId);  // 変数35に最初のIDを設定
                }
                weaponSet.forEach(weaponId => {
                    const weapon = $dataWeapons[weaponId];
                    if (weapon) {
                        $gameParty.gainItem(weapon, 1); // 武器をパーティに追加
                    }
                });
            }

            // 防具セットの処理
            if (setArmorFlag && lastItem.meta['防具セット']) {
                const armorSet = lastItem.meta['防具セット'].split(',').map(Number);
                // 最初の防具セットIDを変数35に設定
                const firstArmorId = armorSet[0];
                if (firstArmorId) {
                    $gameVariables.setValue(35, firstArmorId);  // 変数35に最初のIDを設定
                }
                armorSet.forEach(armorId => {
                    const armor = $dataArmors[armorId];
                    if (armor) {
                        $gameParty.gainItem(armor, 1); // 防具をパーティに追加
                    }
                });
            }
        }
    };
})();

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 01:50
by DoujinRuis
こんにちは、今回の件をYoutubeで動画にしてみました。
もしよければご確認ください

リンク
https://www.youtube.com/watch?v=5RAXf7kqiiY

追記
今回のプラグインはIronさんの希望の仕様と違うかもしれません。
ご意見を聴きたいです

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 11:09
by Iron
動画拝見させていただきました、おおむね要求通りですがテストプレイしたところ
・一部の価格が設定した金額ではなく0になる
・購入したもの自体の所持数が増えない
・セットに記載されているものが追加されない場合がある
等のバグが確認できました
なおショップでの値段設定の確認、メモ欄の文章の確認など行いましたが問題はなさそうでした

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 13:22
by ecf5DTTzl6h6lJj02
こんにちは。
横から失礼します。
Iron さんが書きました:CahtGPTを利用してアイテムを購入した際にメモ欄に武器セット、防具セット、アイテムセットという文字列がある場合にその後ろにある数字を変数35に代入し、変数35と一致するIDの武器防具アイテムを同時に購入するというプラグインを作成したのですがうまく動作しません
動作としてはメモ欄に武器セット: 3, 5と記入されていた場合そのアイテムを購入時に同時に武器ID3, 5の武器も同時に手に入るといった形です
何とか修正していただくことは可能でしょうか?
一般化して再配布していただいてもかまいません
使用用途としては○○防具一式を一括で購入する、みたいなのを考えています

コード: 全て選択

(() => {
    const parameters = PluginManager.parameters('Setget');
    const setItemFlag = parameters['SetItemFlag'] === 'true';
    const setWeaponFlag = parameters['SetWeaponFlag'] === 'true';
    const setArmorFlag = parameters['SetArmorFlag'] === 'true';

    // アイテム、武器、防具の購入処理をフック
    const _Game_Party_gainGold = Game_Party.prototype.gainGold;
    Game_Party.prototype.gainGold = function(amount) {
        _Game_Party_gainGold.call(this, amount);
        this.processSetItems();
    };

    Game_Party.prototype.processSetItems = function() {
        // 最後に購入したアイテムを取得
        const lastItem = $gameParty.lastItem();

        if (lastItem) {
            // アイテムセットの処理
            if (setItemFlag && lastItem.meta['アイテムセット']) {
                const itemSet = lastItem.meta['アイテムセット'].split(',').map(Number);
                // 最初のアイテムセットIDを変数35に設定
                const firstItemId = itemSet[0];
                if (firstItemId) {
                    $gameVariables.setValue(35, firstItemId);  // 変数35に最初のIDを設定
                }
                itemSet.forEach(itemId => {
                    const setItem = $dataItems[itemId];
                    if (setItem) {
                        $gameParty.gainItem(setItem, 1); // アイテムをパーティに追加
                    }
                });
            }

            // 武器セットの処理
            if (setWeaponFlag && lastItem.meta['武器セット']) {
                const weaponSet = lastItem.meta['武器セット'].split(',').map(Number);
                // 最初の武器セットIDを変数35に設定
                const firstWeaponId = weaponSet[0];
                if (firstWeaponId) {
                    $gameVariables.setValue(35, firstWeaponId);  // 変数35に最初のIDを設定
                }
                weaponSet.forEach(weaponId => {
                    const weapon = $dataWeapons[weaponId];
                    if (weapon) {
                        $gameParty.gainItem(weapon, 1); // 武器をパーティに追加
                    }
                });
            }

            // 防具セットの処理
            if (setArmorFlag && lastItem.meta['防具セット']) {
                const armorSet = lastItem.meta['防具セット'].split(',').map(Number);
                // 最初の防具セットIDを変数35に設定
                const firstArmorId = armorSet[0];
                if (firstArmorId) {
                    $gameVariables.setValue(35, firstArmorId);  // 変数35に最初のIDを設定
                }
                armorSet.forEach(armorId => {
                    const armor = $dataArmors[armorId];
                    if (armor) {
                        $gameParty.gainItem(armor, 1); // 防具をパーティに追加
                    }
                });
            }
        }
    };
})();
こちらですが、
  1. セット販売用のダミーアイテムを作る。
  2. ダミーのアイテムにセット販売用の価格を設定する。
  3. ダミーのアイテムのメモ欄に
    <メタ名:ID 1, ID 2, ID 3, ... ID n>
    というように所持品として追加される、アイテムのID を列挙する
    (メタ名はプラグインパラメータで設定する)
という形で設定するように変更になりますが、
それでもよろしければ、試作してみたので、お試しください。

プラグインの回収をしたため、こちらは削除しました。
最新の書き込みから、ダウンロードをしてください。


詳しい使い方はプラグインのヘルプをご確認ください。

このプラグインは、先日提供した、
アイテムを購入した時に指定した変数に値を代入する プラグイン(ChangeVariablesOnBuy.js)
よりも前になるように配置してください。
(一応、配置順が正しくないと警告が出るようになっています)

また、このプラグインで設定したセット販売の商品の中に、
変数を変更する設定がしてあるIDが存在しても、変数が変更されるように対応させてはおりません。
そちらに対応しなければいけない場合は、プラグインの内容を変更しなければなりません。

ご確認ください。

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 15:36
by Iron
ありがとうございます
ダミーアイテムを作成しての運用を考えていたので問題ないです
ただ、武器、防具を同時にセットにしようと思っていたためそこの改修ってできますでしょうか…?
当方プログラミングについて疎く、難しいまたは全面的な改修が必要なことを要求しているようでしたら無視していただいて構いません

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 15:44
by ecf5DTTzl6h6lJj02
こんにちは。
Iron さんが書きました:ありがとうございます
ダミーアイテムを作成しての運用を考えていたので問題ないです
ただ、武器、防具を同時にセットにしようと思っていたためそこの改修ってできますでしょうか…?
当方プログラミングについて疎く、難しいまたは全面的な改修が必要なことを要求しているようでしたら無視していただいて構いません
ちょっと、メタに書かなければいけない内容が、複雑になるのですが、可能です。
ちょっと改修に時間がかかるので、お待ちください。

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 16:00
by Iron
ありがとうございます
よろしくお願いいたします

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 16:29
by ecf5DTTzl6h6lJj02
プラグインを改修しました。
こちらに差し替えてお試しください。
ProductBundling.js
(3.88 KiB) ダウンロード数: 1 回
メモ欄への記述方法が変更となっております。
記述方法は下記画像を参考にしてください。
001.jpg
詳しくは、プラグインのヘルプを確認してください。

Re: 装備一式を同時購入できるプラグインを作りたい

Posted: 2025年3月06日(木) 20:34
by Iron
修正ありがとうございます!
想定通りの挙動となり、やりたいことができるようになりました!
本当に助かりました!