diff options
-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)); |