const spellsConfig = require('../../../src/server/config/spellsConfig'); const combat = require('../../../src/server/combat/combat'); let spells = spellsConfig.spells; let max = true; let maxTarget = false; spells['harvest life'] = { statType: ['str', 'int'], statMult: 1, cdMax: 10, castTimeMax: 3, manaCost: 5, isAttack: true, range: 1, random: { damage: [4, 14], healPercent: [10, 30] } }; /*let bloodBarrierMult = 1.25; spells['skeleton melee'] = { statType: ['str', 'int'], statMult: 1 * bloodBarrierMult, auto: true, cdMax: 5, manaCost: 0, range: 1, random: { damage: [1, 3.8] } };*/ let level = 20; let hp = [ 32.70, 65.40, 98.10, 130.80, 163.50, 196.20, 228.90, 261.60, 294.30, 327.00, 359.70, 392.40, 425.10, 457.80, 490.50, 523.20, 555.90, 588.60, 621.30, 654.00 ]; let hpMax = [ 160.48, 324.53, 489.90, 660.79, 841.44, 1036.21, 1249.50, 1485.85, 1749.87, 2046.32, 2380.05, 2756.08, 3179.54, 3655.72, 4190.09, 4788.27, 5456.08, 6199.50, 7024.73, 7938.17 ]; module.exports = function () { let res = []; for (let s in spells) { let c = spells[s]; c.statType = c.statType || 'int'; let d = c.random.damage || c.random.healing; if (!d) continue; let damage = d[0]; if (max) damage = d[1]; var config = { statType: c.statType, statMult: c.statMult, element: c.element, cd: c.cdMax, damage: damage, noCrit: true, noMitigate: true, source: { stats: { values: { level: level, elementArcanePercent: 0, elementFrostPercent: 0, elementPoisonPercent: 0, elementHolyPercent: 0, elementFirePercent: 0 } } }, target: { stats: { values: { armor: maxTarget ? (level * 50) : (level * 20), elementAllResist: maxTarget ? 100 : 0, elementArcaneResist: 0, elementFrostResist: 0, elementPoisonResist: 0, elementHolyResist: 0, elementFireResist: 0 } } } }; let stat = c.statType; if (!stat.push) stat = [stat]; const minStat = level; const maxStat = level * 10; stat.forEach(ss => { config.source.stats.values[ss] = (max ? maxStat : minStat); }); let amount = combat.getDamage(config).amount; let critChance = max ? 0.5 : 0.05; let critMult = max ? 3 : 1.5; let castTimeMax = c.castTimeMax; amount = (((amount / 100) * (100 - critChance)) + (((amount / 100) * critChance) * (critMult / 100))); let duration = c.random.i_duration; if (duration) amount *= max ? duration[1] : duration[0]; const div = (c.cdMax + castTimeMax) || 1; amount /= div; res.push({ name: s, dpt: ~~(~~(amount * 10) / 10), cd: c.cdMax, mana: c.manaCost || '', tpk: ~~((maxTarget ? hpMax : hp)[level - 1] / amount), amount: amount }); } res = res.sort((a, b) => (b.dpt - a.dpt)); console.log(); console.log('ability dpt'); console.log(); res.forEach(function (r) { let gap = new Array(20 - r.name.length); console.log(r.name + ': ' + gap.join(' ') + r.dpt + ' ' + r.tpk + ' ticks ' + (~~((r.tpk / 2.85) * 10) / 10) + ' seconds'); }); console.log(); };