diff --git a/helpers/sims/dpt/index.js b/helpers/sims/dpt/index.js index a670a4db..1c98f1d9 100644 --- a/helpers/sims/dpt/index.js +++ b/helpers/sims/dpt/index.js @@ -1,8 +1,4 @@ -var extend = require('extend'); -var requirejs = require('requirejs'); +global.extend = require('../../../src/server/misc/clone'); -global.extend = extend; - -requirejs(['sim'], function (sim) { - sim.init(); -}); +const sim = require('./sim'); +sim(); diff --git a/helpers/sims/dpt/sim.js b/helpers/sims/dpt/sim.js index fe746f49..9837dadc 100644 --- a/helpers/sims/dpt/sim.js +++ b/helpers/sims/dpt/sim.js @@ -1,182 +1,181 @@ -define([ - '../../src/server/config/spellsConfig', - '../../src/server/combat/combat' -], function ( - config, - combat -) { - var spells = config.spells; - - var max = false; - var maxTarget = false; - - spells['harvest life'] = { - statType: ['str', 'int'], - statMult: 0.76, - auto: true, - cdMax: 6, - manaCost: 0, - range: 1, - random: { - damage: [1.5, 5.7], - healPercent: [5, 15] - } - }; - - var bloodBarrierMult = 1.25; - spells['skeleton melee'] = { - statType: ['str', 'int'], - statMult: 0.27 * bloodBarrierMult, - auto: true, - cdMax: 5, - manaCost: 0, - range: 1, - random: { - damage: [1, 3.8] - } - }; - - var level = 20; - - var 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 - ]; - - var 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 - ]; - - return { - init: function () { - var res = []; - - for (var s in spells) { - var c = spells[s]; - var d = c.random.damage || c.random.healing; - if (!d) - continue; - - var 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: !!c.random.healing, - - 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 - } - } +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 } - }; - - var stat = c.statType; - if (!stat.push) - stat = [stat]; - - var minStat = level; - var maxStat = level * 5; - - var mult = (stat.length == 1) ? 1 : 1; - - stat.forEach(s => config.source.stats.values[s] = (max ? maxStat : minStat) * mult); - - var amount = combat.getDamage(config).amount; - var duration = c.random.i_duration; - if (duration) - amount *= max ? duration[1] : duration[0]; - - amount /= c.cdMax; - - var critChance = max ? 0.5 : 0.05; - var critMult = max ? 3 : 1.5; - - amount = (amount * (1 - critChance)) + (amount * critChance * critMult); - - res.push({ - name: s, - dpt: (~~(amount * 10) / 10), - cd: c.cdMax, - mana: c.manaCost || '', - tpk: ~~((maxTarget ? hpMax : hp)[level - 1] / amount), - amount: amount - }); + } + }, + target: { + stats: { + values: { + armor: maxTarget ? (level * 50) : (level * 20), + elementAllResist: maxTarget ? 100 : 0, + elementArcaneResist: 0, + elementFrostResist: 0, + elementPoisonResist: 0, + elementHolyResist: 0, + elementFireResist: 0 + } + } } - - res = res.sort((a, b) => (b.dpt - a.dpt)); - - console.log(); - console.log('ability dpt'); - console.log(); - res.forEach(function (r) { - var 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(); - } - }; -}); + }; + + 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(); +}; + diff --git a/src/server/config/spellsConfig.js b/src/server/config/spellsConfig.js index 216511d3..832a81ec 100644 --- a/src/server/config/spellsConfig.js +++ b/src/server/config/spellsConfig.js @@ -17,7 +17,7 @@ let spells = { manaCost: 0, range: 9, random: { - damage: [2, 7.6] + damage: [2, 7.2] } }, @@ -25,12 +25,12 @@ let spells = { statType: 'int', statMult: 1, element: 'arcane', - cdMax: 6, - castTimeMax: 7, - manaCost: 4, + cdMax: 7, + castTimeMax: 6, + manaCost: 5, range: 9, random: { - damage: [4, 15] + damage: [4, 32] } }, 'ice spear': { @@ -42,7 +42,7 @@ let spells = { manaCost: 4, range: 9, random: { - damage: [2, 8], + damage: [2, 15], i_freezeDuration: [6, 10] } }, @@ -54,7 +54,7 @@ let spells = { castTimeMax: 2, manaCost: 5, random: { - damage: [2, 5], + damage: [2, 10], i_radius: [1, 2.2], i_pushback: [2, 5] } @@ -63,8 +63,8 @@ let spells = { statType: 'int', statMult: 1, element: 'holy', - cdMax: 4, - castTimeMax: 6, + cdMax: 6, + castTimeMax: 3, range: 9, manaCost: 7, random: { @@ -77,7 +77,7 @@ let spells = { statMult: 1, element: 'holy', cdMax: 5, - castTimeMax: 5, + castTimeMax: 4, manaCost: 8, range: 9, radius: 3, @@ -108,7 +108,7 @@ let spells = { range: 10, manaCost: 3, random: { - damage: [2, 8], + damage: [2, 11], i_stunDuration: [6, 10] } }, @@ -117,10 +117,10 @@ let spells = { statMult: 1, cdMax: 20, castTimeMax: 0, - manaCost: 12, + manaCost: 10, random: { i_duration: [10, 20], - i_chance: [20, 50] + i_chance: [30, 60] } }, whirlwind: { @@ -133,18 +133,18 @@ let spells = { noDrop: true, random: { i_range: [1, 2.5], - damage: [4, 15] + damage: [4, 18] } }, smokebomb: { statType: 'dex', statMult: 1, element: 'poison', - cdMax: 5, + cdMax: 7, castTimeMax: 0, manaCost: 6, random: { - damage: [0.25, 1.45], + damage: [0.25, 1.2], i_radius: [1, 3], i_duration: [7, 13] } @@ -152,26 +152,26 @@ let spells = { ambush: { statType: 'dex', statMult: 1, - cdMax: 16, - castTimeMax: 7, + cdMax: 15, + castTimeMax: 3, range: 10, manaCost: 7, noDrop: true, random: { - damage: [8, 28], - i_stunDuration: [4, 6] + damage: [8, 35], + i_stunDuration: [4, 7] } }, 'crystal spikes': { statType: ['dex', 'int'], statMult: 1, - manaCost: 22, + manaCost: 14, needLos: true, cdMax: 20, castTimeMax: 0, range: 9, random: { - damage: [3, 14], + damage: [3, 16], i_delay: [1, 4] }, negativeStats: [ diff --git a/src/server/world/mobBuilder.js b/src/server/world/mobBuilder.js index eea30419..60da70ea 100644 --- a/src/server/world/mobBuilder.js +++ b/src/server/world/mobBuilder.js @@ -106,7 +106,7 @@ module.exports = { mob.equipment.unequipAll(); mob.inventory.clear(); - let hp = level * 32.7; + let hp = level * 40; statValues.hpMax = hp; statValues.level = level;