From 341d65c1db0d99c0603e04edbe2fc37314cf20dc Mon Sep 17 00:00:00 2001 From: Necropola Date: Tue, 6 Jul 2021 12:46:18 +0200 Subject: [PATCH] fix(Core/Player): learnSkillRewardedSpells AFERT ALL skills have been loaded (#6676) - Closes #6670 - Closes https://github.com/chromiecraft/chromiecraft/issues/1046 --- src/server/game/Entities/Player/Player.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ddb835cb6..311bc65b7 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26008,6 +26008,7 @@ void Player::_LoadSkills(PreparedQueryResult result) // SetPQuery(PLAYER_LOGIN_QUERY_LOADSKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = '%u'", m_guid.GetCounter()); uint32 count = 0; + std::unordered_map loadedSkillValues; if (result) { do @@ -26073,7 +26074,7 @@ void Player::_LoadSkills(PreparedQueryResult result) mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); - learnSkillRewardedSpells(skill, value); + loadedSkillValues[skill] = value; ++count; @@ -26085,6 +26086,12 @@ void Player::_LoadSkills(PreparedQueryResult result) } while (result->NextRow()); } + // Learn skill rewarded spells after all skills have been loaded to prevent learning a skill from them before its loaded with proper value from DB + for (auto& skill : loadedSkillValues) + { + learnSkillRewardedSpells(skill.first, skill.second); + } + for (; count < PLAYER_MAX_SKILLS; ++count) { SetUInt32Value(PLAYER_SKILL_INDEX(count), 0);