Core/Achievements: Achievement criteria type 39 should check player's personal rating, not team rating
Closes #803
This commit is contained in:
@@ -1503,11 +1503,8 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
break;
|
||||
}
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING:
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING:
|
||||
{
|
||||
uint32 reqTeamType = type == ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_TEAM_RATING ?
|
||||
achievementCriteria->highest_team_rating.teamtype :
|
||||
achievementCriteria->reach_team_rating.teamtype;
|
||||
uint32 reqTeamType = achievementCriteria->highest_team_rating.teamtype;
|
||||
|
||||
if (miscValue1)
|
||||
{
|
||||
@@ -1519,13 +1516,51 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||
else // login case
|
||||
{
|
||||
for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot)
|
||||
if (uint32 arena_team_id = GetPlayer()->GetArenaTeamId(arena_slot))
|
||||
if (ArenaTeam * at = sArenaTeamMgr->GetArenaTeamById(arena_team_id))
|
||||
if (at->GetType() == reqTeamType)
|
||||
{
|
||||
SetCriteriaProgress(achievementCriteria, at->GetStats().Rating, PROGRESS_HIGHEST);
|
||||
break;
|
||||
}
|
||||
{
|
||||
uint32 teamId = GetPlayer()->GetArenaTeamId(arena_slot);
|
||||
if (!teamId)
|
||||
continue;
|
||||
|
||||
ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(teamId);
|
||||
if (!team || team->GetType() != reqTeamType)
|
||||
continue;
|
||||
|
||||
SetCriteriaProgress(achievementCriteria, team->GetStats().Rating, PROGRESS_HIGHEST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING:
|
||||
{
|
||||
uint32 reqTeamType = achievementCriteria->highest_personal_rating.teamtype;
|
||||
|
||||
if (miscValue1)
|
||||
{
|
||||
if (miscValue2 != reqTeamType)
|
||||
continue;
|
||||
|
||||
SetCriteriaProgress(achievementCriteria, miscValue1, PROGRESS_HIGHEST);
|
||||
}
|
||||
else // login case
|
||||
{
|
||||
for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot)
|
||||
{
|
||||
uint32 teamId = GetPlayer()->GetArenaTeamId(arena_slot);
|
||||
if (!teamId)
|
||||
continue;
|
||||
|
||||
ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(teamId);
|
||||
if (!team || team->GetType() != reqTeamType)
|
||||
continue;
|
||||
|
||||
if (ArenaTeamMember const* member = team->GetMember(GetPlayer()->GetGUID()))
|
||||
{
|
||||
SetCriteriaProgress(achievementCriteria, member->PersonalRating, PROGRESS_HIGHEST);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1644,8 +1679,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
||||
return progress->counter >= achievementCriteria->own_item.itemCount;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA:
|
||||
return progress->counter >= achievementCriteria->win_rated_arena.count;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_REACH_TEAM_RATING:
|
||||
return progress->counter >= achievementCriteria->reach_team_rating.teamrating;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_HIGHEST_PERSONAL_RATING:
|
||||
return progress->counter >= achievementCriteria->highest_personal_rating.PersonalRating;
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILL_LEVEL:
|
||||
return progress->counter >= (achievementCriteria->learn_skill_level.skillLevel * 75);
|
||||
case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
|
||||
|
||||
Reference in New Issue
Block a user