let g1 = require('./generators/level'); let g2 = require('./generators/quality'); let g3 = require('./generators/slots'); let g4 = require('./generators/types'); let g5 = require('./generators/stats'); let g6 = require('./generators/names'); let g7 = require('./generators/worth'); let g8 = require('./generators/quantity'); let g9 = require('./generators/spellbook'); let g10 = require('./generators/currency'); let g11 = require('./generators/effects'); let g12 = require('./generators/attrRequire'); let generators = [g1, g2, g3, g4, g5, g6, g11, g12, g7]; let materialGenerators = [g6, g8]; let spellGenerators = [g1, g9, g7]; let currencyGenerators = [g10]; module.exports = { spellChance: 0.02, currencyChance: 0.025, generate: function (blueprint, ownerLevel) { let isSpell = false; let isCurrency = false; let hadBlueprint = !!blueprint; blueprint = blueprint || {}; let item = {}; let currencyChance = this.currencyChance; if ((blueprint.level) && (ownerLevel)) currencyChance *= Math.max(0, (10 - Math.abs(ownerLevel - blueprint.level)) / 10); if ((!blueprint.slot) && (!blueprint.noSpell)) { isSpell = blueprint.spell; isCurrency = blueprint.currency; if ((!isCurrency) && (!isSpell) && ((!hadBlueprint) || ((!blueprint.type) && (!blueprint.slot) && (!blueprint.stats)))) { isSpell = Math.random() < this.spellChance; if (!isSpell) isCurrency = Math.random() < currencyChance; } } if (blueprint.isSpell) isSpell = true; if (isSpell) spellGenerators.forEach(g => g.generate(item, blueprint)); else if (isCurrency) currencyGenerators.forEach(g => g.generate(item, blueprint)); else if (blueprint.material) { item.material = true; item.sprite = blueprint.sprite; item.noDrop = blueprint.noDrop; item.noSalvage = blueprint.noSalvage; item.noDestroy = blueprint.noDestroy; materialGenerators.forEach(g => g.generate(item, blueprint)); } else if (blueprint.type === 'mtx') { item = extend(true, {}, blueprint); delete item.chance; } else { generators.forEach(g => g.generate(item, blueprint)); if (blueprint.spellName) g9.generate(item, blueprint); } if (blueprint.spritesheet) item.spritesheet = blueprint.spritesheet; if (blueprint.noSalvage) item.noSalvage = true; if (blueprint.uses) item.uses = blueprint.uses; return item; }, removeStat: function (item, stat) { if (!stat) { stat = Object.keys(item.stats) .filter(s => (s !== 'armor')); stat = stat[~~(Math.random() * stat.length)]; } delete item.stats[stat]; }, pickRandomSlot: function () { let item = {}; let blueprint = {}; g3.generate(item, blueprint); return item.slot; } };