アイテムなどの所持できる数を重量制にするプラグイン

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by にゃたま » 2019年10月16日(水) 23:42

MEIKOI様

特殊なプラグインを使用して…となると自分のできる範疇を超えてしまうため難しいのですが、
先ずDreamX_RandomPrefixesSuffixesの使い方が英文のためそもそもよくわからず
グーグル先生で翻訳してもいまいち意味がわかりませんでした。

その現象を再現するにはどうすればよいでしょうか?
実際の動作を確かめれば良い方法が思い浮かぶかもしれません。
とりあえずプラグインリストにはItemCoreとともに加えました。
それではよろしくおねがいします。

アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by MEIKOI » 2019年10月17日(木) 16:31

にゃたま様

サンプルを作りましたのでアップしました。
https://drive.google.com/file/d/1xR0nJ- ... sp=sharing

DreamX_RandomPrefixesSuffixesの//※でコメントアウトしているところで
$gameVariables.value(1)に入手武器名を代入していますが
この場所で正しいのかは私にはわかりません(汗、ただ、結果的にここかなぁという感じであります。

データーベースの武器の1番をベースとして、11番から15番までが接頭語となるようにしています。
メモ欄に接頭語が付与される確率をタグ記載しています。

時間は、いいのでまたゆっくり考察くださいませ。

PS
手に入れた武器が格納されているところが捨てられてnullとか0とかになったら
条件分岐でメッセージを表示しないって感じになるのかなと、素人ながらに考えてました。
-----------------------------------------
https://twitter.com/meikoimv
-----------------------------------------
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by にゃたま » 2019年10月17日(木) 20:57

MEIKOI様

とりあえずできました。
以下のようにアイテム増減処理のアイテム画面表示のスクリプトSceneManager.push(Scene_Item);
をコメント化します。
いわゆる重量超過してても増減処理を行うだけ行います。
アイテム増減の後、同時にアイテム画面を開いて行う検査をスルーさせます。

コード: 全て選択

//アイテム増減処理の書き換え---------------------------------------------------------------
   var _Game_Party_gainItem = Game_Party.prototype.gainItem;
   Game_Party.prototype.gainItem = function(item, amount, includeEquip) {
      if (amount > 0) {
         if (canHaveItem(item, amount)) {
            //増減可能
            _Game_Party_gainItem.call(this, item, amount, includeEquip);
               
         }
            // 2019/05/17 Add start by nyatama
            else{
                //重量超過
                if(isChoice_GainItem) {
                    //増減可能
                _Game_Party_gainItem.call(this, item, amount, includeEquip);
                    //アイテム画面
                    //SceneManager.push(Scene_Item);
                }
            }
            // 2019/05/17 Add start by nyatama
      } else {
         _Game_Party_gainItem.call(this, item, amount, includeEquip);
      }
   };


そしてメッセージ表示後に「所持可能な残りの重量」をチェックして
重量オーバーしていたらアイテム画面を強制的に開きます。
以下のようにイベントを作ってください。

尚、変数2は「所持可能な残りの重量」となります。

スクリーンショット 2019-10-17 20.41.19.png



これでできませんでしょうか?
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by MEIKOI » 2019年10月17日(木) 22:13

にゃたま様

今日は少しお酒を飲んでたのですが、丁寧な説明なので理解できました^^;

説明どおりに(コピペですが汗

書き換えましたら、完璧です。

武器は、ちゃんと一旦入手してから捨てられるようになりました。

ほんとすごいです。読み解いて考える力を鍛えたいと思いましたm(_ _)m

ありがとうございます!!!!!
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by にゃたま » 2019年10月17日(木) 22:53

MEIKOI様

うまくいってよかったです!
この手法ならイベントが終了するまでに先程のスクリプトを実行することで
任意のタイミングでアイテム画面を開いて重量チェックできて便利ですね。
これなら入手メッセージをアイテムの増減の手前にもってくる必要もありません。
もしかするとこの方法のほうが需要があるのかもしれませんね(^^;

追記
余談ですが上記の方法だとゲーム内変数を一つ使ってしまうので
使わない方法では以下のコードを本体の一番下に記述されている
プラグインコマンドリストに追加してやると良いです。
プラグインコマンド「PNDK_LC overCpShowItemWindow」を実行するだけです。
ただこのコマンド名がこれでいいのか?って感じがします。
他にわかりやすいコマンド名があったらそちらを使ってください。

コード: 全て選択

             case 'overCpShowItemWindow':
                    if (getSurplusCP() < 0) SceneManager.push(Scene_Item);
                    break;
アバター
ドラムカン
記事: 178
登録日時: 2019年11月04日(月) 23:02

Re:

投稿記事by ドラムカン » 2019年11月04日(月) 23:13

パンダコ様
にゃたま様

このスレを読み進めると、パンダコ様が作られたプラグインを、にゃたま様が色々と改良されていて
これはいいぞ、と思い、
にゃたま様の追加コードを、説明の通りに基のコードと差し替えて行ったのですが、
何度やってもエラーになってしまいます。

もしよろしければ、正常に動いている全コードを公開していただけると幸いです。
何卒よろしくお願いいたします。
最後に編集したユーザー ドラムカン on 2023年6月25日(日) 21:47 [ 編集 2 回目 ]
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by にゃたま » 2019年11月05日(火) 01:32

ドラムカン様

当プラグインを開発したのは私ではなくパンダコ様です。
私は改造案を提案しただけに過ぎません。
利用規約で配布範囲にゲーム内のみと限定している以上
私の方から改変版を再配布することは出来ません。
従いまして私の方からはパンダコ様が本家に対応されるか
本家に上記の変更箇所を見て利用者様がご自分で改変して下さいとしか言えません。
この様な案内しか出来ずご期待に添えることが出来なくて申し訳ありません。
ご理解頂けましたら幸いです。

追記
尚上記改変項目を正しく置き換えれば動作する筈です。
私はもちろん他の方も動作がとれています。
もう一度置き換え箇所をよく読んでイチからやってみてはいかがでしょうか?
アバター
パンダコ
記事: 20
登録日時: 2016年10月24日(月) 14:08
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by パンダコ » 2019年11月05日(火) 21:49

ここまでご愛顧いただいているのだから、作者もなにかしないとね。
ということで、にゃたまさんの改変案を参考に、いろいろな機能を追加した ver 1.4.0 を公開しました。
主な変更点は以下のとおりです。

・イベントによるアイテム入手時にも破棄か整理かを選択できるようになりました。
・重量オーバーしている時の総重量の文字色が変更できるようになりました。
・重量オーバーしていると、アイテムウィンドウを開いたときと、閉じようとしたときに
 警告ウィンドウが表示されるようになりました。
・重量オーバーしている時はアイテムウィンドウが開くコマンドが追加されました。
・強制的な入手が設定できるようになりました。

追加された機能の殆どは、にゃたまさんのお力によるものです。
この場を借りてお礼申し上げます。

なお、ドロップアイテムは破棄で、イベント入手はアイテム画面、という設定だと(あり得るのか?^-^;)期待したとおりに動作しない点の修正や、設定項目の追加、英語対応、などなど多少改修しております。

また、ご指摘いただいたライセンスの件、MIT licence としておきながら、当フォーラムでは再配布を限定する表示となっていたため修正しました。

以上です。
不具合等ございましたらお知らせいただけると幸いです。
ではでは~ヽ(=´▽`=)ノ



(久々のツクールだったから、なんだかんだで丸1日かかってしまったw)
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by にゃたま » 2019年11月06日(水) 00:04

パンダコ様

最新バージョンにて当改変バージョンを反映いただきありがとうございます。
より素晴らしいプラグインになったのではないかと思います。
また強制入手のプラグインパラメータを追加いただきありがとうございます。
そして警告画面の文章まで変更できるようにしていただいてより
カスタマイズでき柔軟になりましたね。

重量オーバー時にアイテム画面を開くコマンドは色々考えて
コマンドの機能を説明しすぎたあまりあの長ったらしいコマンドにしてしまいましたが、
パンダコ様がサクッと気持ちよい響きのコマンドにしていただいたおかげで
なにか引っかかっていたモヤモヤが晴れてスッキリした気分になりました(^^
潔さがとてもステキです!そのセンス羨ましいです。あれならコマンド覚えられますw
コマンドは短く簡潔のほうがよいことを改めて思い知らされました(反省)

ヘルプもわかりやすく追記されており、より使い方がわかりやすくなったと思います。
これからもより一層、このプラグインの認知度が高まりそうですね!

追記
尚、前回投稿した改変の説明はパンダコ様が最新バージョンに反映のため
用なしと判断して公開を終了しました。

【オマケ】(11/23追記)
以下はオマケです。アイテムや武器、防具の名前を取得するスクリプトです。
需要があるかわかりませんが置いておきます。

* $dataItems[<アイテムID>].name
* $dataWeapons[<武器ID>].name
* $dataArmors[<防具ID>].name
*
* ゲーム変数の値を利用するなら以下
* $dataItems[$gameVariables.value(<アイテムIDが入っているゲーム変数番号>)].name
* $dataWeapons[$gameVariables.value(<武器IDが入っているゲーム変数番号>)].name
* $dataArmors[$gameVariables.value(<防具IDが入っているゲーム変数番号>)].name

プラグインも作ってみました。
どうしてもプラグインコマンドを利用したい場合用。
NYA_GetItemInfo.js
Ver1.00 試作
(4.91 KiB) ダウンロード数: 23 回

* ・使い方
* <プラグインコマンド>
* ・ID5のアイテムの名前を変数0010へ代入します。
* PNDK_LC getItemName 10 5
* getItemName 10 5
*
* ・変数0010に格納された武器IDの武器の名前を変数0011へ代入します。
* (注:アイテムID及びアイテム数には制御文字が使えます)
* PNDK_LC getWeaponName 11 \V[10]
* getWeaponName 11 \V[10]
*
* ・ID15の防具の名前を変数0012へ代入します。
* PNDK_LC getArmorName 12 15
* getArmorName 12 15
*
* <スクリプト>
* ・ID5のアイテムの名前を取得します。
* $gameSystem.getItemName(5);
*
* ・変数0010に格納された武器IDの武器の名前を取得します。
* $gameSystem.getWeaponName('\\V[10]'));
* $gameSystem.getWeaponName($gameVariables.value(10));
*
* ・ID15の防具の名前を取得します。
* $gameSystem.getArmorName(15);

以下は追加するとスクリプトから呼べて便利集です(^^;

○アイテムオブジェクトの重量をスクリプトから取得

コード: 全て選択

function getWeight(item, amount){
      if (item) {
         var w = item.meta.weight;
         if (w !== undefined) {
            w = Number(Window_Base.prototype.convertEscapeCharacters(w));
            return w * amount;
         } else {
            return defW * amount;
         }
         //return item.meta.weight !== undefined ? (item.meta.weight * amount) : defW * amount;
      }
      //itemがnullの場合もある(装備していない時や全部解除したときなど)
      return 0;
   }

の下に

コード: 全て選択

    //getWeightを$gameSystemに登録
    Game_System.prototype.getWeight = function(item, amount) {
        return getWeight(item, amount);
    }

を追加すればスクリプトから$gameSystem. getWeight()で重量を取得できます。

○アイテム重量をスクリプトから取得

コード: 全て選択

   //アイテム重量取得
   function getItemWeights(value, num) {
      var itemId = Number(Window_Base.prototype.convertEscapeCharacters(value));
      var item = $dataItems[itemId];
      if(num == null) num = 1;
      else num = Number(Window_Base.prototype.convertEscapeCharacters(num));
      return getWeight(item, num);
   }

の下に

コード: 全て選択

    //getItemWeightsを$gameSystemに登録
    Game_System.prototype.getItemWeights = function(value, num) {
        return getItemWeights(String(value), String(num));
    }

を追加で$gameSystem.getItemWeights(アイテムID, 数)でアイテムの重量を取得できます

○武器重量をスクリプトから取得

コード: 全て選択

   //武器重量取得
   function getWeaponWeights(value, num) {
      var weaponId = Number(Window_Base.prototype.convertEscapeCharacters(value));
      var weapon = $dataWeapons[weaponId];
      if(num == null) num = 1;
      else num = Number(Window_Base.prototype.convertEscapeCharacters(num));
      return getWeight(weapon, num);
   }
   

の下に

コード: 全て選択

    //getWeaponWeightsを$gameSystemに登録
    Game_System.prototype.getWeaponWeights = function(value, num) {
        return getWeaponWeights(String(value), String(num));
    }
   

を追加で$gameSystem.getWeaponWeights(武器ID, 数)で武器の重量を取得できます

○防具重量をスクリプトから取得

コード: 全て選択

   //防具重量取得
   function getArmorWeights(value, num) {
      var armorId = Number(Window_Base.prototype.convertEscapeCharacters(value));
      var armor = $dataArmors[armorId];
      if(num == null) num = 1;
      else num = Number(Window_Base.prototype.convertEscapeCharacters(num));
      return getWeight(armor, num);
   }
   

の下に

コード: 全て選択

    //getArmorWeightsを$gameSystemに登録
    Game_System.prototype.getArmorWeights = function(value, num) {
        return getArmorWeights(String(value), String(num));
    }
   

を追加で$gameSystem.getArmorWeights(防具ID, 数)で防具の重量を取得できます

○総重量をスクリプトから取得

コード: 全て選択

   //総重量取得
   function getAllItemWeights() {
      var w = 0;
      //アイテム・武器・防具
      $gameParty.allItems().forEach(function(item){
         var n = $gameParty.numItems(item);
         w += getWeight(item, n);
      });
      //全アクターの装備品
      $gameParty.allMembers().forEach(function(actor) {
         actor.equips().forEach(function(item){
            w += getWeight(item, 1);
         });
      });
      return w;
   }
   

の下に

コード: 全て選択

    //getAllItemWeightsを$gameSystemに登録
    Game_System.prototype.getAllItemWeights = function() {
        return getAllItemWeights();
    }
   

を追加で$gameSystem.getAllItemWeights()で総重量を取得できます

○最大積載量をスクリプトから取得

コード: 全て選択

   //最大積載量の取得
   function getCP() {
      return Number(Window_Base.prototype.convertEscapeCharacters(cp));
   }
   

の下に

コード: 全て選択

    //getCPを$gameSystemに登録
    Game_System.prototype.getCP = function() {
        return getCP();
    }

を追加で$gameSystem.getCP()で最大積載量を取得できます

○余剰積載量をスクリプトから取得

コード: 全て選択

        //余剰積載量
   function getSurplusCP() {
      return getCP() - getAllItemWeights();
   }

の下に

コード: 全て選択

//getSurplusCPを$GameSystemに登録
    Game_System.prototype.getSurplusCP = function() {
        return getSurplusCP();
    }

を追加で$gameSystem.getSurplusCP()で最大積載量を取得できます

全ての動作を確認しているわけではないので万一動作しないなどありましたらご返信ください。
スミマセン、オマケなのに思いのほか長文になってしまいました…orz
最後に編集したユーザー にゃたま on 2020年3月24日(火) 01:48 [ 編集 43 回目 ]
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: アイテムなどの所持できる数を重量制にするプラグイン

投稿記事by MEIKOI » 2019年11月06日(水) 20:15

パンダコ様
にゃたま様

こんにちは。プラグインの配布ありがとうございます^^

早速、最新版に入れ替えさせていただきました。

とても快適です、ありがとうございます!!(笑)

にゃたま様の最後の返信に、お返事したつもりだったのですが
返事できてなかったようでスミマセンでした。
プラグインコマンド使えるようになって幸せです。

このプラグインも手放せないアイテムとなってます。感謝です(^^)
-----------------------------------------
https://twitter.com/meikoimv
-----------------------------------------

“MV:プラグイン素材” へ戻る