diff options
-rw-r--r-- | src/server/game/DataStores/DBCStores.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index f23dd49102b..ecff4836416 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -521,7 +521,7 @@ void LoadDBCStores(const std::string& dataPath) sSpecializationSpellsBySpecStore[specSpells->SpecID].push_back(specSpells); if (specSpells->OverridesSpellID) - sSpecializationOverrideSpellMap[specSpells->SpecID][specSpells->OverridesSpellID] = specSpells->SpellID; + sSpecializationOverrideSpellMap[specSpells->SpecID][specSpells->OverridesSpellID] = specSpells->SpellID; } LoadDBC(availableDbcLocales, bad_dbc_files, sSpellStore, dbcPath, "Spell.dbc"/*, &CustomSpellEntryfmt, &CustomSpellEntryIndex*/); LoadDBC(availableDbcLocales, bad_dbc_files, sSpellCategoriesStore, dbcPath, "SpellCategories.dbc");//15595 diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 740c96753ab..8b4fc341ab9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25606,6 +25606,31 @@ void Player::LearnTalentSpecialization(uint32 talentSpec) SetTalentSpec(GetActiveTalentGroup(), talentSpec); SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, talentSpec); + + PlayerTalentMap* talents = GetTalentMap(GetActiveTalentGroup()); + + for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId) + { + TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentId); + + if (!talentInfo || talentInfo->ClassID != getClass() || talentInfo->SpecID != talentSpec) + continue; + + for (PlayerTalentMap::iterator itr = talents->begin(); itr != talents->end();) + { + TalentEntry const* talent = sTalentStore.LookupEntry(itr->first); + if (!talent || talent->TierID != talentInfo->TierID) + { + ++itr; + continue; + } + RemoveSpell(talent->SpellID, false); + itr = talents->erase(itr); + + TC_LOG_DEBUG("spells", "Player %s unlearning talent id: %u tier: %u because of specialization change", GetName().c_str(), talent->ID, talent->TierID); + } + } + SendTalentsInfoData(); std::list<uint32> learnList = GetSpellsForLevels(0, getRaceMask(), GetActiveTalentSpec(), 0, getLevel()); |