aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c70317873be..ae8f0191137 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -25478,14 +25478,20 @@ void Player::LearnTalentSpecialization(uint32 talentSpec)
for (auto it = specSpells->second.begin(); it != specSpells->second.end(); ++it)
{
SpecializationSpellsEntry const* specSpell = *it;
- if (HasSpell(specSpell->OverridesSpellID)) {
+
+ // Unlearn spell if it is replaced by new specialization
+ if (specSpell->OverridesSpellID)
RemoveSpell(specSpell->OverridesSpellID, true);
- LearnSpell(specSpell->SpellID, false);
- }
+
+ // Learn new spell
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(specSpell->SpellID))
+ if (spellInfo->BaseLevel <= getLevel())
+ LearnSpell(specSpell->SpellID, false);
}
}
- if (CanUseMastery()) {
+ if (CanUseMastery())
+ {
ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(talentSpec);
for (uint32 i = 0; i < MAX_MASTERY_SPELLS; ++i)
if (SpellInfo const* masterySpell = sSpellMgr->GetSpellInfo(chrSpec->MasterySpellID[i]))