Index: game/Spell.cpp =================================================================== --- game/Spell.cpp (revision 5278) +++ game/Spell.cpp (working copy) @@ -325,7 +325,7 @@ // determine reflection m_canReflect = false; - if(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && (m_spellInfo->AttributesEx2 & 0x4)==0) + if(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && (m_spellInfo->AttributesEx & 0x80)==0) { for(int j=0;j<3;j++) { Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 5278) +++ game/Unit.cpp (working copy) @@ -2778,9 +2779,24 @@ { int32 reflectchance = pVictim->GetTotalAuraModifier(SPELL_AURA_REFLECT_SPELLS); Unit::AuraList const& mReflectSpellsSchool = pVictim->GetAurasByType(SPELL_AURA_REFLECT_SPELLS_SCHOOL); - for(Unit::AuraList::const_iterator i = mReflectSpellsSchool.begin(); i != mReflectSpellsSchool.end(); ++i) + for(Unit::AuraList::const_iterator i = mReflectSpellsSchool.begin(), next; i != mReflectSpellsSchool.end(); i = next) + { + next = i; ++next; + if((*i)->GetModifier()->m_miscvalue & int32(1 << spell->School)) + { reflectchance += (*i)->GetModifier()->m_amount; + if((*i)->m_procCharges > 0) + (*i)->m_procCharges -= 1; + + if((*i)->m_procCharges == 0) + { + RemoveAurasDueToSpell((*i)->GetSpellProto()->Id); + next = mReflectSpellsSchool.begin(); + continue; + } + } + } if (reflectchance > 0 && roll_chance_i(reflectchance)) return SPELL_MISS_REFLECT; }