diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 17 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 3 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 56bd6e8cef1..f69d5b80ba9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -189,6 +189,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) memset(m_items, 0, sizeof(Item*)*PLAYER_SLOTS_COUNT); + _questRewardedTalentPoints = 0; m_social = nullptr; // group is initialized in the reference constructor @@ -14973,6 +14974,12 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew SetTitle(titleEntry); } + if (quest->GetRewardSkillPoints()) + { + _questRewardedTalentPoints += quest->GetRewardSkillPoints(); + InitTalentForLevel(); + } + // Send reward mail if (uint32 mail_template_id = quest->GetRewMailTemplateId()) { @@ -18827,6 +18834,9 @@ void Player::_LoadQuestStatusRewarded(PreparedQueryResult result) if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(quest->GetRewTitle())) SetTitle(titleEntry); + if (quest->GetRewardSkillPoints()) + _questRewardedTalentPoints += quest->GetRewardSkillPoints(); + // Skip loading special quests - they are also added to rewarded quests but only once and remain there forever // instead add them separately from load daily/weekly/monthly/seasonal if (!quest->IsDailyOrWeekly() && !quest->IsMonthly() && !quest->IsSeasonal()) @@ -26404,7 +26414,7 @@ void Player::SendTalentsInfoData() } if (i == activeGroup) - packet.UnspentTalentPoints = std::max<int32>(0, DB2Manager::GetNumTalentsAtLevel(GetLevel(), Classes(GetClass())) - groupInfo.Talents.size()); + packet.UnspentTalentPoints = std::max<int32>(0, CalculateTalentsPoints() - groupInfo.Talents.size()); std::vector<uint32> glyphs = GetGlyphs(activeGroup); glyphs.resize(MAX_GLYPH_SLOT_INDEX, 0); // Blizzard always sends 6 glyph slots, no matter if they are used or not @@ -26416,6 +26426,11 @@ void Player::SendTalentsInfoData() SendDirectMessage(packet.Write()); } +uint32 Player::CalculateTalentsPoints() const +{ + return DB2Manager::GetNumTalentsAtLevel(GetLevel(), Classes(GetClass())) + _questRewardedTalentPoints; +} + void Player::SendEquipmentSetList() { WorldPackets::EquipmentSet::LoadEquipmentSet data; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index b236a5b7df1..c9b6e4fd7bc 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1147,6 +1147,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> int64 GetBarberShopCost(Trinity::IteratorPair<UF::ChrCustomizationChoice const*> newCustomizations) const; + uint32 _questRewardedTalentPoints; + PlayerSocial* GetSocial() const { return m_social; } void RemoveSocial(); @@ -1828,6 +1830,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint32 GetNextResetTalentsCost() const; void InitTalentForLevel(); void SendTalentsInfoData(); + uint32 CalculateTalentsPoints() const; TalentLearnResult LearnTalent(uint32 talentId, int32* spellOnCooldown); bool AddTalent(TalentEntry const* talent, uint8 spec, bool learning); bool HasTalent(uint32 spell_id, uint8 spec) const; |