aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 00c94839297..3de0b5258b7 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2347,11 +2347,12 @@ void Spell::EffectPowerDrain(SpellEffIndex effIndex)
damage = m_caster->SpellDamageBonus(unitTarget, m_spellInfo, uint32(damage), SPELL_DIRECT_DAMAGE);
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
- uint32 power = damage;
+ int32 power = damage;
if (powerType == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power);
+ power = std::min(0, power);
- int32 newDamage = unitTarget->ModifyPower(powerType, -int32(power));
+ int32 newDamage = -(unitTarget->ModifyPower(powerType, -int32(power)));
float gainMultiplier = 0.0f;
@@ -2400,24 +2401,25 @@ void Spell::EffectPowerBurn(SpellEffIndex effIndex)
// burn x% of target's mana, up to maximum of 2x% of caster's mana (Mana Burn)
if (m_spellInfo->ManaCostPercentage)
{
- int32 maxdamage = m_caster->GetMaxPower(powerType) * damage * 2 / 100;
+ int32 maxDamage = m_caster->GetMaxPower(powerType) * damage * 2 / 100;
damage = unitTarget->GetMaxPower(powerType) * damage / 100;
- if (damage > maxdamage) damage = maxdamage;
+ damage = std::min(damage, maxDamage);
}
int32 power = damage;
// resilience reduce mana draining effect at spell crit damage reduction (added in 2.4)
if (powerType == POWER_MANA)
power -= unitTarget->GetSpellCritDamageReduction(power);
+ power = std::min(0, power);
- int32 newDamage = unitTarget->ModifyPower(powerType, -power);
+ int32 newDamage = -(unitTarget->ModifyPower(powerType, -power));
// NO - Not a typo - EffectPowerBurn uses effect value multiplier - not effect damage multiplier
float dmgMultiplier = SpellMgr::CalculateSpellEffectValueMultiplier(m_spellInfo, effIndex, m_originalCaster, this);
newDamage = int32(newDamage * dmgMultiplier);
- ExecuteLogEffectTakeTargetPower(effIndex,unitTarget, powerType, newDamage, dmgMultiplier);
+ ExecuteLogEffectTakeTargetPower(effIndex, unitTarget, powerType, newDamage, dmgMultiplier);
if (m_originalCaster)
m_originalCaster->DealDamage(unitTarget, newDamage);