From 5e320797d1a879580bd149a7b12df013a027c9ad Mon Sep 17 00:00:00 2001 From: Roc13x Date: Wed, 22 Jun 2016 23:03:54 +0000 Subject: [PATCH] Core/Player: Fix talent learning Broke since 78d1dfd11a830226a214869007eb1e4a334b0c83 where this talent code was randomly deleted somehow --- src/server/game/Entities/Player/Player.cpp | 27 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index dcc4f66e24e..651c170fbd4 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25451,12 +25451,31 @@ bool Player::LearnTalent(uint32 talentId, uint32 talentRank) // Find out how many points we have in this field uint32 spentPoints = 0; uint32 primaryTreeTalents = 0; - uint32 tTab = talentInfo->TalentTab; - bool isMainTree = GetPrimaryTalentTree(GetActiveSpec()) == tTab || !GetPrimaryTalentTree(GetActiveSpec()); + uint32 primaryTreeId = GetPrimaryTalentTree(GetActiveSpec()); + bool isMainTree = primaryTreeId == talentInfo->TalentTab || !primaryTreeId; if (talentInfo->Row > 0 || !isMainTree) - for (uint32 i = 0; i < sTalentStore.GetNumRows(); i++) // Loop through all talents. - if (sTalentStore.LookupEntry(i)) + { + for (uint32 i = 0; i < sTalentStore.GetNumRows(); i++) // Loop through all talents. + { + if (const TalentEntry* tmpTalent = sTalentStore.LookupEntry(i)) // Someday, someone needs to revamp the way talents are tracked + { + for (uint8 rank = 0; rank < MAX_TALENT_RANK; rank++) + { + if (tmpTalent->RankID[rank] != 0) + { + if (HasSpell(tmpTalent->RankID[rank])) + { + if (tmpTalent->TalentTab == talentInfo->TalentTab) + spentPoints += (rank + 1); + if (tmpTalent->TalentTab == primaryTreeId) + primaryTreeTalents += (rank + 1); + } + } + } + } + } + } // not have required min points spent in talent tree if (spentPoints < (talentInfo->Row * MAX_TALENT_RANK))