diff options
| author | Shauren <shauren.trinity@gmail.com> | 2014-09-20 19:07:39 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2014-09-20 19:07:39 +0200 |
| commit | d87c23cdafd3f64e83e4451efeb4952814593d69 (patch) | |
| tree | beeb89c2bdadbbc4ab9692e9cb53d808e919b1e0 /src/server/game/Achievements/AchievementMgr.cpp | |
| parent | b5cd540758592261a51e2e4c580190fd282ed5a0 (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.cpp | 16 |
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); +} |
