Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index a08c2e8..ca6c3d1 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -137,7 +137,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
&Aura::HandleModRegen, // 84 SPELL_AURA_MOD_REGEN
&Aura::HandleModPowerRegen, // 85 SPELL_AURA_MOD_POWER_REGEN
&Aura::HandleChannelDeathItem, // 86 SPELL_AURA_CHANNEL_DEATH_ITEM
- &Aura::HandleNoImmediateEffect, // 87 SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN implemented in Unit::MeleeDamageBonusTaken and Unit::SpellDamageBonusTaken
+ &Aura::HandleDamagePercentTaken, // 87 SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN implemented in Unit::MeleeDamageBonusTaken and Unit::SpellDamageBonusTaken
&Aura::HandleNoImmediateEffect, // 88 SPELL_AURA_MOD_HEALTH_REGEN_PERCENT implemented in Player::RegenerateHealth
&Aura::HandlePeriodicDamagePCT, // 89 SPELL_AURA_PERIODIC_DAMAGE_PERCENT
&Aura::HandleUnused, // 90 unused (3.0.8a-3.2.2a) old SPELL_AURA_MOD_RESIST_CHANCE
@@ -5255,6 +5255,29 @@ void Aura::HandlePeriodicHeal(bool apply, bool /*Real*/)
}
}
+void Aura::HandleDamagePercentTaken(bool apply, bool Real)
+{
+ m_isPeriodic = apply;
+
+ Unit* target = GetTarget();
+ Unit* caster = GetCaster();
+
+ if (!Real)
+ return;
+
+ if (apply)
+ {
+ // Hand of Salvation
+ if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_PALADIN && GetSpellProto()->SpellFamilyFlags & UI64LIT(0x0000000000000100))
+ {
+ // Glyph of Salvation
+ if (caster == target)
+ if (Aura* aur = caster->GetAura(63225, EFFECT_INDEX_0))
+ m_modifier.m_amount = -aur->GetModifier()->m_amount;
+ }
+ }
+}
+
void Aura::HandlePeriodicDamage(bool apply, bool Real)
{
// spells required only Real aura add/remove
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h
index 3713e4c..acb36d7 100644
--- a/src/game/SpellAuras.h
+++ b/src/game/SpellAuras.h
@@ -302,6 +302,7 @@ class MANGOS_DLL_SPEC Aura
void HandleModPowerRegen(bool Apply, bool Real);
void HandleModPowerRegenPCT(bool Apply, bool Real);
void HandleChannelDeathItem(bool Apply, bool Real);
+ void HandleDamagePercentTaken(bool Apply, bool Real);
void HandlePeriodicDamagePCT(bool Apply, bool Real);
void HandleAuraModAttackPower(bool Apply, bool Real);
void HandleAuraTransform(bool Apply, bool Real);
diff --git a/src/game/UnitAuraProcHandler.cpp b/src/game/UnitAuraProcHandler.cpp