【解決済み】ドロップアイテム拡張プラグインについて

返信する
ぼぶのすけ
記事: 17
登録日時: 2023年9月23日(土) 16:40

【解決済み】ドロップアイテム拡張プラグインについて

投稿記事 by ぼぶのすけ »

ドロップアイテムの確率の百分率化や、ドロップする種類を3種類以上に設定したく、様々なドロップアイテム拡張系のプラグインを試したのですが、動作しなかったりエラーを起こしたりとどれも使えなかったので自分で作ることにしました。
しかし、プラグイン制作に関して全くの無知なので、ChatGPTを使って制作にあたっていたのですが、やはりAIではちゃんとしたコードが書けないようで、設定したアイテムが何度修正してもドロップしません。
そこで、プラグインに有識な方々のお知恵をお借りしたく、質問させていただいている次第であります。
大変お見苦しいコードだとは存じ上げますが、修正点などあればぜひご教授願いたいです!
BobCustomDrop.js
(3.61 KiB) ダウンロード数: 6 回
最後に編集したユーザー ぼぶのすけ [ 2023年10月02日(月) 11:33 ], 累計 1 回
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: ドロップアイテム拡張プラグインについて

投稿記事 by Plasma Dark »

Game_Enemy.prototype.itemObject を消してみましょう。

この関数はコアスクリプトに元々定義されていて、再定義する必要はありません。
再定義時に戻り値の型が変わってしまっています。
このコードでは、ドロップ判定が通った場合にエラーを起こします。
ぼぶのすけ
記事: 17
登録日時: 2023年9月23日(土) 16:40

Re: ドロップアイテム拡張プラグインについて

投稿記事 by ぼぶのすけ »

Plasma Dark さん。
ご返信ありがとうございます!

教えていただいた通り修正してみましたが、アイテムは落ちてないみたいです...。
もしまたお暇なときがあれば、助言いただけると幸いです!
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: ドロップアイテム拡張プラグインについて

投稿記事 by Plasma Dark »

ああ、そもそもプラグインパラメータをうまくパースできていませんね。

コード: 全て選択

const parameters = PluginManager.parameters('BobCustomDrop');
このコードで取得できる値 parameters は、

コード: 全て選択

"["{\"EnemyID\":\"2\",\"ItemID\":\"2\",\"Probability\":\"100\",\"MaxAmount\":\"1\"}"]"
こうなります。
これに JSON.parse をかけても

コード: 全て選択

["{"EnemyID":"2","ItemID":"2","Probability":"100","MaxAmount":"1"}"]
こんな感じで、文字列の配列になるだけです。
この配列の各要素に対して、更に JSON.parse をかける必要があります。

コード: 全て選択

const extendedDropItems = JSON.parse(parameters['ExtendedDropItems']).map(e => JSON.parse(e));
ただし、これで得られる配列中のオブジェクトが持つ各要素 (ItemIDなど) はすべて文字列になっています。
適宜数値型に変換してあげると良いでしょう。

あと間違っているところは、 itemObject の引数ですね。
rpg_objects.js の Game_Enemy.prototype.itemObject を確認してください。
第1引数はkind, すなわち対象物の種別です。今回はアイテムのみが対象のようなので1を渡してあげれば良いでしょう。
第2引数がIDです。
個数を指定する場合、 makeExtendedDropItems の戻り値となる配列 drops に、その個数分だけ push してあげれば良さそうです。
ぼぶのすけ
記事: 17
登録日時: 2023年9月23日(土) 16:40

Re: ドロップアイテム拡張プラグインについて

投稿記事 by ぼぶのすけ »

Plasma Dark さん。
おはようございます!

Plasma Dark さんが教えてくださったようにコードを改変して
何度かテストしてみたら無事動きました。

本当にありがとうございました!
ぼぶのすけ
記事: 17
登録日時: 2023年9月23日(土) 16:40

Re: ドロップアイテム拡張プラグインについて

投稿記事 by ぼぶのすけ »

またまた質問失礼いたします。
Plasma Dark さんの助言のおかげでなんとかプラグインを作ることには成功したのですが、
いざ使ってみると設定画面が下記のようになり大変見にくく感じました。
Desktop Screenshot 2023.09.24 - 11.03.19.35.png
Desktop Screenshot 2023.09.24 - 11.03.19.35.png (56.28 KiB) 閲覧された回数 941 回
そこで、最初にエネミーIDを指定するパラメータを作り、その下にストラクチャーを作成。
そのストラクチャー内にアイテムIDやらをつめてあげようとしたのですが、いくら試行錯誤しても
うまくいかず、完全に詰みの状況となってしまいました。
コードの中身自体は動作に成功したものを基盤にしているので、そんなに難しくないと思っていたのですが、
やはり初心者には厳しい壁がありました...笑

どなたか助言いただければと思います!
BobCostomDrop2.js
(4.66 KiB) ダウンロード数: 2 回
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: ドロップアイテム拡張プラグインについて

投稿記事 by Plasma Dark »

プラグインパラメータは型を複雑にすればするほど、パースのためのコードが複雑化していきます。

まず、素の状態 (PluginManager.parameters(プラグイン名)で取得したそのままの状態) は、単なる文字列になっています。
ひとつだけ要素を設定して、パラメータ設定のトップからテキストタブを選んでコピーしてみましょう。

コード: 全て選択

["{\"EnemyID\":\"2\",\"Items\":\"[\\\"{\\\\\\\"ItemID\\\\\\\":\\\\\\\"3\\\\\\\",\\\\\\\"Probability\\\\\\\":\\\\\\\"100\\\\\\\",\\\\\\\"MaxAmount\\\\\\\":\\\\\\\"1\\\\\\\"}\\\"]\"}"]
かなり見づらいですが、素の状態ではこういう文字列になっています。
設定を選択して EnemyID と Items の設定が見えるところまで来てから、同様にテキストタブを選んでコピーしてみます。

コード: 全て選択

{"EnemyID":"2","Items":"[\"{\\\"ItemID\\\":\\\"3\\\",\\\"Probability\\\":\\\"100\\\",\\\"MaxAmount\\\":\\\"1\\\"}\"]"}
素の状態に一度 JSON.parse をかけると、こういう文字列の配列が得られます。
更に JSON.parse することで、オブジェクトを展開したのが前回です。

コード: 全て選択

{
  EnemyID: "2",
  Items:   "["{\"ItemID\":\"3\",\"Probability\":\"100\",\"MaxAmount\":\"1\"}"]"
}
今回はオブジェクトを展開するとこのようになります。 Items はまだ文字列になっています。
配列、オブジェクト型のパラメータは、 JSON.parse によってカッコ一組分ずつしか展開できない、ということです。
Itemsはオブジェクトの配列型パラメータなので、もうあと2回 JSON.parse する必要があります。

各要素の数値型の変換も合わせて行うとこんな感じになります。

コード: 全て選択

const extendedDropItems = JSON.parse(parameters['ExtendedDropItems'])
  .map(enemy => {
    const parsedEnemy = JSON.parse(enemy);
    return {
      EnemyID: Number(parsedEnemy.EnemyID),
      Items: JSON.parse(parsedEnemy.Items).map(item => {
        const parsedItem = JSON.parse(item);
        return {
          ItemID: Number(parsedItem.ItemID),
          Probability: Number(parsedItem.Probability),
          MaxAmount: Number(parsedItem.MaxAmount),
        };
      }),
    };
  });
それと、アップロードされているファイルはプラグイン名がtypoしているようなので、そのままだとパラメータが全く読み取れないことに注意してください。
ぼぶのすけ
記事: 17
登録日時: 2023年9月23日(土) 16:40

Re: ドロップアイテム拡張プラグインについて

投稿記事 by ぼぶのすけ »

Plasma Dark さん。
お世話になっております。

教えていただいた通り修正するときちんと動いてくれました。
おかげで問題なく動作しています!

分からないことだらけの自分にとっては、本当に勉強になることばかりでした。
本当に、ありがとうございました!
返信する

“MV:質問”に戻る