Core/Achievements: Fixed crash in CheckAllAchievementCriteria

This commit is contained in:
Shauren
2012-07-11 23:27:00 +02:00
parent 492fd80b06
commit 947dbcbabc
3 changed files with 10 additions and 8 deletions
@@ -817,6 +817,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)
{
@@ -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 };
@@ -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;
+1 -1
View File
@@ -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));