aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp7
-rw-r--r--src/server/game/Reputation/ReputationMgr.h8
3 files changed, 13 insertions, 10 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c667d6ecbe1..8e253ba6fa6 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -6770,8 +6770,8 @@ void Player::RewardReputation(Unit* victim, float rate)
FactionEntry const* factionEntry1 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->RepFaction1);
uint32 current_reputation_rank1 = GetReputationMgr().GetRank(factionEntry1);
- if (factionEntry1 && current_reputation_rank1 <= Rep->ReputationMaxCap1)
- GetReputationMgr().ModifyReputation(factionEntry1, donerep1);
+ if (factionEntry1)
+ GetReputationMgr().ModifyReputation(factionEntry1, donerep1, current_reputation_rank1 > Rep->ReputationMaxCap1);
}
if (Rep->RepFaction2 && (!Rep->TeamDependent || team == HORDE))
@@ -6781,8 +6781,8 @@ void Player::RewardReputation(Unit* victim, float rate)
FactionEntry const* factionEntry2 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->RepFaction2);
uint32 current_reputation_rank2 = GetReputationMgr().GetRank(factionEntry2);
- if (factionEntry2 && current_reputation_rank2 <= Rep->ReputationMaxCap2)
- GetReputationMgr().ModifyReputation(factionEntry2, donerep2);
+ if (factionEntry2)
+ GetReputationMgr().ModifyReputation(factionEntry2, donerep2, current_reputation_rank2 > Rep->ReputationMaxCap2);
}
}
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index 325c1e9dd36..b0c7538da05 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -285,7 +285,7 @@ void ReputationMgr::Initialize()
}
}
-bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental)
+bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly)
{
sScriptMgr->OnPlayerReputationChange(_player, factionEntry->ID, standing, incremental);
bool res = false;
@@ -349,7 +349,10 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi
FactionStateList::iterator faction = _factions.find(factionEntry->reputationListID);
if (faction != _factions.end())
{
- res = SetOneFactionReputation(factionEntry, standing, incremental);
+ // if we update spillover only, do not update main reputation (rank exceeds creature reward rate)
+ if (!spillOverOnly)
+ res = SetOneFactionReputation(factionEntry, standing, incremental);
+
// only this faction gets reported to client, even if it has no own visible standing
SendState(&faction->second);
}
diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h
index 8ab83e1e50d..b3e71c3a0a7 100644
--- a/src/server/game/Reputation/ReputationMgr.h
+++ b/src/server/game/Reputation/ReputationMgr.h
@@ -118,11 +118,11 @@ class TC_GAME_API ReputationMgr
public: // modifiers
bool SetReputation(FactionEntry const* factionEntry, int32 standing)
{
- return SetReputation(factionEntry, standing, false);
+ return SetReputation(factionEntry, standing, false, false);
}
- bool ModifyReputation(FactionEntry const* factionEntry, int32 standing)
+ bool ModifyReputation(FactionEntry const* factionEntry, int32 standing, bool spillOverOnly = false)
{
- return SetReputation(factionEntry, standing, true);
+ return SetReputation(factionEntry, standing, true, spillOverOnly);
}
void SetVisible(FactionTemplateEntry const* factionTemplateEntry);
@@ -144,7 +144,7 @@ class TC_GAME_API ReputationMgr
private: // internal helper functions
void Initialize();
uint32 GetDefaultStateFlags(FactionEntry const* factionEntry) const;
- bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental);
+ bool SetReputation(FactionEntry const* factionEntry, int32 standing, bool incremental, bool spillOverOnly);
void SetVisible(FactionState* faction);
void SetAtWar(FactionState* faction, bool atWar) const;
void SetInactive(FactionState* faction, bool inactive) const;