aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/AchievementMgr.cpp
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2014-09-20 22:39:37 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2014-09-20 22:39:37 +0200
commitf767aef12eaf2e55deed89590eb9e8a39b0d1653 (patch)
treec8737ba6d3d7065daf61046ed9d424d7bfc7c5e0 /src/server/game/Achievements/AchievementMgr.cpp
parent8e288dd6731ed608d8285f9f966783ee9b46eebf (diff)
parent72d08a146f3ca8369f173b9293d564673155491a (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.cpp20
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);
+}