Browse Source

bug: Mobs no longer get stats from the items that are in their drop list

tags/v0.12.0
Shaun 1 year ago
parent
commit
0da64f6006
5 changed files with 30 additions and 31 deletions
  1. +1
    -1
      src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js
  2. +8
    -5
      src/server/combat/scale.js
  3. +2
    -1
      src/server/config/spells/spellTemplate.js
  4. +8
    -0
      src/server/items/generator.js
  5. +11
    -24
      src/server/world/mobBuilder.js

+ 1
- 1
src/client/ui/templates/tooltipItem/buildTooltip/stringifyStatValue.js View File

@@ -5,7 +5,7 @@ define([
) {
const percentageStats = [
'addCritChance',
'addCritemultiplier',
'addCritMultiplier',
'addAttackCritChance',
'addAttackCritMultiplier',
'addSpellCritChance',


+ 8
- 5
src/server/combat/scale.js View File

@@ -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;


+ 2
- 1
src/server/config/spells/spellTemplate.js View File

@@ -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)


+ 8
- 0
src/server/items/generator.js View File

@@ -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)


+ 11
- 24
src/server/world/mobBuilder.js View File

@@ -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) => {


Loading…
Cancel
Save