diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Spell.cpp | 12 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 5 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index ecd2852dd7c..411a130539e 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2241,11 +2241,13 @@ void Spell::cast(bool skipCheck) // update pointers base at GUIDs to prevent access to non-existed already object UpdatePointers(); - if(m_targets.getUnitTarget() && m_targets.getUnitTarget()->isAlive() && !m_targets.getUnitTarget()->isVisibleForOrDetect(m_caster, true)) - { - cancel(); - return; - } + if(Unit *pTarget = m_targets.getUnitTarget()) + if(pTarget->isAlive() && (pTarget->HasAuraType(SPELL_AURA_MOD_STEALTH) || pTarget->HasAuraType(SPELL_AURA_MOD_INVISIBILITY)) && !pTarget->IsFriendlyTo(m_caster) && !pTarget->isVisibleForOrDetect(m_caster, true)) + { + SendCastResult(SPELL_FAILED_BAD_TARGETS); + finish(false); + return; + } SetExecutedCurrently(true); uint8 castResult = 0; diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 5fa6e5843fc..937833eab7d 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -543,7 +543,10 @@ void Aura::Update(uint32 diff) } // Channeled aura required check distance from caster except in possessed cases - Unit *pRealTarget = (GetSpellProto()->EffectApplyAuraName[m_effIndex] == SPELL_AURA_PERIODIC_TRIGGER_SPELL && !IsAreaOfEffectSpell(sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex])) && GetTriggerTarget()) ? GetTriggerTarget() : m_target; + Unit *pRealTarget = (GetSpellProto()->EffectApplyAuraName[m_effIndex] == SPELL_AURA_PERIODIC_TRIGGER_SPELL && + sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex]) && + !IsAreaOfEffectSpell(sSpellStore.LookupEntry(GetSpellProto()->EffectTriggerSpell[m_effIndex])) && + GetTriggerTarget()) ? GetTriggerTarget() : m_target; if(IsChanneledSpell(m_spellProto) && !pRealTarget->isPossessed() && pRealTarget->GetGUID() != GetCasterGUID()) |