aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Reputation/ReputationMgr.cpp26
-rwxr-xr-xsrc/server/game/Reputation/ReputationMgr.h1
2 files changed, 17 insertions, 10 deletions
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index b1f38dfb86d..2a50f6e3c85 100755
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -166,15 +166,16 @@ void ReputationMgr::SendState(FactionState const* faction)
{
uint32 count = 1;
- WorldPacket data(SMSG_SET_FACTION_STANDING, (16)); // last check 2.4.0
- data << (float) 0; // unk 2.4.0
- data << (uint8) 0; // wotlk 8634
+ WorldPacket data(SMSG_SET_FACTION_STANDING, 17);
+ data << float(0);
+ data << uint8(_sendFactionIncreased);
+ _sendFactionIncreased = false; // Reset
size_t p_count = data.wpos();
- data << (uint32) count; // placeholder
+ data << uint32(count);
- data << (uint32) faction->ReputationListID;
- data << (uint32) faction->Standing;
+ data << uint32(faction->ReputationListID);
+ data << uint32(faction->Standing);
for (FactionStateList::iterator itr = _factions.begin(); itr != _factions.end(); ++itr)
{
@@ -183,8 +184,8 @@ void ReputationMgr::SendState(FactionState const* faction)
itr->second.needSend = false;
if (itr->second.ReputationListID != faction->ReputationListID)
{
- data << (uint32) itr->second.ReputationListID;
- data << (uint32) itr->second.Standing;
+ data << uint32(itr->second.ReputationListID);
+ data << uint32(itr->second.Standing);
++count;
}
}
@@ -253,6 +254,7 @@ void ReputationMgr::Initialize()
_honoredFactionCount = 0;
_reveredFactionCount = 0;
_exaltedFactionCount = 0;
+ _sendFactionIncreased = false;
for (unsigned int i = 1; i < sFactionStore.GetNumRows(); i++)
{
@@ -337,6 +339,7 @@ bool ReputationMgr::SetReputation(FactionEntry const* factionEntry, int32 standi
}
}
}
+
// spillover done, update faction itself
FactionStateList::iterator faction = _factions.find(factionEntry->reputationListID);
if (faction != _factions.end())
@@ -379,11 +382,14 @@ bool ReputationMgr::SetOneFactionReputation(FactionEntry const* factionEntry, in
if (new_rank <= REP_HOSTILE)
SetAtWar(&itr->second, true);
+ if (new_rank > old_rank)
+ _sendFactionIncreased = true;
+
UpdateRankCounters(old_rank, new_rank);
_player->ReputationChanged(factionEntry);
- _player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS, factionEntry->ID);
- _player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID);
+ _player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KNOWN_FACTIONS, factionEntry->ID);
+ _player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REPUTATION, factionEntry->ID);
_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_EXALTED_REPUTATION, factionEntry->ID);
_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_REVERED_REPUTATION, factionEntry->ID);
_player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GAIN_HONORED_REPUTATION, factionEntry->ID);
diff --git a/src/server/game/Reputation/ReputationMgr.h b/src/server/game/Reputation/ReputationMgr.h
index 84013f7ec20..401503783b9 100755
--- a/src/server/game/Reputation/ReputationMgr.h
+++ b/src/server/game/Reputation/ReputationMgr.h
@@ -156,6 +156,7 @@ class ReputationMgr
uint8 _honoredFactionCount :8;
uint8 _reveredFactionCount :8;
uint8 _exaltedFactionCount :8;
+ bool _sendFactionIncreased; //! Play visual effect on next SMSG_SET_FACTION_STANDING sent
};
#endif