diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-29 17:32:12 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-29 17:32:12 +0200 |
commit | 3cb066f6fd496e137d44aade3dbe22c14ca564fc (patch) | |
tree | 626e3e5d927e4e7eb5fa1276fb8bd72bea8f7794 /src | |
parent | 88a3344c49a7bd7fdca40639e2cd2245a9c209cd (diff) | |
parent | 876e9dde01265edef31eb28167dd82797800bb1f (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Battlegrounds/ArenaScore.h
src/server/game/Battlegrounds/Battleground.cpp
src/server/game/Battlegrounds/BattlegroundScore.h
src/server/game/Handlers/MailHandler.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlegrounds/ArenaScore.h | 50 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 39 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.h | 54 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/BattlegroundScore.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/MailHandler.cpp | 4 |
5 files changed, 82 insertions, 67 deletions
diff --git a/src/server/game/Battlegrounds/ArenaScore.h b/src/server/game/Battlegrounds/ArenaScore.h index c3d6ee88dbf..6dad251d948 100644 --- a/src/server/game/Battlegrounds/ArenaScore.h +++ b/src/server/game/Battlegrounds/ArenaScore.h @@ -77,7 +77,7 @@ struct ArenaScore : public BattlegroundScore content << int32(primaryTree); - data.WriteBits(0, 24); // Objectives Count + BuildObjectivesBlock(data, content); data.WriteBit(PlayerGuid[4]); @@ -91,6 +91,11 @@ struct ArenaScore : public BattlegroundScore content.WriteByteSeq(PlayerGuid[2]); } + void BuildObjectivesBlock(WorldPacket& data, ByteBuffer& /*content*/) final + { + data.WriteBits(0, 24); // Objectives Count + } + // For Logging purpose std::string ToString() const override { @@ -99,48 +104,7 @@ struct ArenaScore : public BattlegroundScore return stream.str(); } - uint8 TeamId; // TEAM_ALLIANCE or TEAM_HORDE -}; - -struct ArenaTeamScore -{ - friend class Battleground; - - protected: - ArenaTeamScore() : RatingChange(0), MatchmakerRating(0) { } - - virtual ~ArenaTeamScore() { } - - void Assign(int32 ratingChange, uint32 matchMakerRating, std::string const& teamName) - { - RatingChange = ratingChange; - MatchmakerRating = matchMakerRating; - TeamName = teamName; - } - - void BuildRatingInfoBlock(WorldPacket& data) - { - uint32 ratingLost = std::abs(std::min(RatingChange, 0)); - uint32 ratingWon = std::max(RatingChange, 0); - - data << uint32(MatchmakerRating); - data << uint32(ratingLost); - data << uint32(ratingWon); - } - - void BuildTeamInfoLengthBlock(WorldPacket& data) - { - data.WriteBits(TeamName.length(), 8); - } - - void BuildTeamInfoBlock(WorldPacket& data) - { - data.WriteString(TeamName); - } - - int32 RatingChange; - uint32 MatchmakerRating; - std::string TeamName; + uint8 TeamId; // bgTeamId }; #endif // TRINITY_ARENA_SCORE_H diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index ce00fe5776d..1c21c221299 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -174,10 +174,6 @@ Battleground::Battleground() m_ArenaTeamMMR[TEAM_ALLIANCE] = 0; m_ArenaTeamMMR[TEAM_HORDE] = 0; - // Iterate this way for consistency's sake - client expects it to be sent in this order - for (int8 i = WINNER_ALLIANCE; i >= WINNER_HORDE; --i) - _arenaTeamScores[i] = new ArenaTeamScore(); - m_BgRaids[TEAM_ALLIANCE] = NULL; m_BgRaids[TEAM_HORDE] = NULL; @@ -229,10 +225,6 @@ Battleground::~Battleground() for (BattlegroundScoreMap::const_iterator itr = PlayerScores.begin(); itr != PlayerScores.end(); ++itr) delete itr->second; - - // Iterate this way for consistency's sake - client expects it to be sent in this order - for (int8 i = WINNER_ALLIANCE; i >= WINNER_HORDE; --i) - delete _arenaTeamScores[i]; } void Battleground::Update(uint32 diff) @@ -798,7 +790,7 @@ void Battleground::EndBattleground(uint32 winner) } else { - SetWinner(3); + SetWinner(3); // weird } SetStatus(STATUS_WAIT_LEAVE); @@ -827,11 +819,13 @@ void Battleground::EndBattleground(uint32 winner) SetArenaMatchmakerRating(winner, winnerMatchmakerRating + winnerMatchmakerChange); SetArenaMatchmakerRating(GetOtherTeam(winner), loserMatchmakerRating + loserMatchmakerChange); - uint8 winnerId = GetWinner(); - uint8 loserId = winnerId == WINNER_ALLIANCE ? uint8(WINNER_HORDE) : winnerId; + // bg team that the client expects is different to TeamId + // alliance 1, horde 0 + uint8 winnerTeam = winner == ALLIANCE ? WINNER_ALLIANCE : WINNER_HORDE; + uint8 loserTeam = winner == ALLIANCE ? WINNER_HORDE : WINNER_ALLIANCE; - _arenaTeamScores[winnerId]->Assign(winnerChange, winnerMatchmakerRating + winnerMatchmakerChange, winnerArenaTeam->GetName()); - _arenaTeamScores[loserId]->Assign(loserChange, loserMatchmakerRating + loserMatchmakerChange, loserArenaTeam->GetName()); + _arenaTeamScores[winnerTeam].Assign(winnerChange, winnerMatchmakerRating, winnerArenaTeam->GetName()); + _arenaTeamScores[loserTeam].Assign(loserChange, loserMatchmakerRating, loserArenaTeam->GetName()); TC_LOG_DEBUG("bg.arena", "Arena match Type: %u for Team1Id: %u - Team2Id: %u ended. WinnerTeamId: %u. Winner rating: +%d, Loser rating: %d", m_ArenaType, m_ArenaTeamIds[TEAM_ALLIANCE], m_ArenaTeamIds[TEAM_HORDE], winnerArenaTeam->GetId(), winnerChange, loserChange); if (sWorld->getBoolConfig(CONFIG_ARENA_LOG_EXTENDED_INFO)) @@ -846,8 +840,8 @@ void Battleground::EndBattleground(uint32 winner) // Deduct 16 points from each teams arena-rating if there are no winners after 45+2 minutes else { - _arenaTeamScores[WINNER_ALLIANCE]->Assign(ARENA_TIMELIMIT_POINTS_LOSS, winnerMatchmakerRating + winnerMatchmakerChange, winnerArenaTeam->GetName()); - _arenaTeamScores[WINNER_HORDE]->Assign(ARENA_TIMELIMIT_POINTS_LOSS, loserMatchmakerRating + loserMatchmakerChange, loserArenaTeam->GetName()); + _arenaTeamScores[WINNER_ALLIANCE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, winnerMatchmakerRating, winnerArenaTeam->GetName()); + _arenaTeamScores[WINNER_HORDE].Assign(ARENA_TIMELIMIT_POINTS_LOSS, loserMatchmakerRating, loserArenaTeam->GetName()); winnerArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS); loserArenaTeam->FinishGame(ARENA_TIMELIMIT_POINTS_LOSS); @@ -1165,6 +1159,9 @@ void Battleground::Reset() delete itr->second; PlayerScores.clear(); + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].Reset(); + ResetBGSubclass(); } @@ -1445,8 +1442,8 @@ void Battleground::BuildPvPLogDataPacket(WorldPacket& data) if (isArena()) { // it seems this must be according to BG_WINNER_A/H and _NOT_ TEAM_A/H - for (int8 i = WINNER_ALLIANCE; i >= WINNER_HORDE; --i) - _arenaTeamScores[i]->BuildTeamInfoLengthBlock(data); + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].BuildTeamInfoLengthBlock(data); } size_t countPos = data.bitwpos(); @@ -1460,8 +1457,8 @@ void Battleground::BuildPvPLogDataPacket(WorldPacket& data) if (isRated()) { // it seems this must be according to BG_WINNER_A/H and _NOT_ BG_TEAM_A/H - for (int8 i = WINNER_ALLIANCE; i >= WINNER_HORDE; --i) - _arenaTeamScores[i]->BuildRatingInfoBlock(data); + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].BuildRatingInfoBlock(data); } data.FlushBits(); @@ -1470,8 +1467,8 @@ void Battleground::BuildPvPLogDataPacket(WorldPacket& data) if (isArena()) { // it seems this must be according to BG_WINNER_A/H and _NOT_ TEAM_A/H - for (int8 i = WINNER_ALLIANCE; i >= WINNER_HORDE; --i) - _arenaTeamScores[i]->BuildTeamInfoBlock(data); + for (uint8 i = 0; i < BG_TEAMS_COUNT; ++i) + _arenaTeamScores[i].BuildTeamInfoBlock(data); } data << uint8(GetPlayersCountByTeam(HORDE)); diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 6845b0a8e92..9736ad9afa5 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -22,6 +22,7 @@ #include "Common.h" #include "SharedDefines.h" #include "DBCEnums.h" +#include "WorldPacket.h" class Creature; class GameObject; @@ -32,7 +33,6 @@ class WorldObject; class WorldPacket; class BattlegroundMap; -struct ArenaTeamScore; struct BattlegroundScore; struct Position; struct PvPDifficultyEntry; @@ -618,7 +618,57 @@ class Battleground uint32 m_ArenaTeamIds[BG_TEAMS_COUNT]; uint32 m_ArenaTeamMMR[BG_TEAMS_COUNT]; - ArenaTeamScore* _arenaTeamScores[BG_TEAMS_COUNT]; + + struct ArenaTeamScore + { + friend class Battleground; + + protected: + ArenaTeamScore() : RatingChange(0), MatchmakerRating(0) { } + + virtual ~ArenaTeamScore() { } + + void Assign(int32 ratingChange, uint32 matchMakerRating, std::string const& teamName) + { + RatingChange = ratingChange; + MatchmakerRating = matchMakerRating; + TeamName = teamName; + } + + void BuildRatingInfoBlock(WorldPacket& data) + { + uint32 ratingLost = std::abs(std::min(RatingChange, 0)); + uint32 ratingWon = std::max(RatingChange, 0); + + // should be old rating, new rating, and client will calculate rating change itself + data << uint32(MatchmakerRating); + data << uint32(ratingLost); + data << uint32(ratingWon); + } + + void BuildTeamInfoLengthBlock(WorldPacket& data) + { + data.WriteBits(TeamName.length(), 8); + } + + void BuildTeamInfoBlock(WorldPacket& data) + { + data.WriteString(TeamName); + } + + void Reset() + { + RatingChange = 0; + MatchmakerRating = 0; + TeamName.clear(); + } + + int32 RatingChange; + uint32 MatchmakerRating; + std::string TeamName; + }; + + ArenaTeamScore _arenaTeamScores[BG_TEAMS_COUNT]; // Limits uint32 m_LevelMin; diff --git a/src/server/game/Battlegrounds/BattlegroundScore.h b/src/server/game/Battlegrounds/BattlegroundScore.h index ab4bd4ab529..c532c8e8eb9 100644 --- a/src/server/game/Battlegrounds/BattlegroundScore.h +++ b/src/server/game/Battlegrounds/BattlegroundScore.h @@ -153,7 +153,7 @@ struct BattlegroundScore content.WriteByteSeq(PlayerGuid[2]); } - virtual void BuildObjectivesBlock(WorldPacket& /*data*/, ByteBuffer& /*content*/) { } + virtual void BuildObjectivesBlock(WorldPacket& /*data*/, ByteBuffer& /*content*/) = 0; // For Logging purpose virtual std::string ToString() const { return ""; } diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 10b7541f5dd..1359032080b 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -383,6 +383,10 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) if (guild->GetLevel() >= 17 && guild->IsMember(receiverGuid)) deliver_delay = 0; + // don't ask for COD if there are no items + if (items_count == 0) + COD = 0; + // will delete item or place to receiver mail list draft .AddMoney(money) |