From 6dedecfeac5ed8bbdbf495fbef02ba1305d28b55 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Wed, 17 Nov 2021 16:54:11 +0100 Subject: [PATCH] Core/Spells: implement SpellAuraInterruptFlags2::ChangeSpec --- src/server/game/Entities/Player/Player.cpp | 10 ++++++++++ src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Spells/SpellDefines.h | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 40bdc51b85..b08a789dd4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3533,6 +3533,9 @@ bool Player::ResetTalents(bool no_cost) SetPrimaryTalentTree(GetActiveSpec(), 0); SetFreeTalentPoints(talentPointsForLevel); + // We consider resetting talents as changing a specialization as well as we now can pick an entirely new primary talent tree which equals changing specs + RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeSpec); + CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction(); _SaveTalents(trans); _SaveSpells(trans); @@ -28220,6 +28223,13 @@ void Player::SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay) const SendDirectMessage(raidGroupOnly.Write()); } +void Player::SetActiveSpec(uint8 spec) +{ + _talentMgr->ActiveSpec = spec; + UpdateArmorSpecialization(); + RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::ChangeSpec); +} + void Player::SetRestFlag(RestFlag restFlag, uint32 triggerId /*= 0*/) { uint32 oldRestMask = _restFlagMask; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 831f5a280d..ba78e770b7 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1609,7 +1609,7 @@ class TC_GAME_API Player : public Unit, public GridObject uint32 GetPrimaryTalentTree(uint8 spec) const { return _talentMgr->SpecInfo[spec].TalentTree; } void SetPrimaryTalentTree(uint8 spec, uint32 tree) { _talentMgr->SpecInfo[spec].TalentTree = tree; UpdateArmorSpecialization(); } uint8 GetActiveSpec() const { return _talentMgr->ActiveSpec; } - void SetActiveSpec(uint8 spec){ _talentMgr->ActiveSpec = spec; UpdateArmorSpecialization(); } + void SetActiveSpec(uint8 spec); uint8 GetSpecsCount() const { return _talentMgr->SpecsCount; } void SetSpecsCount(uint8 count) { _talentMgr->SpecsCount = count; } diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 8f8021619e..7e68eee2cf 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -96,7 +96,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