diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 7 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a7405320514..98609bcbceb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -279,6 +279,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_lastPotionId = 0; _activeTalentGroup = 0; + _questRewardedTalentPoints = 0; m_auraBaseFlatMod.fill(0.0f); m_auraBasePctMod.fill(1.0f); @@ -14397,6 +14398,14 @@ void Player::RewardQuest(Quest const* quest, LootItemType rewardType, uint32 rew SetTitle(titleEntry); } + // Quests which have no skillId set but still reward skill points, are considered talent point rewards + if (!quest->GetRewardSkillId() && quest->GetRewardSkillPoints()) + { + _questRewardedTalentPoints += quest->GetRewardSkillPoints(); + UpdateAvailableTalentPoints(); + SendTalentsInfoData(); + } + // Send reward mail if (uint32 mail_template_id = quest->GetRewMailTemplateId()) { @@ -18429,6 +18438,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()) @@ -28586,7 +28598,7 @@ bool Player::LearnTalent(uint32 talentId, uint8 rank) void Player::UpdateAvailableTalentPoints() { - uint32 points = sDB2Manager.GetNumTalentsAtLevel(GetLevel(), Classes(GetClass())); + uint32 points = sDB2Manager.GetNumTalentsAtLevel(GetLevel(), Classes(GetClass())) + _questRewardedTalentPoints; uint32 spentPoints = 0; for (auto const& pair : _talentGroups[_activeTalentGroup].Talents) spentPoints += pair.second + 1; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 8fadec8d96c..c82a037a8ba 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -3029,6 +3029,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> // Talents std::vector<TalentGroupInfo> _talentGroups; uint8 _activeTalentGroup; + uint32 _questRewardedTalentPoints; std::unordered_map<int32, PlayerSpellState> m_traitConfigStates; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index d7f686ceb62..1939a6ef69e 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5260,7 +5260,7 @@ void ObjectMgr::LoadQuests() } } - if (qinfo->_rewardSkillPoints) + if (qinfo->_rewardSkillPoints && qinfo->_rewardSkillId) { if (qinfo->_rewardSkillPoints > sWorld->GetConfigMaxSkillValue()) { @@ -5268,11 +5268,6 @@ void ObjectMgr::LoadQuests() qinfo->GetQuestId(), qinfo->_rewardSkillPoints, sWorld->GetConfigMaxSkillValue()); // no changes, quest can't be done for this requirement } - if (!qinfo->_rewardSkillId) - { - TC_LOG_ERROR("sql.sql", "Quest {} has `RewardSkillPoints` = {} but `RewardSkillId` is 0", - qinfo->GetQuestId(), qinfo->_rewardSkillPoints); - } } // fill additional data stores |
