プラグインパラメータは型を複雑にすればするほど、パースのためのコードが複雑化していきます。
まず、素の状態 (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しているようなので、そのままだとパラメータが全く読み取れないことに注意してください。