diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-03-21 12:05:32 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-03-21 12:05:32 +0100 |
commit | 9b5a46ca2bb3a4632cb9914e0899df611a47d935 (patch) | |
tree | 71e62e799d6a9786b5990b5a8223651de0abf0e4 /src/server/game/Spells/SpellInfo.cpp | |
parent | 6db27c58b97a028026e0159109fbf20f6132e6b5 (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.cpp | 20 |
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); |