diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.h | 1 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 26 |
3 files changed, 23 insertions, 6 deletions
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index e6012313c68..cbeeddb985b 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1190,10 +1190,12 @@ void Battleground::AddPlayer(Player* player) uint64 guid = player->GetGUID(); uint32 team = player->GetBGTeam(); + int32 primaryTree = player->GetPrimaryTalentTree(player->GetActiveSpec()); BattlegroundPlayer bp; bp.OfflineRemoveTime = 0; bp.Team = team; + bp.PrimaryTree = primaryTree; // Add to list/maps m_Players[guid] = bp; diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index 7f166b92f80..64b1d80e095 100644 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -160,6 +160,7 @@ struct BattlegroundPlayer { time_t OfflineRemoveTime; // for tracking and removing offline players from queue after 5 minutes uint32 Team; // Player's team + int32 PrimaryTree; // Player's primary tree }; struct BattlegroundObjectInfo diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 8accb93f0f0..ab7cab504c8 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -379,6 +379,7 @@ void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg) size_t count_pos = data->bitwpos(); data->WriteBits(0, 21); uint32 count = 0; + BattlegroundPlayerMap const& bgPlayers = bg->GetPlayers(); for (Battleground::BattlegroundScoreMap::const_iterator itr = bg->GetPlayerScoresBegin(); itr != bg->GetPlayerScoresEnd(); ++itr) { if (!bg->IsPlayerInBattleground(itr->first)) @@ -387,11 +388,24 @@ void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg) continue; } - Player* player = ObjectAccessor::FindPlayer(itr->first); - if (!player) + uint32 team; + int32 primaryTree; + if (Player* player = ObjectAccessor::FindPlayer(itr->first)) { - TC_LOG_ERROR(LOG_FILTER_BATTLEGROUND, "Player " UI64FMTD " has scoreboard entry for battleground %u but is not in world!", itr->first, bg->GetTypeID(true)); - continue; + team = player->GetBGTeam(); + primaryTree = player->GetPrimaryTalentTree(player->GetActiveSpec()); + } + else + { + BattlegroundPlayerMap::const_iterator itr2 = bgPlayers.find(itr->first); + if (itr2 == bgPlayers.end()) + { + TC_LOG_ERROR(LOG_FILTER_BATTLEGROUND, "Player " UI64FMTD " has scoreboard entry for battleground %u but do not have battleground data!", itr->first, bg->GetTypeID(true)); + continue; + } + + team = itr2->second.Team; + primaryTree = itr2->second.PrimaryTree; } ObjectGuid playerGUID = itr->first; @@ -409,7 +423,7 @@ void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg) data->WriteBit(playerGUID[5]); data->WriteBit(playerGUID[1]); data->WriteBit(playerGUID[6]); - data->WriteBit(player->GetBGTeam() == HORDE ? 0 : 1); + data->WriteBit(team == HORDE ? 0 : 1); data->WriteBit(playerGUID[7]); buff << uint32(score->HealingDone); // healing done @@ -431,7 +445,7 @@ void BattlegroundMgr::BuildPvpLogDataPacket(WorldPacket* data, Battleground* bg) buff.WriteByteSeq(playerGUID[1]); buff.WriteByteSeq(playerGUID[6]); - buff << int32(player->GetPrimaryTalentTree(player->GetActiveSpec())); + buff << int32(primaryTree); switch (bg->GetTypeID(true)) // Custom values { |