From ad0cb188c91501887f4117157dcb450429652b7c Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Jun 2023 00:06:33 +0200 Subject: [PATCH] Core/Players: Fixed spell overrides not being removed when unlearning talents --- src/server/game/Entities/Player/Player.cpp | 5 +++++ src/server/game/Spells/TraitMgr.cpp | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index da2539e8aa..f6a68f82d4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3293,6 +3293,7 @@ void Player::RemoveSpell(uint32 spell_id, bool disabled /*= false*/, bool learn_ bool cur_active = itr->second.active; bool cur_dependent = itr->second.dependent; + Optional traitDefinitionId = itr->second.TraitDefinitionId; if (disabled) { @@ -3405,6 +3406,10 @@ void Player::RemoveSpell(uint32 spell_id, bool disabled /*= false*/, bool learn_ } } + if (traitDefinitionId) + if (TraitDefinitionEntry const* traitDefinition = sTraitDefinitionStore.LookupEntry(*traitDefinitionId)) + RemoveOverrideSpell(traitDefinition->OverridesSpellID, spell_id); + m_overrideSpells.erase(spell_id); if (m_canTitanGrip) diff --git a/src/server/game/Spells/TraitMgr.cpp b/src/server/game/Spells/TraitMgr.cpp index 4586dd865f..35beedd24c 100644 --- a/src/server/game/Spells/TraitMgr.cpp +++ b/src/server/game/Spells/TraitMgr.cpp @@ -392,7 +392,7 @@ void FillOwnedCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig currencies[currency->ID] += player.GetCurrencyQuantity(currency->CurrencyTypesID); break; case TraitCurrencyType::TraitSourced: - if (std::vector* currencySources = Trinity::Containers::MapGetValuePtr(_traitCurrencySourcesByCurrency, currency->ID)) + if (std::vector const* currencySources = Trinity::Containers::MapGetValuePtr(_traitCurrencySourcesByCurrency, currency->ID)) { for (TraitCurrencySourceEntry const* currencySource : *currencySources) { @@ -667,7 +667,6 @@ LearnResult ValidateConfig(WorldPackets::Traits::TraitConfig const& traitConfig, int32* grantedCount = Trinity::Containers::MapGetValuePtr(grantedCurrencies, traitCurrencyId); if (!grantedCount || *grantedCount < spentAmount) return LearnResult::NotEnoughTalentsInPrimaryTree; - } if (requireSpendingAllCurrencies && traitConfig.Type == TraitConfigType::Combat)