-
-
Save Keader/ba483cbfae82c2a30393f78cba470c7c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
index 80565e1b46..37c67177cb 100644 | |
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
@@ -5936,23 +5936,6 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const | |
bool haveCastItem = !GetBase()->GetCastItemGUID().IsEmpty(); | |
- // Health Funnel | |
- // damage caster for heal amount | |
- if (target != caster && GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL)) | |
- { | |
- uint32 funnelDamage = GetSpellInfo()->ManaPerSecond; // damage is not affected by spell power | |
- | |
- if (funnelDamage > healInfo.GetEffectiveHeal() && healInfo.GetEffectiveHeal()) | |
- funnelDamage = healInfo.GetEffectiveHeal(); | |
- | |
- uint32 funnelAbsorb = 0; | |
- caster->DealDamageMods(caster, funnelDamage, &funnelAbsorb); | |
- caster->SendSpellNonMeleeDamageLog(caster, GetId(), funnelDamage, GetSpellInfo()->GetSchoolMask(), funnelAbsorb, 0, false, 0, false); | |
- | |
- CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL); | |
- caster->DealDamage(caster, funnelDamage, &cleanDamage, NODAMAGE, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true); | |
- } | |
- | |
// %-based heal - does not proc auras | |
if (GetAuraType() == SPELL_AURA_OBS_MOD_HEALTH) | |
return; | |
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp | |
index cff25bc8e2..83e1203b26 100644 | |
--- a/src/server/game/Spells/Auras/SpellAuras.cpp | |
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp | |
@@ -703,7 +703,27 @@ void Aura::Update(uint32 diff, Unit* caster) | |
if (powertype == POWER_HEALTH) | |
{ | |
if (int32(caster->GetHealth()) > manaPerSecond) | |
- caster->ModifyHealth(-manaPerSecond); | |
+ { | |
+ // Health Funnel | |
+ // Remove hearth from caster. Owner need be equals caster because Aura::Update is called 2 times | |
+ // one for pet/target aura and another for caster aura. | |
+ if (GetSpellInfo()->HasAttribute(SPELL_ATTR2_HEALTH_FUNNEL) && m_owner == caster) | |
+ { | |
+ uint32 funnelDamage = GetSpellInfo()->ManaPerSecond; // damage is not affected by spell power | |
+ | |
+ //Handle with Improved Health Funnel | |
+ if (Player* pCaster = caster->ToPlayer()) | |
+ pCaster->ApplySpellMod(GetSpellInfo()->Id, SPELLMOD_COST, funnelDamage); | |
+ | |
+ uint32 funnelAbsorb = 0; | |
+ caster->DealDamageMods(caster, funnelDamage, &funnelAbsorb); | |
+ caster->SendSpellNonMeleeDamageLog(caster, GetId(), funnelDamage, GetSpellInfo()->GetSchoolMask(), funnelAbsorb, 0, false, 0, false); | |
+ CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL); | |
+ caster->DealDamage(caster, funnelDamage, &cleanDamage, NODAMAGE, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true); | |
+ } | |
+ else if (m_owner == caster) | |
+ caster->ModifyHealth(-manaPerSecond); | |
+ } | |
else | |
Remove(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment