diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.h | 11 |
2 files changed, 45 insertions, 3 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3300aab3ee..de41ed4433 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -665,17 +665,48 @@ void Battleground::RewardHonorToTeam(uint32 honor, TeamId teamId) void Battleground::RewardReputationToTeam(uint32 factionId, uint32 reputation, TeamId teamId) { - if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId)) for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) if (itr->second->GetBgTeamId() == teamId) { + uint32 realFactionId = GetRealRepFactionForPlayer(factionId, itr->second); + uint32 repGain = reputation; AddPct(repGain, itr->second->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN)); - AddPct(repGain, itr->second->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, factionId)); - itr->second->GetReputationMgr().ModifyReputation(factionEntry, repGain); + AddPct(repGain, itr->second->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, realFactionId)); + if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(realFactionId)) + itr->second->GetReputationMgr().ModifyReputation(factionEntry, repGain); + } +} + +uint32 Battleground::GetRealRepFactionForPlayer(uint32 factionId, Player* player) +{ + if (player) + { + // if the bg team is not the original team, reverse reputation + if (player->GetBgTeamId() != player->GetTeamId(true)) + { + switch (factionId) + { + case BG_REP_AB_ALLIANCE: + return BG_REP_AB_HORDE; + case BG_REP_AB_HORDE: + return BG_REP_AB_ALLIANCE; + case BG_REP_AV_ALLIANCE: + return BG_REP_AV_HORDE; + case BG_REP_AV_HORDE: + return BG_REP_AV_ALLIANCE; + case BG_REP_WS_ALLIANCE: + return BG_REP_WS_HORDE; + case BG_REP_WS_HORDE: + return BG_REP_WS_ALLIANCE; } + } + } + + return factionId; } + void Battleground::UpdateWorldState(uint32 Field, uint32 Value) { WorldPacket data; diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 3aaa88fec1..9e86d69969 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -116,6 +116,16 @@ enum BattlegroundSpells SPELL_THE_LAST_STANDING = 26549, // Arena achievement related }; +enum BattlegroundReputations +{ + BG_REP_AV_HORDE = 729, + BG_REP_AV_ALLIANCE = 730, + BG_REP_AB_HORDE = 510, + BG_REP_AB_ALLIANCE = 509, + BG_REP_WS_HORDE = 889, + BG_REP_WS_ALLIANCE = 890, +}; + enum BattlegroundTimeIntervals { CHECK_PLAYER_POSITION_INVERVAL = 9000, // ms @@ -453,6 +463,7 @@ class Battleground void RemoveAuraOnTeam(uint32 spellId, TeamId teamId); void RewardHonorToTeam(uint32 honor, TeamId teamId); void RewardReputationToTeam(uint32 factionId, uint32 reputation, TeamId teamId); + uint32 GetRealRepFactionForPlayer(uint32 factionId, Player* player); void UpdateWorldState(uint32 Field, uint32 Value); void UpdateWorldStateForPlayer(uint32 Field, uint32 Value, Player* player); |