diff options
| author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-20 22:39:37 +0200 |
|---|---|---|
| committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-09-20 22:39:37 +0200 |
| commit | f767aef12eaf2e55deed89590eb9e8a39b0d1653 (patch) | |
| tree | c8737ba6d3d7065daf61046ed9d424d7bfc7c5e0 /src/server/game/Achievements/AchievementMgr.cpp | |
| parent | 8e288dd6731ed608d8285f9f966783ee9b46eebf (diff) | |
| parent | 72d08a146f3ca8369f173b9293d564673155491a (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Achievements/AchievementMgr.cpp
src/server/game/Achievements/AchievementMgr.h
src/server/game/Globals/ObjectMgr.cpp
Diffstat (limited to 'src/server/game/Achievements/AchievementMgr.cpp')
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 0bb6fd8d3a1..92b1afb4e07 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -1005,7 +1005,7 @@ template<class T> void AchievementMgr<T>::CheckAllAchievementCriteria(Player* referencePlayer) { // suppress sending packets - for (uint32 i=0; i<ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i) + for (uint32 i = 0; i < ACHIEVEMENT_CRITERIA_TYPE_TOTAL; ++i) UpdateAchievementCriteria(AchievementCriteriaTypes(i), 0, 0, 0, NULL, referencePlayer); } @@ -1408,7 +1408,7 @@ bool AchievementMgr<T>::IsCompletedCriteria(AchievementCriteriaEntry const* achi 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, GetOwner()->GetInstanceId()) return false; } @@ -1822,10 +1822,7 @@ void AchievementMgr<Player>::CompletedAchievement(AchievementEntry const* achiev 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, GetOwner()->GetInstanceId()); _achievementPoints += achievement->points; @@ -1918,7 +1915,7 @@ void AchievementMgr<Guild>::CompletedAchievement(AchievementEntry const* achieve ca.guids.insert(groupMember->GetGUID()); } - sAchievementMgr->SetRealmCompleted(achievement); + sAchievementMgr->SetRealmCompleted(achievement, referencePlayer->GetInstanceId()); _achievementPoints += achievement->points; @@ -3183,7 +3180,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()); @@ -3360,3 +3357,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); +} |
