diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 1bfd65a7f..d26c53cf0 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -462,6 +462,18 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui SetCriteriaProgress(achievementCriteria, reputation); break; } + case ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION: + { + uint32 counter = 0; + const FactionStateList factionStateList = GetPlayer()->GetFactionStateList(); + for (FactionStateList::const_iterator iter = factionStateList.begin(); iter!= factionStateList.end(); iter++) + { + if(GetPlayer()->ReputationToRank(iter->second.Standing) >= REP_EXALTED) + ++counter; + } + SetCriteriaProgress(achievementCriteria, counter); + } + } if(IsCompletedCriteria(achievementCriteria)) CompletedCriteria(achievementCriteria); @@ -553,6 +565,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return progress->counter >= achievementCriteria->visit_barber.numberOfVisits; case ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION: return progress->counter >= achievementCriteria->gain_reputation.reputationAmount; + case ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION: + return progress->counter >= achievementCriteria->gain_exalted_reputation.numberOfExaltedFactions; // handle all statistic-only criteria here case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 44cc37f4f..02a915e18 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -5692,6 +5692,7 @@ bool Player::ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 } } GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION); + GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION); SendFactionState(&(itr->second)); return true; @@ -5758,6 +5759,7 @@ bool Player::SetOneFactionReputation(FactionEntry const* factionEntry, int32 sta SendFactionState(&(itr->second)); GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION); + GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION); return true; } return false; diff --git a/src/game/Player.h b/src/game/Player.h index 50a7081b8..7354ffe56 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1715,6 +1715,7 @@ class MANGOS_DLL_SPEC Player : public Unit FactionStateList m_factions; ForcedReactions m_forcedReactions; + FactionStateList const& GetFactionStateList() { return m_factions; } uint32 GetDefaultReputationFlags(const FactionEntry *factionEntry) const; int32 GetBaseReputation(const FactionEntry *factionEntry) const; int32 GetReputation(uint32 faction_id) const;