diff options
author | Krudor <erikstrandberg93@hotmail.com> | 2016-10-15 16:32:18 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-10-15 16:32:18 +0200 |
commit | 0e52a0e6b12a2977e1cde1bdb2d3e536dc494983 (patch) | |
tree | 4cf9996ac6e947064fd6d87a636438b2e904228b /src | |
parent | ad16014c7ddfef90a5ccc209ce35925e69684ef1 (diff) |
[6.x] Core/Spells: Implement SPELL_AURA_INTERFERE_TARGETTING (#17566)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 12 |
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 |