diff options
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 54bb87470bc..da495eaa4f1 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1485,7 +1485,37 @@ void AuraEffect::PeriodicTick(Unit * target, Unit * caster) const int32 damage = m_amount > 0 ? m_amount : 0; if (GetAuraType() == SPELL_AURA_OBS_MOD_HEALTH) + { + // Taken mods + float TakenTotalMod = 1.0f; + + // Tenacity increase healing % taken + if (AuraEffect const* Tenacity = target->GetAuraEffect(58549, 0)) + TakenTotalMod *= (Tenacity->GetAmount() + 100.0f) / 100.0f; + + // Healing taken percent + float minval = target->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HEALING_PCT); + if (minval) + TakenTotalMod *= (100.0f + minval) / 100.0f; + + float maxval = target->GetMaxPositiveAuraModifier(SPELL_AURA_MOD_HEALING_PCT); + if (maxval) + TakenTotalMod *= (100.0f + maxval) / 100.0f; + + // Healing over time taken percent + float minval_hot = target->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HOT_PCT); + if (minval_hot) + TakenTotalMod *= (100.0f + minval_hot) / 100.0f; + + float maxval_hot = target->GetMaxPositiveAuraModifier(SPELL_AURA_MOD_HOT_PCT); + if (maxval_hot) + TakenTotalMod *= (100.0f + maxval_hot) / 100.0f; + + TakenTotalMod = TakenTotalMod > 0.0f ? TakenTotalMod : 0.0f; + damage = uint32(target->GetMaxHealth() * damage / 100); + damage = uint32(damage * TakenTotalMod); + } else { // Wild Growth = amount + (6 - 2*doneTicks) * ticks* amount / 100 |