aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellInfo.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-01-23 18:33:34 -0300
committerariel- <ariel-@users.noreply.github.com>2017-01-23 18:33:34 -0300
commit3544577e48f3cf4fe4eae670facb3e5f77608e68 (patch)
tree198c1bf6717de1075169ecf734bba56e541f54cb /src/server/game/Spells/SpellInfo.cpp
parent077b5aec9ede78034ba2ec4838b72e8121dab7ce (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.cpp34
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)