aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <none@none>2010-08-27 20:51:29 +0200
committerQAston <none@none>2010-08-27 20:51:29 +0200
commit6c3015a7e6a0ad2cc298ec188d5b0796bc26d60a (patch)
tree505764e07cf991e9a3c36344ce748c1c8f17550c /src
parent3aa117c9b0c9dd4cfaa8dd38cb542113c26b6090 (diff)
*Fix issues with negative dmg of periodic power burn and periodic power leech effects added recently.
*Minor cleanup. --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp14
-rw-r--r--src/server/game/Spells/SpellMgr.cpp4
2 files changed, 10 insertions, 8 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);
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 6b3ec145b2e..f7f6f4b26a5 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -1902,7 +1902,7 @@ float SpellMgr::CalculateSpellEffectValueMultiplier(SpellEntry const * spellEntr
if (caster)
if (Player * modOwner = caster->GetSpellModOwner())
- modOwner->ApplySpellMod(spellEntry->Id, SPELLMOD_VALUE_MULTIPLIER, multiplier);
+ modOwner->ApplySpellMod(spellEntry->Id, SPELLMOD_VALUE_MULTIPLIER, multiplier, spell);
return multiplier;
}
@@ -1912,7 +1912,7 @@ float SpellMgr::CalculateSpellEffectDamageMultiplier(SpellEntry const * spellEnt
if (caster)
if (Player * modOwner = caster->GetSpellModOwner())
- modOwner->ApplySpellMod(spellEntry->Id, SPELLMOD_DAMAGE_MULTIPLIER, multiplier);
+ modOwner->ApplySpellMod(spellEntry->Id, SPELLMOD_DAMAGE_MULTIPLIER, multiplier, spell);
return multiplier;
}