diff options
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 17 |
2 files changed, 11 insertions, 11 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ec895ae9ab6..aafef41809a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8381,11 +8381,6 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType float tmpDamage = float(int32(pdamage) + DoneFlatBenefit) * DoneTotalMod; - // apply spellmod to Done damage - if (spellProto) - if (Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_DAMAGE, tmpDamage); - // bonus result can be negative return uint32(std::max(tmpDamage, 0.0f)); } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 05ac456ec59..2fb4d4cd29a 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3080,7 +3080,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) // multiple weapon dmg effect workaround // execute only the last weapon damage // and handle all effects at once - for (uint32 j = effIndex + 1; j < MAX_SPELL_EFFECTS; ++j) + for (uint8 j = effIndex + 1; j < MAX_SPELL_EFFECTS; ++j) { switch (m_spellInfo->Effects[j].Effect) { @@ -3278,7 +3278,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) bool normalized = false; float weaponDamagePercentMod = 1.0f; - for (int j = 0; j < MAX_SPELL_EFFECTS; ++j) + for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) { switch (m_spellInfo->Effects[j].Effect) { @@ -3322,7 +3322,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) int32 weaponDamage = m_caster->CalculateDamage(m_attackType, normalized, addPctMods); // Sequence is important - for (int j = 0; j < MAX_SPELL_EFFECTS; ++j) + for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) { // We assume that a spell have at most one fixed_bonus // and at most one weaponDamagePercentMod @@ -3335,6 +3335,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) break; case SPELL_EFFECT_WEAPON_PERCENT_DAMAGE: weaponDamage = int32(weaponDamage * weaponDamagePercentMod); + break; default: break; // not weapon damage effect, just skip } @@ -3343,12 +3344,16 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) weaponDamage += spell_bonus; weaponDamage = int32(weaponDamage * totalDamagePercentMod); + // apply spellmod to Done damage + if (Player* modOwner = m_caster->GetSpellModOwner()) + modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_DAMAGE, weaponDamage); + // prevent negative damage - uint32 eff_damage(std::max(weaponDamage, 0)); + weaponDamage = std::max(weaponDamage, 0); // Add melee damage bonuses (also check for negative) - uint32 damageBonusDone = m_caster->MeleeDamageBonusDone(unitTarget, eff_damage, m_attackType, m_spellInfo); - m_damage += unitTarget->MeleeDamageBonusTaken(m_caster, damageBonusDone, m_attackType, m_spellInfo); + weaponDamage = m_caster->MeleeDamageBonusDone(unitTarget, weaponDamage, m_attackType, m_spellInfo); + m_damage += unitTarget->MeleeDamageBonusTaken(m_caster, weaponDamage, m_attackType, m_spellInfo); } void Spell::EffectThreat(SpellEffIndex /*effIndex*/) |