module.exports = { qualities: [ 2000, 350, 80, 17, 1 ], magicFindMult: 7, generate: function (item, blueprint) { if (blueprint.quality !== null) { item.quality = ~~blueprint.quality; return; } let qualities = extend(true, [], this.qualities); let magicFind = (blueprint.magicFind || 0); if (!(magicFind instanceof Array)) magicFind = [magicFind]; else magicFind = extend(true, [], magicFind); let bonusMagicFind = blueprint.bonusMagicFind || 0; let mLen = magicFind.length; for (let i = 0; i < mLen; i++) { qualities[i] = Math.max(0, qualities[i] - magicFind[i]); if (qualities[i] > 0) { if (i === 0) { qualities[i] -= (bonusMagicFind * this.magicFindMult); if (qualities[i] < 0) qualities[i] = 0; } break; } } let max = qualities.reduce((p, n) => p + n); let gen = ~~(Math.random() * max); let total = 0; for (let i = 0; i < qualities.length; i++) { total += qualities[i]; if (gen < total) { item.quality = i; return; } } item.quality = qualities.length - 1; } };