diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-01-10 20:59:08 +0100 |
---|---|---|
committer | Nayd <dnpd.dd@gmail.com> | 2015-01-31 20:14:15 +0000 |
commit | 9ee820d83d2bc3a2fb7c88047874c6420b116799 (patch) | |
tree | 4c76371c4f2980f3f39275690afac315e0c56b94 /src | |
parent | c87de730fae0914a5d0741365066007a46f9a469 (diff) |
Core/Players: Fixed loading and saving skill data PK violations
(cherry picked from commit 2dfd1594cd3cc7fdba4131d2e825885cac2bcc17)
Conflicts:
src/server/game/Entities/Player/Player.cpp
Diffstat (limited to 'src')
-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 161fca432b4..f6954385dfb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -25047,6 +25047,7 @@ void Player::_LoadSkills(PreparedQueryResult result) // SetPQuery(PLAYER_LOGIN_QUERY_LOADSKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = '%u'", GUID_LOPART(m_guid)); uint32 count = 0; + std::unordered_map<uint32, uint32> loadedSkillValues; if (result) { do @@ -25114,8 +25115,7 @@ void Player::_LoadSkills(PreparedQueryResult result) SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(count), 0); mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); - - LearnSkillRewardedSpells(skill, value); + loadedSkillValues[skill] = value; ++count; @@ -25128,6 +25128,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); + for (; count < PLAYER_MAX_SKILLS; ++count) { SetUInt32Value(PLAYER_SKILL_INDEX(count), 0); |