aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-05-31 16:49:18 +0200
committerShauren <shauren.trinity@gmail.com>2020-05-31 16:49:18 +0200
commitbf8714b8705c3fccc77083c6dc8665767430d346 (patch)
tree7abe8a79f1849b7d5299dd784b8ace6d78f6311e /src/server/game/Server
parent161944b7643c62f9e7705c64e42d42e5d07f1959 (diff)
Core/Battlegrounds: Queue updates
* Fixed battleground queues for battlegrounds with id higher than 255 * Fixed queue display ingame after entering bg * Fixed ingame display after leaving bg queue * Fixed bg scoreboard
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp53
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h53
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h6
-rw-r--r--src/server/game/Server/WorldSession.cpp3
5 files changed, 98 insertions, 21 deletions
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 1b974829633..0d0325644ba 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -114,19 +114,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
return data;
}
-WorldPacket const* WorldPackets::Battleground::PVPLogData::Write()
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData const& pvpLogData)
{
- _worldPacket.reserve(Statistics.size() * sizeof(PVPMatchPlayerStatistics) + sizeof(PVPLogData));
+ data.WriteBit(pvpLogData.Ratings.is_initialized());
+ data << uint32(pvpLogData.Statistics.size());
+ data.append(pvpLogData.PlayerCount.data(), pvpLogData.PlayerCount.size());
- _worldPacket.WriteBit(Ratings.is_initialized());
- _worldPacket << uint32(Statistics.size());
- _worldPacket.append(PlayerCount.data(), PlayerCount.size());
+ if (pvpLogData.Ratings.is_initialized())
+ data << *pvpLogData.Ratings;
- if (Ratings.is_initialized())
- _worldPacket << *Ratings;
+ for (WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics const& player : pvpLogData.Statistics)
+ data << player;
- for (PVPMatchPlayerStatistics const& player : Statistics)
- _worldPacket << player;
+ return data;
+}
+
+WorldPacket const* WorldPackets::Battleground::PVPLogDataMessage::Write()
+{
+ _worldPacket.reserve(Data.Statistics.size() * sizeof(PVPLogData::PVPMatchPlayerStatistics) + sizeof(PVPLogData));
+
+ _worldPacket << Data;
return &_worldPacket;
}
@@ -299,3 +306,31 @@ WorldPacket const* WorldPackets::Battleground::DestroyArenaUnit::Write()
_worldPacket << Guid;
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Battleground::PVPMatchInit::Write()
+{
+ _worldPacket << uint32(MapID);
+ _worldPacket << uint8(State);
+ _worldPacket << int32(StartTime);
+ _worldPacket << int32(Duration);
+ _worldPacket << uint8(ArenaFaction);
+ _worldPacket << uint32(BattlemasterListID);
+ _worldPacket.WriteBit(Registered);
+ _worldPacket.WriteBit(AffectsRating);
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Battleground::PVPMatchEnd::Write()
+{
+ _worldPacket << uint8(Winner);
+ _worldPacket << int32(Duration);
+ _worldPacket.WriteBit(LogData.is_initialized());
+ _worldPacket.FlushBits();
+
+ if (LogData)
+ _worldPacket << *LogData;
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 6914dfef818..59c49dcc8b9 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -90,13 +90,8 @@ namespace WorldPackets
void Read() override { }
};
- class PVPLogData final : public ServerPacket
+ struct PVPLogData
{
- public:
- PVPLogData() : ServerPacket(SMSG_PVP_LOG_DATA, 0) { }
-
- WorldPacket const* Write() override;
-
struct RatingData
{
int32 Prematch[2] = { };
@@ -147,6 +142,16 @@ namespace WorldPackets
std::array<int8, 2> PlayerCount = { };
};
+ class PVPLogDataMessage final : public ServerPacket
+ {
+ public:
+ PVPLogDataMessage() : ServerPacket(SMSG_PVP_LOG_DATA, 0) { }
+
+ WorldPacket const* Write() override;
+
+ PVPLogData Data;
+ };
+
struct BattlefieldStatusHeader
{
WorldPackets::LFG::RideTicket Ticket;
@@ -418,6 +423,42 @@ namespace WorldPackets
void Read() override { }
};
+
+ class PVPMatchInit final : public ServerPacket
+ {
+ public:
+ PVPMatchInit() : ServerPacket(SMSG_PVP_MATCH_INIT, 4 + 1 + 4 + 4 + 1 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ enum MatchState : uint8
+ {
+ InProgress = 1,
+ Complete = 3,
+ Inactive = 4
+ };
+
+ uint32 MapID = 0;
+ MatchState State = Inactive;
+ time_t StartTime = time_t(0);
+ int32 Duration = 0;
+ uint8 ArenaFaction = 0;
+ uint32 BattlemasterListID = 0;
+ bool Registered = false;
+ bool AffectsRating = false;
+ };
+
+ class PVPMatchEnd final : public ServerPacket
+ {
+ public:
+ PVPMatchEnd() : ServerPacket(SMSG_PVP_MATCH_END) { }
+
+ WorldPacket const* Write() override;
+
+ uint8 Winner = 0;
+ int32 Duration = 0;
+ Optional<PVPLogData> LogData;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index a8f0be7874e..521ba8a8407 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -925,8 +925,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CROWD_CONTROL_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_MATCH_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_MATCH_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_FORGE_OPENED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_RESPEC_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1637,6 +1635,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PUSH_SPELL_TO_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_END, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_INIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 2c90b66c0db..8b73a6fc26a 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -825,8 +825,6 @@ enum OpcodeServer : uint16
SMSG_AREA_TRIGGER_RE_PATH = 0x263F,
SMSG_AREA_TRIGGER_RE_SHAPE = 0x2644,
SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2652,
- SMSG_ARENA_MATCH_END = 0x28A7,
- SMSG_ARENA_MATCH_START = 0x28A6,
SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2668,
SMSG_ARTIFACT_FORGE_OPENED = 0x27E8,
SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27EB,
@@ -1543,7 +1541,9 @@ enum OpcodeServer : uint16
SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51,
SMSG_PVP_CREDIT = 0x271F,
SMSG_PVP_LOG_DATA = 0x25B4,
- SMSG_PVP_MATCH_START = 0x28AC,
+ SMSG_PVP_MATCH_END = 0x28A7,
+ SMSG_PVP_MATCH_INIT = 0x28AC,
+ SMSG_PVP_MATCH_START = 0x28A6,
SMSG_PVP_OPTIONS_ENABLED = 0x25B7,
SMSG_PVP_SEASON = 0x25D4,
SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270E,
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 0b7c1583faf..1618267d420 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -541,7 +541,8 @@ void WorldSession::LogoutPlayer(bool save)
for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; ++i)
{
- if (BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(i))
+ BattlegroundQueueTypeId bgQueueTypeId = _player->GetBattlegroundQueueTypeId(i);
+ if (bgQueueTypeId != BATTLEGROUND_QUEUE_NONE)
{
_player->RemoveBattlegroundQueueId(bgQueueTypeId);
BattlegroundQueue& queue = sBattlegroundMgr->GetBattlegroundQueue(bgQueueTypeId);