aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-01-28 15:34:53 +0100
committerShauren <shauren.trinity@gmail.com>2011-01-28 15:34:53 +0100
commite41e3544ffdc838cec9498c28a6c16853d2b66d4 (patch)
tree96e0f191fc8e183851efa1be503fa0e2af304511 /src
parent3f0d888b0e1a2c25a0ee4e0d17d31a1c0e4e0bf7 (diff)
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)
Diffstat (limited to 'src')
-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());
}
}