aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKrudor <erikstrandberg93@hotmail.com>2016-10-15 16:32:18 +0200
committerShauren <shauren.trinity@gmail.com>2016-10-15 16:32:18 +0200
commit0e52a0e6b12a2977e1cde1bdb2d3e536dc494983 (patch)
tree4cf9996ac6e947064fd6d87a636438b2e904228b /src
parentad16014c7ddfef90a5ccc209ce35925e69684ef1 (diff)
[6.x] Core/Spells: Implement SPELL_AURA_INTERFERE_TARGETTING (#17566)
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