aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp12
3 files changed, 14 insertions, 2 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index e3d6799c1a5..5396a06d941 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -379,7 +379,7 @@ enum AuraType
SPELL_AURA_MOD_MELEE_HASTE_3 = 319,
SPELL_AURA_MOD_RANGED_HASTE_2 = 320,
SPELL_AURA_MOD_NO_ACTIONS = 321,
- SPELL_AURA_INTERFERE_TARGETTING = 322, // NYI
+ SPELL_AURA_INTERFERE_TARGETTING = 322,
SPELL_AURA_323 = 323, // Not used in 4.3.4
SPELL_AURA_324 = 324, // spell critical chance (probably by school mask)
SPELL_AURA_325 = 325, // Not used in 4.3.4
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 71d89d435ad..6b35400213c 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -381,7 +381,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleModMeleeSpeedPct, //319 SPELL_AURA_MOD_MELEE_HASTE_3
&AuraEffect::HandleAuraModRangedHaste, //320 SPELL_AURA_MOD_RANGED_HASTE_2
&AuraEffect::HandleAuraModNoActions, //321 SPELL_AURA_MOD_NO_ACTIONS
- &AuraEffect::HandleNULL, //322 SPELL_AURA_INTERFERE_TARGETTING
+ &AuraEffect::HandleNoImmediateEffect, //322 SPELL_AURA_INTERFERE_TARGETTING implemented in Spell::CheckCast
&AuraEffect::HandleUnused, //323 unused (4.3.4)
&AuraEffect::HandleNULL, //324 SPELL_AURA_324
&AuraEffect::HandleUnused, //325 unused (4.3.4)
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 9e733dbfdd2..9dc0fc5d67b 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4890,6 +4890,18 @@ SpellCastResult Spell::CheckCast(bool strict)
if (castResult != SPELL_CAST_OK)
return castResult;
+ // If it's not a melee spell, check if vision is obscured by SPELL_AURA_INTERFERE_TARGETTING
+ if (m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE)
+ {
+ for (auto const& itr : m_caster->GetAuraEffectsByType(SPELL_AURA_INTERFERE_TARGETTING))
+ if (!m_caster->IsFriendlyTo(itr->GetCaster()) && !target->HasAura(itr->GetId(), itr->GetCasterGUID()))
+ return SPELL_FAILED_VISION_OBSCURED;
+
+ for (auto const& itr : target->GetAuraEffectsByType(SPELL_AURA_INTERFERE_TARGETTING))
+ if (!m_caster->IsFriendlyTo(itr->GetCaster()) && (!target->HasAura(itr->GetId(), itr->GetCasterGUID()) || !m_caster->HasAura(itr->GetId(), itr->GetCasterGUID())))
+ return SPELL_FAILED_VISION_OBSCURED;
+ }
+
if (target != m_caster)
{
// Must be behind the target