diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3ef12a96f8c..64210c5c5bc 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25007,6 +25007,7 @@ void Player::_LoadSkills(PreparedQueryResult result) uint32 count = 0; uint8 professionCount = 0; + std::unordered_map<uint32, uint32> loadedSkillValues; if (result) { do @@ -25083,8 +25084,7 @@ void Player::_LoadSkills(PreparedQueryResult result) SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); - - LearnSkillRewardedSpells(skill, value); + loadedSkillValues[skill] = value; ++count; @@ -25097,6 +25097,10 @@ 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); + if (HasSkill(SKILL_FIST_WEAPONS)) SetSkill(SKILL_FIST_WEAPONS, 0, GetSkillValue(SKILL_UNARMED), GetMaxSkillValueForLevel()); |