diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 1a5a23ba4..6d350265f 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3844,11 +3844,21 @@ SpellCastResult Spell::CheckCast(bool strict) // auto selection spell rank implemented in WorldSession::HandleCastSpellOpcode // this case can be triggered if rank not found (too low-level target for first rank) - if(m_caster->GetTypeId() == TYPEID_PLAYER && !IsPassiveSpell(m_spellInfo->Id) && !m_CastItem) + if (m_caster->GetTypeId() == TYPEID_PLAYER && !IsPassiveSpell(m_spellInfo->Id) && !m_CastItem) + { for(int i=0;i<3;++i) - if(IsPositiveEffect(m_spellInfo->Id, i) && m_spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA) - if(target->getLevel() + 10 < m_spellInfo->spellLevel) - return SPELL_FAILED_LOWLEVEL; + { + // check only spell that apply positive auras + if (IsPositiveEffect(m_spellInfo->Id, i) && m_spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && + // at not self target + !IsCasterSourceTarget(m_spellInfo->EffectImplicitTargetA[i]) && + // and target low level + target->getLevel() + 10 < m_spellInfo->spellLevel) + { + return SPELL_FAILED_LOWLEVEL; + } + } + } } else if (m_caster->GetTypeId() == TYPEID_PLAYER) // Target - is player caster { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index cae3f508b..8fa015563 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8361" + #define REVISION_NR "8362" #endif // __REVISION_NR_H__