diff options
author | QAston <none@none> | 2010-08-27 20:51:29 +0200 |
---|---|---|
committer | QAston <none@none> | 2010-08-27 20:51:29 +0200 |
commit | 6c3015a7e6a0ad2cc298ec188d5b0796bc26d60a (patch) | |
tree | 505764e07cf991e9a3c36344ce748c1c8f17550c /src | |
parent | 3aa117c9b0c9dd4cfaa8dd38cb542113c26b6090 (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.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 4 |
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; } |