diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-07-11 23:27:00 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-07-11 23:27:00 +0200 |
commit | 947dbcbabc004727b69d7fcae2db320fcc776c6b (patch) | |
tree | d0ef445e4e48149581b9044e9a28bf1b3fc35597 | |
parent | 492fd80b0621728889c6013682d07b420778ef9a (diff) |
Core/Achievements: Fixed crash in CheckAllAchievementCriteria
-rwxr-xr-x | src/server/game/Achievements/AchievementMgr.cpp | 14 | ||||
-rwxr-xr-x | src/server/game/Achievements/AchievementMgr.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 2 |
3 files changed, 10 insertions, 8 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 34b38ff1d35..fb24c25fed2 100755 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -818,6 +818,11 @@ void AchievementMgr<Guild>::LoadFromDB(PreparedQueryResult achievementResult, Pr template<class T> void AchievementMgr<T>::Reset() { +} + +template<> +void AchievementMgr<Player>::Reset() +{ for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter) { WorldPacket data(SMSG_ACHIEVEMENT_DELETED, 4); @@ -837,7 +842,7 @@ void AchievementMgr<T>::Reset() DeleteFromDB(_owner->GetGUIDLow()); // re-fill data - CheckAllAchievementCriteria(); + CheckAllAchievementCriteria(GetOwner()); } template<> @@ -874,9 +879,6 @@ void AchievementMgr<Guild>::Reset() m_completedAchievements.clear(); DeleteFromDB(_owner->GetId()); - - // re-fill data - CheckAllAchievementCriteria(); } template<class T> @@ -1040,11 +1042,11 @@ void AchievementMgr<Guild>::SendCriteriaUpdate(AchievementCriteriaEntry const* e * called at player login. The player might have fulfilled some achievements when the achievement system wasn't working yet */ template<class T> -void AchievementMgr<T>::CheckAllAchievementCriteria() +void AchievementMgr<T>::CheckAllAchievementCriteria(Player* referencePlayer) { // suppress sending packets for (uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i) - UpdateAchievementCriteria(AchievementCriteriaTypes(i)); + UpdateAchievementCriteria(AchievementCriteriaTypes(i), 0, 0, NULL, referencePlayer); } static const uint32 achievIdByArenaSlot[MAX_ARENA_SLOT] = { 1057, 1107, 1108 }; diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h index 636160d4437..1a1cc217c28 100755 --- a/src/server/game/Achievements/AchievementMgr.h +++ b/src/server/game/Achievements/AchievementMgr.h @@ -235,7 +235,7 @@ class AchievementMgr void ResetAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1 = 0, uint32 miscvalue2 = 0, bool evenIfCriteriaComplete = false); void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = NULL, Player* referencePlayer = NULL); void CompletedAchievement(AchievementEntry const* entry, Player* referencePlayer); - void CheckAllAchievementCriteria(); + void CheckAllAchievementCriteria(Player* referencePlayer); void SendAllAchievementData(Player* receiver) const; void SendAchievementInfo(Player* receiver, uint32 achievementId = 0) const; bool HasAchieved(uint32 achievementId) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 558106c956d..219878799ac 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17456,7 +17456,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) _LoadDeclinedNames(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADDECLINEDNAMES)); - m_achievementMgr.CheckAllAchievementCriteria(); + m_achievementMgr.CheckAllAchievementCriteria(this); _LoadEquipmentSets(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS)); |