aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
-rw-r--r--src/server/game/Spells/SpellDefines.h6
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
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));