From 2aef55266895b0467cc56b13fe3e60e53939d3da Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 28 Mar 2011 00:52:27 +0400 Subject: [PATCH] [11295] Load achievment system state before laoding other character data. This prevent lost detected achievement criteria update or have unexpected criteria update event at character data loading like skills/spells/itemts/etc. Achievment system state load by self not dependent from other character data (checked after all data loading in CheckAllAchievementCriteria() call. --- src/game/AchievementMgr.cpp | 3 +++ src/game/Player.cpp | 5 ++++- src/shared/revision_nr.h | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 175f59728..929688ebd 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -535,6 +535,9 @@ void AchievementMgr::SaveToDB() void AchievementMgr::LoadFromDB(QueryResult *achievementResult, QueryResult *criteriaResult) { + // Note: this code called before any character data loading so don't must triggering any events req. inventory/etc + // all like cases must be happens in CheckAllAchievementCriteria called after character data load + if(achievementResult) { do diff --git a/src/game/Player.cpp b/src/game/Player.cpp index e7c5f5648..8de1c82ed 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -15321,6 +15321,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SqlQueryHolder *holder ) SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); + // just load creteria/achievment data, safe call before any load, and need, because some spell/item/quest loading + // can triggering achievment creteria update that will be lost if this call will later + m_achievementMgr.LoadFromDB(holder->GetResult(PLAYER_LOGIN_QUERY_LOADACHIEVEMENTS), holder->GetResult(PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS)); + uint32 money = fields[8].GetUInt32(); if(money > MAX_MONEY_AMOUNT) money = MAX_MONEY_AMOUNT; @@ -15856,7 +15860,6 @@ bool Player::LoadFromDB(ObjectGuid guid, SqlQueryHolder *holder ) _LoadDeclinedNames(holder->GetResult(PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES)); - m_achievementMgr.LoadFromDB(holder->GetResult(PLAYER_LOGIN_QUERY_LOADACHIEVEMENTS), holder->GetResult(PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS)); m_achievementMgr.CheckAllAchievementCriteria(); _LoadEquipmentSets(holder->GetResult(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS)); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 32b175d3d..98a3f0f9a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11294" + #define REVISION_NR "11295" #endif // __REVISION_NR_H__