From e41e3544ffdc838cec9498c28a6c16853d2b66d4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 28 Jan 2011 15:34:53 +0100 Subject: Core/Achievements: Achievement title rewards will be readded when loading achievements (fixes cases like player completing achievement X and not getting reward because it was misssing from database at that time) --- src/server/game/Achievements/AchievementMgr.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 3b740993458..327b4360292 100755 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -574,17 +574,25 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ do { Field* fields = achievementResult->Fetch(); - uint32 achievement_id = fields[0].GetUInt16(); + uint32 achievementid = fields[0].GetUInt16(); // don't must happen: cleanup at server startup in sAchievementMgr->LoadCompletedAchievements() - if (!sAchievementStore.LookupEntry(achievement_id)) + AchievementEntry const* achievement = sAchievementStore.LookupEntry(achievementid); + if (!achievement) continue; - CompletedAchievementData& ca = m_completedAchievements[achievement_id]; + CompletedAchievementData& ca = m_completedAchievements[achievementid]; ca.date = time_t(fields[1].GetUInt32()); ca.changed = false; - } - while (achievementResult->NextRow()); + + // title achievement rewards are retroactive + if (AchievementReward const* reward = sAchievementMgr->GetAchievementReward(achievement)) + if (uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == ALLIANCE ? 0 : 1]) + if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) + if (!GetPlayer()->HasTitle(titleEntry)) + GetPlayer()->SetTitle(titleEntry); + + } while (achievementResult->NextRow()); } if (criteriaResult) @@ -612,8 +620,7 @@ void AchievementMgr::LoadFromDB(PreparedQueryResult achievementResult, PreparedQ progress.counter = counter; progress.date = date; progress.changed = false; - } - while (criteriaResult->NextRow()); + } while (criteriaResult->NextRow()); } } -- cgit v1.2.3