Index: src/game/Unit.cpp =================================================================== --- src/game/Unit.cpp (revision 5515) +++ src/game/Unit.cpp (working copy) @@ -1895,6 +1895,8 @@ int32 RemainingDamage = damage - *resist; // absorb without mana cost + int32 reflectDamage = 0; + Aura* reflectAura = NULL; AuraList const& vSchoolAbsorb = pVictim->GetAurasByType(SPELL_AURA_SCHOOL_ABSORB); for(AuraList::const_iterator i = vSchoolAbsorb.begin(), next; i != vSchoolAbsorb.end() && RemainingDamage > 0; i = next) { @@ -1924,14 +1926,14 @@ int32 currentAbsorb; //Reflective Shield - if ((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*i)->GetSpellProto()->SpellFamilyFlags == 0x1) + if ((pVictim != this) && (*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*i)->GetSpellProto()->SpellFamilyFlags == 0x1) { if(Unit* caster = (*i)->GetCaster()) { AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) { - int32 reflect_damage = 0; + switch((*k)->GetModifier()->m_miscvalue) { case 5065: // Rank 1 @@ -1941,16 +1943,16 @@ case 5061: // Rank 5 { if(RemainingDamage >= (*i)->GetModifier()->m_amount) - reflect_damage = (*i)->GetModifier()->m_amount * (*k)->GetModifier()->m_amount/100; + reflectDamage = (*i)->GetModifier()->m_amount * (*k)->GetModifier()->m_amount/100; else - reflect_damage = (*k)->GetModifier()->m_amount * RemainingDamage/100; - pVictim->CastCustomSpell(this, 33619, &reflect_damage, NULL, NULL, true, NULL, *i); + reflectDamage = (*k)->GetModifier()->m_amount * RemainingDamage/100; + reflectAura = *i; } break; default: break; } - if(reflect_damage) + if(reflectDamage) break; } } @@ -1970,6 +1972,8 @@ RemainingDamage -= currentAbsorb; } + if (reflectDamage) + pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, reflectAura); // absorb by mana cost AuraList const& vManaShield = pVictim->GetAurasByType(SPELL_AURA_MANA_SHIELD);