diff --git a/src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js b/src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js index 3144eb59..7e206463 100644 --- a/src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js +++ b/src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js @@ -5,7 +5,7 @@ define([ ) { const percentageStats = [ 'addCritChance', - 'addCritemultiplier', + 'addCritMultiplier', 'addAttackCritChance', 'addAttackCritMultiplier', 'addSpellCritChance', diff --git a/src/server/combat/scale.js b/src/server/combat/scale.js index f1e6ec31..57b1b139 100644 --- a/src/server/combat/scale.js +++ b/src/server/combat/scale.js @@ -4,9 +4,9 @@ const max = Math.max.bind(Math); //Helpers const scaleStatType = (config, result) => { - const { statType, statMult = 1, srcValues } = config; + const { statType, statMult = 1, srcValues, scaleConfig } = config; - if (!statType) + if (!statType || scaleConfig?.statMult === false) return; let statValue = 0; @@ -24,7 +24,10 @@ const scaleStatType = (config, result) => { result.amount *= statValue * statMult; }; -const scalePercentMultipliers = ({ isAttack, elementName, srcValues }, result) => { +const scalePercentMultipliers = ({ isAttack, elementName, srcValues, scaleConfig }, result) => { + if (scaleConfig?.percentMult === false) + return; + const { dmgPercent = 0, physicalPercent = 0, spellPercent = 0 } = srcValues; let totalPercent = 100 + dmgPercent; @@ -40,8 +43,8 @@ const scalePercentMultipliers = ({ isAttack, elementName, srcValues }, result) = result.amount *= (totalPercent / 100); }; -const scaleCrit = ({ noCrit, isAttack, crit: forceCrit, srcValues }, result) => { - if (noCrit) +const scaleCrit = ({ noCrit, isAttack, crit: forceCrit, srcValues, scaleConfig }, result) => { + if (noCrit || scaleConfig?.critMult === false) return; const { critChance, attackCritChance, spellCritChance } = srcValues; diff --git a/src/server/config/spells/spellTemplate.js b/src/server/config/spells/spellTemplate.js index 30ca220f..b4ff246e 100644 --- a/src/server/config/spells/spellTemplate.js +++ b/src/server/config/spells/spellTemplate.js @@ -292,7 +292,8 @@ module.exports = { isAttack: this.isAttack, noScale: this.noScale, noMitigate: noMitigate, - spell: this + spell: this, + scaleConfig: this.scaleConfig }; if (this.obj.mob) diff --git a/src/server/items/generator.js b/src/server/items/generator.js index 6d2279c3..5cc40010 100644 --- a/src/server/items/generator.js +++ b/src/server/items/generator.js @@ -75,6 +75,14 @@ module.exports = { if (blueprint.isSpell) isSpell = true; + const beforeGenerateItemEvent = { + blueprint, + item: null + }; + global.instancer.instances[0].eventEmitter.emit('beforeGenerateItem', beforeGenerateItemEvent); + if (beforeGenerateItemEvent.item) + return beforeGenerateItemEvent.item; + if (isSpell) spellGenerators.forEach(g => g.generate(item, blueprint)); else if (isCurrency) diff --git a/src/server/world/mobBuilder.js b/src/server/world/mobBuilder.js index 80a5fecf..7a2c6bbb 100644 --- a/src/server/world/mobBuilder.js +++ b/src/server/world/mobBuilder.js @@ -73,32 +73,19 @@ const buildCpnInventory = (mob, blueprint, { drops }, preferStat) => { cpnInventory.inventorySize = -1; cpnInventory.dailyDrops = blueprint.dailyDrops; - if (!drops?.blueprints || drops?.alsoRandom) { - generateSlots.forEach(slot => { - const item = itemGenerator.generate({ - noSpell: true, - level, - slot, - quality: 4, - forceStats: [preferStat] - }); - delete item.spell; - item.eq = true; - - cpnInventory.getItem(item); + generateSlots.forEach(slot => { + const item = itemGenerator.generate({ + noSpell: true, + level, + slot, + quality: 4, + forceStats: [preferStat] }); - } else { - //TODO: Don't give mobs these items: they'll drop them anyway - drops.blueprints.forEach(d => { - if (d.type === 'key') - return; - - const drop = extend({}, d); - drop.level = level; + delete item.spell; + item.eq = true; - cpnInventory.getItem(itemGenerator.generate(drop)); - }); - } + cpnInventory.getItem(item); + }); }; const buildCpnSpells = (mob, blueprint, typeDefinition, preferStat) => {