aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellInfo.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-03-21 12:05:32 +0100
committerShauren <shauren.trinity@gmail.com>2021-03-21 12:05:32 +0100
commit9b5a46ca2bb3a4632cb9914e0899df611a47d935 (patch)
tree71e62e799d6a9786b5990b5a8223651de0abf0e4 /src/server/game/Spells/SpellInfo.cpp
parent6db27c58b97a028026e0159109fbf20f6132e6b5 (diff)
Core/Auras: Defined and implemented many new interrupt flags
Diffstat (limited to 'src/server/game/Spells/SpellInfo.cpp')
-rw-r--r--src/server/game/Spells/SpellInfo.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index aa8d5f513ea..f8cabac4d00 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -1213,8 +1213,10 @@ SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, S
if (SpellInterruptsEntry const* _interrupt = data.Interrupts)
{
InterruptFlags = _interrupt->InterruptFlags;
- std::copy(std::begin(_interrupt->AuraInterruptFlags), std::end(_interrupt->AuraInterruptFlags), AuraInterruptFlags.begin());
- std::copy(std::begin(_interrupt->ChannelInterruptFlags), std::end(_interrupt->ChannelInterruptFlags), ChannelInterruptFlags.begin());
+ AuraInterruptFlags = SpellAuraInterruptFlags(_interrupt->AuraInterruptFlags[0]);
+ AuraInterruptFlags2 = SpellAuraInterruptFlags2(_interrupt->AuraInterruptFlags[1]);
+ ChannelInterruptFlags = SpellAuraInterruptFlags(_interrupt->ChannelInterruptFlags[0]);
+ ChannelInterruptFlags2 = SpellAuraInterruptFlags2(_interrupt->ChannelInterruptFlags[1]);
}
// SpellLevelsEntry
@@ -1360,7 +1362,7 @@ bool SpellInfo::HasTargetType(::Targets target) const
bool SpellInfo::HasAnyAuraInterruptFlag() const
{
- return std::find_if(AuraInterruptFlags.begin(), AuraInterruptFlags.end(), [](uint32 flag) { return flag != 0; }) != AuraInterruptFlags.end();
+ return AuraInterruptFlags != SpellAuraInterruptFlags::None || AuraInterruptFlags2 != SpellAuraInterruptFlags2::None;
}
bool SpellInfo::IsExplicitDiscovery() const
@@ -1633,7 +1635,7 @@ bool SpellInfo::IsChanneled() const
bool SpellInfo::IsMoveAllowedChannel() const
{
- return IsChanneled() && (HasAttribute(SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING) || (!(ChannelInterruptFlags[0] & (AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING))));
+ return IsChanneled() && (HasAttribute(SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING) || !ChannelInterruptFlags.HasFlag(SpellAuraInterruptFlags::Moving | SpellAuraInterruptFlags::Turning));
}
bool SpellInfo::NeedsComboPoints() const
@@ -2513,7 +2515,7 @@ void SpellInfo::_LoadSpellSpecific()
case SPELLFAMILY_GENERIC:
{
// Food / Drinks (mostly)
- if (HasAuraInterruptFlag(AURA_INTERRUPT_FLAG_NOT_SEATED))
+ if (HasAuraInterruptFlag(SpellAuraInterruptFlags::Standing))
{
bool food = false;
bool drink = false;
@@ -3486,6 +3488,9 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, SpellEffectInfo const* e
auraSpellInfo->Id != Id); // Don't remove self
});
}
+
+ if (apply && schoolImmunity & SPELL_SCHOOL_MASK_NORMAL)
+ target->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::InvulnerabilityBuff);
}
if (uint32 mechanicImmunity = immuneInfo->MechanicImmuneMask)
@@ -3516,8 +3521,13 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, SpellEffectInfo const* e
}
if (uint32 damageImmunity = immuneInfo->DamageSchoolMask)
+ {
target->ApplySpellImmune(Id, IMMUNITY_DAMAGE, damageImmunity, apply);
+ if (apply && damageImmunity & SPELL_SCHOOL_MASK_NORMAL)
+ target->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::InvulnerabilityBuff);
+ }
+
for (AuraType auraType : immuneInfo->AuraTypeImmune)
{
target->ApplySpellImmune(Id, IMMUNITY_STATE, auraType, apply);