aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/AchievementMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-09-20 19:07:39 +0200
committerShauren <shauren.trinity@gmail.com>2014-09-20 19:07:39 +0200
commitd87c23cdafd3f64e83e4451efeb4952814593d69 (patch)
treebeeb89c2bdadbbc4ab9692e9cb53d808e919b1e0 /src/server/game/Achievements/AchievementMgr.cpp
parentb5cd540758592261a51e2e4c580190fd282ed5a0 (diff)
Core/Achievements: Fixed realm first kill achievement restrictions - now only the first group will be able to complete it
Closes #2957
Diffstat (limited to 'src/server/game/Achievements/AchievementMgr.cpp')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 90e8d8de672..594f34e4202 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -1620,7 +1620,7 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
{
// someone on this realm has already completed that achievement
- if (sAchievementMgr->IsRealmCompleted(achievement))
+ if (sAchievementMgr->IsRealmCompleted(achievement, GetPlayer()->GetInstanceId()))
return false;
}
@@ -2027,10 +2027,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
ca.date = time(NULL);
ca.changed = true;
- // don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement
- /// @todo where do set this instead?
- if (!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
- sAchievementMgr->SetRealmCompleted(achievement);
+ sAchievementMgr->SetRealmCompleted(achievement, GetPlayer()->GetInstanceId());
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT);
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_EARN_ACHIEVEMENT_POINTS, achievement->points);
@@ -2405,7 +2402,7 @@ void AchievementGlobalMgr::LoadCompletedAchievements()
continue;
}
else if (achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL))
- m_allCompletedAchievements.insert(achievementId);
+ m_allCompletedAchievements[achievementId] = uint32(0xFFFFFFFF);
}
while (result->NextRow());
@@ -2582,3 +2579,10 @@ AchievementCriteriaEntry const* AchievementGlobalMgr::GetAchievementCriteria(uin
{
return sAchievementCriteriaStore.LookupEntry(criteriaId);
}
+
+void AchievementGlobalMgr::OnInstanceDestroyed(uint32 instanceId)
+{
+ for (auto& realmCompletion : m_allCompletedAchievements)
+ if (realmCompletion.second == instanceId)
+ realmCompletion.second = uint32(0xFFFFFFFF);
+}