diff --git a/src/game/ReputationMgr.cpp b/src/game/ReputationMgr.cpp index 872bc06f2..354389279 100644 --- a/src/game/ReputationMgr.cpp +++ b/src/game/ReputationMgr.cpp @@ -217,7 +217,7 @@ void ReputationMgr::Initilize() } } -bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standing) +bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental) { SimpleFactionsList const* flist = GetFactionTeamList(factionEntry->ID); if (flist) @@ -227,26 +227,29 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi { FactionEntry const *factionEntryCalc = sFactionStore.LookupEntry(*itr); if(factionEntryCalc) - res = SetOneFactionReputation(factionEntryCalc, standing); + res = SetOneFactionReputation(factionEntryCalc, standing, incremental); } return res; } else - return SetOneFactionReputation(factionEntry, standing); + return SetOneFactionReputation(factionEntry, standing, incremental); } -bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing) +bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental) { FactionStateList::iterator itr = m_factions.find(factionEntry->reputationListID); if (itr != m_factions.end()) { + int32 BaseRep = GetBaseReputation(factionEntry); + + if(incremental) + standing += itr->second.Standing + BaseRep; + if (standing > Reputation_Cap) standing = Reputation_Cap; - else - if (standing < Reputation_Bottom) - standing = Reputation_Bottom; + else if (standing < Reputation_Bottom) + standing = Reputation_Bottom; - int32 BaseRep = GetBaseReputation(factionEntry); itr->second.Standing = standing - BaseRep; itr->second.Changed = true; @@ -258,57 +261,7 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in SendState(&itr->second); m_player->ReputationChanged(factionEntry); - m_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION,factionEntry->ID); - m_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION,factionEntry->ID); - return true; - } - return false; -} - -bool ReputationMgr::ModifyReputation(FactionEntry const* factionEntry, int32 standing) -{ - SimpleFactionsList const* flist = GetFactionTeamList(factionEntry->ID); - if (flist) - { - bool res = false; - for (SimpleFactionsList::const_iterator itr = flist->begin();itr != flist->end();++itr) - { - FactionEntry const *factionEntryCalc = sFactionStore.LookupEntry(*itr); - if(factionEntryCalc) - res = ModifyOneFactionReputation(factionEntryCalc, standing); - } - return res; - } - else - return ModifyOneFactionReputation(factionEntry, standing); -} - -bool ReputationMgr::ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing) -{ - FactionStateList::iterator itr = m_factions.find(factionEntry->reputationListID); - if (itr != m_factions.end()) - { - int32 BaseRep = GetBaseReputation(factionEntry); - int32 new_rep = BaseRep + itr->second.Standing + standing; - - if (new_rep > Reputation_Cap) - new_rep = Reputation_Cap; - else - if (new_rep < Reputation_Bottom) - new_rep = Reputation_Bottom; - - if(ReputationToRank(new_rep) <= REP_HOSTILE) - SetAtWar(&itr->second,true); - - itr->second.Standing = new_rep - BaseRep; - itr->second.Changed = true; - - SetVisible(&itr->second); - SendState(&itr->second); - - m_player->ReputationChanged(factionEntry); - - m_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION,factionEntry->ID); + m_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID); m_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION,factionEntry->ID); return true; diff --git a/src/game/ReputationMgr.h b/src/game/ReputationMgr.h index edc60edfd..99a1361ab 100644 --- a/src/game/ReputationMgr.h +++ b/src/game/ReputationMgr.h @@ -95,8 +95,14 @@ class ReputationMgr } public: // modifiers - bool SetReputation(FactionEntry const* factionEntry, int32 standing); - bool ModifyReputation(FactionEntry const* factionEntry, int32 standing); + bool SetReputation(FactionEntry const* factionEntry, int32 standing) + { + return SetReputation(factionEntry, standing, false); + } + bool ModifyReputation(FactionEntry const* factionEntry, int32 standing) + { + return SetReputation(factionEntry, standing, true); + } void SetVisible(FactionTemplateEntry const* factionTemplateEntry); void SetVisible(FactionEntry const* factionEntry); @@ -114,12 +120,13 @@ class ReputationMgr private: // internal helper functions void Initilize(); uint32 GetDefaultStateFlags(const FactionEntry *factionEntry) const; - bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing); - bool ModifyOneFactionReputation(FactionEntry const* factionEntry, int32 standing); + bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental); + bool SetOneFactionReputation(FactionEntry const* factionEntry, int32 standing, bool incremental); void SetVisible(FactionState* faction); void SetAtWar(FactionState* faction, bool atWar); void SetInactive(FactionState* faction, bool inactive); void SendVisible(FactionState const* faction) const; + void UpdateRankCounters( ReputationRank old_rank, ReputationRank new_rank ); private: Player* m_player; FactionStateList m_factions; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 46cde255f..859dce3be 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7542" + #define REVISION_NR "7543" #endif // __REVISION_NR_H__