diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2017-01-23 18:33:34 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-01-23 18:33:34 -0300 |
| commit | 3544577e48f3cf4fe4eae670facb3e5f77608e68 (patch) | |
| tree | 198c1bf6717de1075169ecf734bba56e541f54cb /src/server/game/Spells/SpellInfo.cpp | |
| parent | 077b5aec9ede78034ba2ec4838b72e8121dab7ce (diff) | |
Core/Spell: unified handling of SPELL_ATTR5_USABLE_WHILE_* attributes
Allowed mechanic mask is calculated on startup and auras checked against those mechanics
Closes #18798
Diffstat (limited to 'src/server/game/Spells/SpellInfo.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index dff7a6a7f5e..e969c3d35d0 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -858,6 +858,8 @@ SpellInfo::SpellInfo(SpellEntry const* spellEntry) _spellSpecific = SPELL_SPECIFIC_NORMAL; _auraState = AURA_STATE_NONE; + + _allowedMechanicMask = 0; } SpellInfo::~SpellInfo() @@ -2787,7 +2789,34 @@ void SpellInfo::_LoadImmunityInfo() immuneInfo.AuraTypeImmune.shrink_to_fit(); immuneInfo.SpellEffectImmune.shrink_to_fit(); + + _allowedMechanicMask |= immuneInfo.MechanicImmuneMask; } + + if (HasAttribute(SPELL_ATTR5_USABLE_WHILE_STUNNED)) + { + switch (Id) + { + case 22812: // Barkskin + _allowedMechanicMask |= + (1 << MECHANIC_STUN) | + (1 << MECHANIC_FREEZE) | + (1 << MECHANIC_KNOCKOUT) | + (1 << MECHANIC_SLEEP); + break; + case 49039: // Lichborne, don't allow normal stuns + break; + default: + _allowedMechanicMask |= (1 << MECHANIC_STUN); + break; + } + } + + if (HasAttribute(SPELL_ATTR5_USABLE_WHILE_CONFUSED)) + _allowedMechanicMask |= (1 << MECHANIC_DISORIENTED); + + if (HasAttribute(SPELL_ATTR5_USABLE_WHILE_FEARED)) + _allowedMechanicMask |= (1 << MECHANIC_FEAR); } void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, uint8 effIndex, bool apply) const @@ -2979,6 +3008,11 @@ bool SpellInfo::SpellCancelsAuraEffect(SpellInfo const* auraSpellInfo, uint8 aur return false; } +uint32 SpellInfo::GetAllowedMechanicMask() const +{ + return _allowedMechanicMask; +} + float SpellInfo::GetMinRange(bool positive) const { if (!RangeEntry) |
