diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 |
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])) |