3900 | | bool isFromSameCaster = Aur->GetCasterGUID() == (*i).second->GetCasterGUID(); |
3901 | | if( spellmgr.IsNoStackSpellDueToSpell(spellId, i_spellId, isFromSameCaster) ) |
3902 | | { |
3903 | | //some spells should be not removed by lower rank of them |
3904 | | if (!isFromSameCaster |
3905 | | &&(spellProto->Effect[effIndex]==SPELL_AURA_MOD_INCREASE_ENERGY) |
3906 | | &&(spellProto->DurationIndex==21) |
3907 | | &&(spellmgr.IsRankSpellDueToSpell(spellProto, i_spellId)) |
3908 | | &&(CompareAuraRanks(spellId, effIndex, i_spellId, i_effIndex) < 0)) |
| 3900 | SpellSpecific i_spellId_spec = GetSpellSpecific(i_spellId); |
| 3901 | |
| 3902 | bool is_sspc = IsSingleFromSpellSpecificPerCaster(spellId_spec,i_spellId_spec); |
| 3903 | |
| 3904 | if( is_sspc && Aur->GetCasterGUID() == (*i).second->GetCasterGUID() ) |
| 3905 | { |
| 3906 | // cannot remove higher rank |
| 3907 | if (spellmgr.IsRankSpellDueToSpell(spellProto, i_spellId)) |
| 3908 | if(CompareAuraRanks(spellId, effIndex, i_spellId, i_effIndex) < 0) |
| 3923 | } |
| 3924 | else if( !is_sspc && spellmgr.IsNoStackSpellDueToSpell(spellId, i_spellId) ) |
| 3925 | { |
| 3926 | // Its a parent aura (create this aura in ApplyModifier) |
| 3927 | if ((*i).second->IsInUse()) |
| 3928 | { |
| 3929 | sLog.outError("Aura (Spell %u Effect %u) is in process but attempt removed at aura (Spell %u Effect %u) adding, need add stack rule for Unit::RemoveNoStackAurasDueToAura", i->second->GetId(), i->second->GetEffIndex(),Aur->GetId(), Aur->GetEffIndex()); |
| 3930 | continue; |
| 3931 | } |
| 3932 | RemoveAurasDueToSpell(i_spellId); |
| 3933 | |
| 3934 | if( m_Auras.empty() ) |
| 3935 | break; |
| 3936 | else |
| 3937 | next = m_Auras.begin(); |
| 3938 | } |
| 3939 | // Potions stack aura by aura (elixirs/flask already checked) |
| 3940 | else if( spellProto->SpellFamilyName == SPELLFAMILY_POTION && i_spellProto->SpellFamilyName == SPELLFAMILY_POTION ) |
| 3941 | { |
| 3942 | if (IsNoStackAuraDueToAura(spellId, effIndex, i_spellId, i_effIndex)) |
| 3943 | { |
| 3944 | if(CompareAuraRanks(spellId, effIndex, i_spellId, i_effIndex) < 0) |
| 3945 | return false; // cannot remove higher rank |
| 3946 | |
| 3947 | // Its a parent aura (create this aura in ApplyModifier) |
| 3948 | if ((*i).second->IsInUse()) |
| 3949 | { |
| 3950 | sLog.outError("Aura (Spell %u Effect %u) is in process but attempt removed at aura (Spell %u Effect %u) adding, need add stack rule for Unit::RemoveNoStackAurasDueToAura", i->second->GetId(), i->second->GetEffIndex(),Aur->GetId(), Aur->GetEffIndex()); |
| 3951 | continue; |
| 3952 | } |
| 3953 | RemoveAura(i); |
| 3954 | next = i; |
| 3955 | } |