diff options
| -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]))  | 
