|
- let spells = require('../../config/spells');
- let spellsConfig = require('../../config/spellsConfig');
- let configTypes = require('../config/types');
-
- let maxQuality = 5;
-
- module.exports = {
- generate: function (item, blueprint) {
- blueprint = blueprint || {};
- let spellQuality = blueprint ? blueprint.spellQuality : '';
- let spellName = blueprint.spellName;
-
- if (!spellName) {
- let spellList = Object.keys(spellsConfig.spells).filter(s => ((!spellsConfig.spells[s].auto) && (!s.noDrop)));
- spellName = spellList[~~(Math.random() * spellList.length)];
- }
-
- let spell = spellsConfig.spells[spellName];
- let spellAesthetic = spells.spells.find(s => s.name.toLowerCase() === spellName) || {};
-
- if (!item.slot) {
- let sprite = [10, 0];
- let statType = spell.statType;
- if (statType === 'dex')
- sprite = [10, 1];
- else if (statType === 'str')
- sprite = [10, 2];
- else if (statType instanceof Array) {
- if ((statType.indexOf('dex') > -1) && (statType.indexOf('int') > -1))
- sprite = [10, 3];
- else if ((statType.indexOf('str') > -1) && (statType.indexOf('int') > -1))
- sprite = [10, 4];
- }
-
- item.name = 'Rune of ' + spellAesthetic.name;
- item.ability = true;
- item.sprite = sprite;
- } else if (spellQuality === 'basic')
- item.stats = {};
-
- if (blueprint.spellConfig)
- spellAesthetic = extend(true, {}, spellAesthetic, blueprint.spellConfig);
-
- item.spell = {
- name: spellAesthetic.name || 'Weapon Damage',
- type: spellAesthetic.type || spellName,
- rolls: {},
- values: {}
- };
-
- if (blueprint.spellConfig)
- extend(true, item.spell, blueprint.spellConfig);
-
- if (item.type) {
- let typeConfig = configTypes.types[item.slot][item.type];
- if (typeConfig)
- spell = extend(true, {}, spell, typeConfig.spellConfig);
- }
-
- let propertyPerfection = [];
-
- let randomProperties = spell.random || {};
- let negativeStats = spell.negativeStats || [];
- for (let r in randomProperties) {
- let negativeStat = (negativeStats.indexOf(r) > -1);
- let range = randomProperties[r];
-
- let max = Math.min(20, item.level) / 20;
-
- let roll = random.expNorm(0, max);
- if (spellQuality === 'basic')
- roll = 0;
- else if (spellQuality === 'mid')
- roll = 0.5;
-
- item.spell.rolls[r] = roll;
-
- let int = r.indexOf('i_') === 0;
- let val = range[0] + ((range[1] - range[0]) * roll);
-
- if (int) {
- val = ~~val;
- r = r.replace('i_', '');
- } else
- val = ~~(val * 100) / 100;
-
- item.spell.values[r] = val;
-
- if (negativeStat)
- propertyPerfection.push(1 - roll);
- else
- propertyPerfection.push(roll);
- }
-
- if (blueprint.spellProperties) {
- item.spell.properties = {};
- for (let p in blueprint.spellProperties)
- item.spell.properties[p] = blueprint.spellProperties[p];
- }
-
- if (item.range) {
- item.spell.properties = item.spell.properties || {};
- item.spell.properties.range = item.range;
- }
-
- let per = propertyPerfection.reduce((p, n) => p + n, 0);
- let perfection = ~~((per / propertyPerfection.length) * 4);
- if (!item.slot)
- item.quality = perfection;
- else
- item.spell.quality = perfection;
- }
- };
|