diff options
-rwxr-xr-x | src/server/game/Achievements/AchievementMgr.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
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()); } } |