From 12aacd27d72593e51d4230f7a3e92808d826c882 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sun, 12 Feb 2023 07:58:43 +0200 Subject: [PATCH] enhancement #1966 --- src/server/items/generators/effects.js | 50 +++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/server/items/generators/effects.js b/src/server/items/generators/effects.js index e8ca7447..497c1a87 100644 --- a/src/server/items/generators/effects.js +++ b/src/server/items/generators/effects.js @@ -1,3 +1,35 @@ +const rollValues = (rollsDefinition, result) => { + for (let p in rollsDefinition) { + const entry = rollsDefinition[p]; + + if (typeof(entry) === 'object' && !Array.isArray(entry) && entry !== null) { + const newResult = {}; + + result[p] = newResult; + + rollValues(entry, newResult); + + continue; + } + + const range = entry; + const isInt = (p.indexOf('i_') === 0); + const fieldName = p.replace('i_', ''); + + if (!entry.push) { + result[fieldName] = range; + + continue; + } + + let value = range[0] + (Math.random() * (range[1] - range[0])); + if (isInt) + value = ~~value; + + result[fieldName] = value; + } +}; + module.exports = { generate: function (item, blueprint) { if (!blueprint.effects) @@ -6,22 +38,8 @@ module.exports = { item.effects = blueprint.effects.map(function (e) { let rolls = e.rolls; let newRolls = {}; - for (let p in rolls) { - let isInt = (p.indexOf('i_') === 0); - let fieldName = p.replace('i_', ''); - - let range = rolls[p]; - if (!range.push) { - newRolls[fieldName] = range; - continue; - } - - let value = range[0] + (Math.random() * (range[1] - range[0])); - if (isInt) - value = ~~value; - - newRolls[fieldName] = value; - } + + rollValues(rolls, newRolls); return { type: e.type,