aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Achievements/AchievementMgr.cpp21
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());
}
}