aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp2
-rw-r--r--src/server/game/Battlegrounds/Battleground.h1
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp26
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
{