aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/AchievementMgr.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp
index 776ff9ebdc7..3bf36d1f0cf 100644
--- a/src/game/AchievementMgr.cpp
+++ b/src/game/AchievementMgr.cpp
@@ -673,12 +673,20 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
// AchievementMgr::UpdateAchievementCriteria might also be called on login - skip in this case
if(!miscvalue1)
continue;
- BattleGround* bg = GetPlayer()->GetBattleGround();
- if(!bg || !bg->isArena())
- continue;
- //bg is arena so bg->GetArenaType() will return correct value
- uint8 slot = ArenaTeam::GetSlotByType(bg->GetArenaType());
- if(slot >= MAX_ARENA_SLOT || achievIdByArenaSlot[slot] != achievement->ID)
+ // skip wrong arena achievements, if not achievIdByArenaSlot then normal total death counter
+ bool notfit = false;
+ for(int i = 0; i < MAX_ARENA_SLOT; ++i)
+ {
+ if(achievIdByArenaSlot[i] == achievement->ID)
+ {
+ BattleGround* bg = GetPlayer()->GetBattleGround();
+ if(!bg || !bg->isArena() || ArenaTeam::GetSlotByType(bg->GetArenaType()) != i)
+ notfit = true;
+
+ break;
+ }
+ }
+ if(notfit)
continue;
SetCriteriaProgress(achievementCriteria, 1, PROGRESS_ACCUMULATE);