diff options
| author | Jeremy <Golrag@users.noreply.github.com> | 2022-02-26 19:01:00 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-26 19:01:00 +0100 |
| commit | 19f64e66e58d3d7ebed6437a474a134e7c673ed6 (patch) | |
| tree | 26c5dac813d3400ea4a52e24b1b863db8ebed8a0 /src/server/game/Server | |
| parent | ee835671b4f572f92f79c9b302764ee591c6de11 (diff) | |
Core/GameObjects: Implemented GAMEOBJECT_TYPE_CAPTURE_POINT (#27034)
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/BattlegroundPackets.h | 39 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 6 |
3 files changed, 69 insertions, 3 deletions
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 08ac3bd490d..1c8abe81261 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -373,3 +373,30 @@ WorldPacket const* WorldPackets::Battleground::PVPMatchComplete::Write() return &_worldPacket; } + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::BattlegroundCapturePointInfo const& battlegroundCapturePointInfo) +{ + data << battlegroundCapturePointInfo.Guid; + data << battlegroundCapturePointInfo.Pos; + data << int8(battlegroundCapturePointInfo.State); + + if (battlegroundCapturePointInfo.State == WorldPackets::Battleground::BattlegroundCapturePointState::ContestedHorde || battlegroundCapturePointInfo.State == WorldPackets::Battleground::BattlegroundCapturePointState::ContestedAlliance) + { + data << battlegroundCapturePointInfo.CaptureTime; + data << battlegroundCapturePointInfo.CaptureTotalDuration; + } + + return data; +} + +WorldPacket const* WorldPackets::Battleground::UpdateCapturePoint::Write() +{ + _worldPacket << CapturePointInfo; + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Battleground::CapturePointRemoved::Write() +{ + _worldPacket << CapturePointGUID; + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index f5af61fe805..fcc98786fa6 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -498,6 +498,45 @@ namespace WorldPackets Optional<PVPMatchStatistics> LogData; uint32 SoloShuffleStatus = 0; }; + + enum class BattlegroundCapturePointState : uint8 + { + Neutral = 1, + ContestedHorde = 2, + ContestedAlliance = 3, + HordeCaptured = 4, + AllianceCaptured = 5 + }; + + struct BattlegroundCapturePointInfo + { + ObjectGuid Guid; + TaggedPosition<Position::XY> Pos; + BattlegroundCapturePointState State = BattlegroundCapturePointState::Neutral; + Timestamp<> CaptureTime; + Duration<Milliseconds, uint32> CaptureTotalDuration; + }; + + class UpdateCapturePoint final : public ServerPacket + { + public: + UpdateCapturePoint() : ServerPacket(SMSG_UPDATE_CAPTURE_POINT) { } + + WorldPacket const* Write() override; + + BattlegroundCapturePointInfo CapturePointInfo; + }; + + class CapturePointRemoved final : public ServerPacket + { + public: + CapturePointRemoved() : ServerPacket(SMSG_CAPTURE_POINT_REMOVED) { } + CapturePointRemoved(ObjectGuid capturePointGUID) : ServerPacket(SMSG_CAPTURE_POINT_REMOVED), CapturePointGUID(capturePointGUID) { } + + WorldPacket const* Write() override; + + ObjectGuid CapturePointGUID; + }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 939309c5bfc..5f932030f3f 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1107,7 +1107,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL_KIT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_DUEL_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATEGORY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAIN_MISSILE_BOUNCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1272,7 +1272,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_BASE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_CUSTOM_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_DESPAWN, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_RESET_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_SET_STATE_LOCAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2004,7 +2004,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACCOUNT_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_ACTION_BUTTONS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_BNET_SESSION_KEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CAPTURE_POINT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CAPTURE_POINT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CELESTIAL_BODY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CHARACTER_FLAGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); |
