diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 13 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
4 files changed, 25 insertions, 10 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 8a7250061cd..a5f8b7a2da7 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -442,15 +442,13 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPacket& /*recvData*/) } } -void WorldSession::HandleTogglePvP(WorldPacket& recvData) +void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& togglePvP) { // this opcode can be used in two ways: Either set explicit new status or toggle old status - if (recvData.size() == 1) + if (togglePvP.Enable) { - bool newPvPStatus; - recvData >> newPvPStatus; - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, newPvPStatus); - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !newPvPStatus); + GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, *togglePvP.Enable); + GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !*togglePvP.Enable); } else { @@ -468,9 +466,6 @@ void WorldSession::HandleTogglePvP(WorldPacket& recvData) if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off } - - //if (OutdoorPvP* pvp = _player->GetOutdoorPvP()) - // pvp->HandlePlayerActivityChanged(_player); } void WorldSession::HandleZoneUpdateOpcode(WorldPacket& recvData) diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 879449ec031..bfd279bbd68 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -188,6 +188,12 @@ WorldPacket const* WorldPackets::Misc::UITime::Write() return &_worldPacket; } +void WorldPackets::Misc::TogglePvP::Read() +{ + if (HasPvPStatus()) + _worldPacket >> *Enable; +} + void WorldPackets::Misc::WorldTeleport::Read() { _worldPacket >> Time; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 6e9d9858b50..7478061850a 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "Position.h" #include "ObjectGuid.h" +#include "Optional.h" #include "Weather.h" enum WeatherState : uint32; @@ -297,6 +298,18 @@ namespace WorldPackets ObjectGuid Roller; }; + class TogglePvP final : public ClientPacket + { + public: + TogglePvP(WorldPacket&& packet) : ClientPacket(CMSG_TOGGLE_PVP, std::move(packet)) { } + + void Read() override; + + bool HasPvPStatus() const { return GetSize() == 1; } + + Optional<bool> Enable; + }; + class UITime final : public ServerPacket { public: diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7ff716f838d..1621ba03de7 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -141,6 +141,7 @@ namespace WorldPackets class NextCinematicCamera; class OpeningCinematic; class RandomRollClient; + class TogglePvP; class WorldTeleport; } @@ -631,7 +632,7 @@ class TC_GAME_API WorldSession void HandleReportLag(WorldPacket& recvPacket); void HandleGMResponseResolve(WorldPacket& recvPacket); - void HandleTogglePvP(WorldPacket& recvPacket); + void HandleTogglePvP(WorldPackets::Misc::TogglePvP& togglePvP); void HandleZoneUpdateOpcode(WorldPacket& recvPacket); void HandleSetSelectionOpcode(WorldPacket& recvPacket); |