aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-04-26 23:10:07 +0300
committerGitHub <noreply@github.com>2020-04-26 22:10:07 +0200
commit332b2f1f538e830701e48d8f1574911149c59619 (patch)
treee13453304e212bf8bdbd90f4075b9eb00b63a71e /src
parent84c91cdef9185527ef3f856e185d5c7acf8be8b8 (diff)
Core/PacketIO: updated CMSG_TOGGLE_PVP opcode (#24476)
* Core/PacketIO: updated CMSG_TOGGLE_PVP opcode * Use Optional<T>. Restore ApplyModFlag() code. * Fix no-pch build Co-authored-by: jackpoz <giacomopoz@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp13
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h13
-rw-r--r--src/server/game/Server/WorldSession.h3
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);