diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-12-17 12:18:43 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-17 12:18:43 +0100 |
commit | 05037bd936756b8ae553d17fd920ad8316f27487 (patch) | |
tree | 8240bdce878d67bb152cd8621b472f2855ec043b | |
parent | e12c30c4cc76f54f75efa3cee752e6fbde9c9d08 (diff) |
Core/Auras: Implemented ChangeSpec, ChangeTalent and ChangeGlyph interrupt flags
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Spells/SpellDefines.h | 6 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 |
3 files changed, 10 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 7e8115b5b69..0b9ac27aa66 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2758,6 +2758,9 @@ bool Player::AddTalent(TalentEntry const* talent, uint8 spec, bool learning) else (*GetTalentMap(spec))[talent->ID] = learning ? PLAYERSPELL_NEW : PLAYERSPELL_UNCHANGED; + if (learning) + RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeTalent); + return true; } @@ -27634,6 +27637,8 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec) ExitVehicle(); RemoveAllControlled(); + RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeSpec); + // remove single target auras at other targets AuraList& scAuras = GetSingleCastAuras(); for (AuraList::iterator iter = scAuras.begin(); iter != scAuras.end();) diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 9c402167a5f..5c08a658842 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -117,7 +117,7 @@ enum class SpellAuraInterruptFlags2 : uint32 Ground = 0x00000008, Transform = 0x00000010, // NYI Jump = 0x00000020, - ChangeSpec = 0x00000040, // NYI + ChangeSpec = 0x00000040, AbandonVehicle = 0x00000080, // NYI StartOfEncounter = 0x00000100, // NYI EndOfEncounter = 0x00000200, // NYI @@ -125,8 +125,8 @@ enum class SpellAuraInterruptFlags2 : uint32 EnteringInstance = 0x00000800, // NYI DuelEnd = 0x00001000, // NYI LeaveArenaOrBattleground = 0x00002000, // NYI - ChangeTalent = 0x00004000, // NYI - ChangeGlyph = 0x00008000, // NYI + ChangeTalent = 0x00004000, + ChangeGlyph = 0x00008000, SeamlessTransfer = 0x00010000, // NYI WarModeLeave = 0x00020000, // NYI TouchingGround = 0x00040000, // NYI diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 14b719332b9..7d337387441 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3347,6 +3347,8 @@ void Spell::EffectApplyGlyph() else if (glyphId) glyphs.push_back(glyphId); + player->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeGlyph); + if (GlyphPropertiesEntry const* glyphProperties = sGlyphPropertiesStore.LookupEntry(glyphId)) player->CastSpell(player, glyphProperties->SpellID, CastSpellExtraArgs(TRIGGERED_FULL_MASK) .SetOriginalCastId(m_castId)); |