aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp63
1 files changed, 29 insertions, 34 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index e831ac843ea..9cf3e557581 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5886,12 +5886,6 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const
bool usableWhileStunned = m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_STUNNED);
bool usableWhileFeared = m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED);
bool usableWhileConfused = m_spellInfo->HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED);
- if (m_spellInfo->HasAttribute(SPELL_ATTR7_USABLE_IN_STUN_FEAR_CONFUSION))
- {
- usableWhileStunned = true;
- usableWhileFeared = true;
- usableWhileConfused = true;
- }
// Check whether the cast should be prevented by any state you might have.
SpellCastResult result = SPELL_CAST_OK;
@@ -5901,18 +5895,18 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const
if (!m_caster->GetCharmerGUID().IsEmpty())
{
if (Unit* charmer = m_caster->GetCharmer())
- if (charmer->GetUnitBeingMoved() != m_caster && CheckCasterNotImmunedCharmAuras(param1))
+ if (charmer->GetUnitBeingMoved() != m_caster && !CheckSpellCancelsCharm(param1))
result = SPELL_FAILED_CHARMED;
}
- else if (unitflag & UNIT_FLAG_STUNNED && !usableWhileStunned && CheckCasterNotImmunedStunAuras(param1))
+ else if (unitflag & UNIT_FLAG_STUNNED && !usableWhileStunned && !CheckSpellCancelsStun(param1))
result = SPELL_FAILED_STUNNED;
- else if (unitflag & UNIT_FLAG_SILENCED && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && CheckCasterNotImmunedSilenceAuras(param1))
+ else if (unitflag & UNIT_FLAG_SILENCED && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && !CheckSpellCancelsSilence(param1))
result = SPELL_FAILED_SILENCED;
- else if (unitflag & UNIT_FLAG_PACIFIED && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && CheckCasterNotImmunedPacifyAuras(param1))
+ else if (unitflag & UNIT_FLAG_PACIFIED && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && !CheckSpellCancelsPacify(param1))
result = SPELL_FAILED_PACIFIED;
- else if (unitflag & UNIT_FLAG_FLEEING && !usableWhileFeared && CheckCasterNotImmunedFearAuras(param1))
+ else if (unitflag & UNIT_FLAG_FLEEING && !usableWhileFeared && !CheckSpellCancelsFear(param1))
result = SPELL_FAILED_FLEEING;
- else if (unitflag & UNIT_FLAG_CONFUSED && !usableWhileConfused && CheckCasterNotImmunedDisorientAuras(param1))
+ else if (unitflag & UNIT_FLAG_CONFUSED && !usableWhileConfused && !CheckSpellCancelsConfuse(param1))
result = SPELL_FAILED_CONFUSED;
else if (m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_NO_ACTIONS)
result = SPELL_FAILED_NO_ACTIONS;
@@ -5924,17 +5918,16 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const
return SPELL_CAST_OK;
}
-// based on sub_00804430 from 12340 client
-bool Spell::CheckCasterHasNotImmunedAuraType(AuraType auraType, uint32* param1) const
+bool Spell::CheckSpellCancelsAuraEffect(AuraType auraType, uint32* param1) const
{
// Checking auras is needed now, because you are prevented by some state but the spell grants immunity.
Unit::AuraEffectList const& auraEffects = m_caster->GetAuraEffectsByType(auraType);
if (auraEffects.empty())
- return false;
+ return true;
for (AuraEffect const* aurEff : auraEffects)
{
- if (m_spellInfo->CanSpellCastOverrideAuraEffect(aurEff))
+ if (m_spellInfo->SpellCancelsAuraEffect(aurEff))
continue;
if (param1)
@@ -5943,44 +5936,46 @@ bool Spell::CheckCasterHasNotImmunedAuraType(AuraType auraType, uint32* param1)
if (!*param1)
*param1 = aurEff->GetSpellInfo()->Mechanic;
}
- return true;
+
+ return false;
}
- return false;
+ return true;
}
-bool Spell::CheckCasterNotImmunedCharmAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsCharm(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_CHARM, param1) ||
- CheckCasterHasNotImmunedAuraType(SPELL_AURA_AOE_CHARM, param1) ||
- CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_POSSESS, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_CHARM, param1) &&
+ CheckSpellCancelsAuraEffect(SPELL_AURA_AOE_CHARM, param1) &&
+ CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_POSSESS, param1);
}
-bool Spell::CheckCasterNotImmunedStunAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsStun(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_STUN, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_STUN, param1) &&
+ CheckSpellCancelsAuraEffect(SPELL_AURA_STRANGULATE, param1);
}
-bool Spell::CheckCasterNotImmunedSilenceAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsSilence(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_SILENCE, param1) ||
- CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_PACIFY_SILENCE, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_SILENCE, param1) &&
+ CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_PACIFY_SILENCE, param1);
}
-bool Spell::CheckCasterNotImmunedPacifyAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsPacify(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_PACIFY, param1) ||
- CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_PACIFY_SILENCE, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_PACIFY, param1) &&
+ CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_PACIFY_SILENCE, param1);
}
-bool Spell::CheckCasterNotImmunedFearAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsFear(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_FEAR, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_FEAR, param1);
}
-bool Spell::CheckCasterNotImmunedDisorientAuras(uint32* param1) const
+bool Spell::CheckSpellCancelsConfuse(uint32* param1) const
{
- return CheckCasterHasNotImmunedAuraType(SPELL_AURA_MOD_CONFUSE, param1);
+ return CheckSpellCancelsAuraEffect(SPELL_AURA_MOD_CONFUSE, param1);
}
SpellCastResult Spell::CheckArenaAndRatedBattlegroundCastRules()