Skip to content

Instantly share code, notes, and snippets.

@Keader
Last active October 5, 2017 15:11
Show Gist options
  • Save Keader/ba483cbfae82c2a30393f78cba470c7c to your computer and use it in GitHub Desktop.
Save Keader/ba483cbfae82c2a30393f78cba470c7c to your computer and use it in GitHub Desktop.
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