ドロップアイテムの確率の百分率化や、ドロップする種類を3種類以上に設定したく、様々なドロップアイテム拡張系のプラグインを試したのですが、動作しなかったりエラーを起こしたりとどれも使えなかったので自分で作ることにしました。
しかし、プラグイン制作に関して全くの無知なので、ChatGPTを使って制作にあたっていたのですが、やはりAIではちゃんとしたコードが書けないようで、設定したアイテムが何度修正してもドロップしません。
そこで、プラグインに有識な方々のお知恵をお借りしたく、質問させていただいている次第であります。
大変お見苦しいコードだとは存じ上げますが、修正点などあればぜひご教授願いたいです!
【解決済み】ドロップアイテム拡張プラグインについて
【解決済み】ドロップアイテム拡張プラグインについて
最後に編集したユーザー ぼぶのすけ [ 2023年10月02日(月) 11:33 ], 累計 1 回
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ドロップアイテム拡張プラグインについて
Game_Enemy.prototype.itemObject を消してみましょう。
この関数はコアスクリプトに元々定義されていて、再定義する必要はありません。
再定義時に戻り値の型が変わってしまっています。
このコードでは、ドロップ判定が通った場合にエラーを起こします。
この関数はコアスクリプトに元々定義されていて、再定義する必要はありません。
再定義時に戻り値の型が変わってしまっています。
このコードでは、ドロップ判定が通った場合にエラーを起こします。
Re: ドロップアイテム拡張プラグインについて
Plasma Dark さん。
ご返信ありがとうございます!
教えていただいた通り修正してみましたが、アイテムは落ちてないみたいです...。
もしまたお暇なときがあれば、助言いただけると幸いです!
ご返信ありがとうございます!
教えていただいた通り修正してみましたが、アイテムは落ちてないみたいです...。
もしまたお暇なときがあれば、助言いただけると幸いです!
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ドロップアイテム拡張プラグインについて
ああ、そもそもプラグインパラメータをうまくパースできていませんね。
このコードで取得できる値 parameters は、
こうなります。
これに JSON.parse をかけても
こんな感じで、文字列の配列になるだけです。
この配列の各要素に対して、更に JSON.parse をかける必要があります。
ただし、これで得られる配列中のオブジェクトが持つ各要素 (ItemIDなど) はすべて文字列になっています。
適宜数値型に変換してあげると良いでしょう。
あと間違っているところは、 itemObject の引数ですね。
rpg_objects.js の Game_Enemy.prototype.itemObject を確認してください。
第1引数はkind, すなわち対象物の種別です。今回はアイテムのみが対象のようなので1を渡してあげれば良いでしょう。
第2引数がIDです。
個数を指定する場合、 makeExtendedDropItems の戻り値となる配列 drops に、その個数分だけ push してあげれば良さそうです。
コード: 全て選択
const parameters = PluginManager.parameters('BobCustomDrop');
コード: 全て選択
"["{\"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));
適宜数値型に変換してあげると良いでしょう。
あと間違っているところは、 itemObject の引数ですね。
rpg_objects.js の Game_Enemy.prototype.itemObject を確認してください。
第1引数はkind, すなわち対象物の種別です。今回はアイテムのみが対象のようなので1を渡してあげれば良いでしょう。
第2引数がIDです。
個数を指定する場合、 makeExtendedDropItems の戻り値となる配列 drops に、その個数分だけ push してあげれば良さそうです。
Re: ドロップアイテム拡張プラグインについて
Plasma Dark さん。
おはようございます!
Plasma Dark さんが教えてくださったようにコードを改変して
何度かテストしてみたら無事動きました。
本当にありがとうございました!
おはようございます!
Plasma Dark さんが教えてくださったようにコードを改変して
何度かテストしてみたら無事動きました。
本当にありがとうございました!
Re: ドロップアイテム拡張プラグインについて
またまた質問失礼いたします。
Plasma Dark さんの助言のおかげでなんとかプラグインを作ることには成功したのですが、
いざ使ってみると設定画面が下記のようになり大変見にくく感じました。 そこで、最初にエネミーIDを指定するパラメータを作り、その下にストラクチャーを作成。
そのストラクチャー内にアイテムIDやらをつめてあげようとしたのですが、いくら試行錯誤しても
うまくいかず、完全に詰みの状況となってしまいました。
コードの中身自体は動作に成功したものを基盤にしているので、そんなに難しくないと思っていたのですが、
やはり初心者には厳しい壁がありました...笑
どなたか助言いただければと思います!
Plasma Dark さんの助言のおかげでなんとかプラグインを作ることには成功したのですが、
いざ使ってみると設定画面が下記のようになり大変見にくく感じました。 そこで、最初にエネミーIDを指定するパラメータを作り、その下にストラクチャーを作成。
そのストラクチャー内にアイテムIDやらをつめてあげようとしたのですが、いくら試行錯誤しても
うまくいかず、完全に詰みの状況となってしまいました。
コードの中身自体は動作に成功したものを基盤にしているので、そんなに難しくないと思っていたのですが、
やはり初心者には厳しい壁がありました...笑
どなたか助言いただければと思います!
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: ドロップアイテム拡張プラグインについて
プラグインパラメータは型を複雑にすればするほど、パースのためのコードが複雑化していきます。
まず、素の状態 (PluginManager.parameters(プラグイン名)で取得したそのままの状態) は、単なる文字列になっています。
ひとつだけ要素を設定して、パラメータ設定のトップからテキストタブを選んでコピーしてみましょう。
かなり見づらいですが、素の状態ではこういう文字列になっています。
設定を選択して EnemyID と Items の設定が見えるところまで来てから、同様にテキストタブを選んでコピーしてみます。
素の状態に一度 JSON.parse をかけると、こういう文字列の配列が得られます。
更に JSON.parse することで、オブジェクトを展開したのが前回です。
今回はオブジェクトを展開するとこのようになります。 Items はまだ文字列になっています。
配列、オブジェクト型のパラメータは、 JSON.parse によってカッコ一組分ずつしか展開できない、ということです。
Itemsはオブジェクトの配列型パラメータなので、もうあと2回 JSON.parse する必要があります。
各要素の数値型の変換も合わせて行うとこんな感じになります。
それと、アップロードされているファイルはプラグイン名がtypoしているようなので、そのままだとパラメータが全く読み取れないことに注意してください。
まず、素の状態 (PluginManager.parameters(プラグイン名)で取得したそのままの状態) は、単なる文字列になっています。
ひとつだけ要素を設定して、パラメータ設定のトップからテキストタブを選んでコピーしてみましょう。
コード: 全て選択
["{\"EnemyID\":\"2\",\"Items\":\"[\\\"{\\\\\\\"ItemID\\\\\\\":\\\\\\\"3\\\\\\\",\\\\\\\"Probability\\\\\\\":\\\\\\\"100\\\\\\\",\\\\\\\"MaxAmount\\\\\\\":\\\\\\\"1\\\\\\\"}\\\"]\"}"]
設定を選択して EnemyID と Items の設定が見えるところまで来てから、同様にテキストタブを選んでコピーしてみます。
コード: 全て選択
{"EnemyID":"2","Items":"[\"{\\\"ItemID\\\":\\\"3\\\",\\\"Probability\\\":\\\"100\\\",\\\"MaxAmount\\\":\\\"1\\\"}\"]"}
更に JSON.parse することで、オブジェクトを展開したのが前回です。
コード: 全て選択
{
EnemyID: "2",
Items: "["{\"ItemID\":\"3\",\"Probability\":\"100\",\"MaxAmount\":\"1\"}"]"
}
配列、オブジェクト型のパラメータは、 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),
};
}),
};
});
Re: ドロップアイテム拡張プラグインについて
Plasma Dark さん。
お世話になっております。
教えていただいた通り修正するときちんと動いてくれました。
おかげで問題なく動作しています!
分からないことだらけの自分にとっては、本当に勉強になることばかりでした。
本当に、ありがとうございました!
お世話になっております。
教えていただいた通り修正するときちんと動いてくれました。
おかげで問題なく動作しています!
分からないことだらけの自分にとっては、本当に勉強になることばかりでした。
本当に、ありがとうございました!