aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Spell.cpp12
-rw-r--r--src/game/SpellAuras.cpp5
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())