aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent-Michael <Vincent_Michael@gmx.de>2015-08-02 16:20:01 +0200
committerVincent-Michael <Vincent_Michael@gmx.de>2015-08-02 16:20:01 +0200
commit4a08ff819c37c7d26b50b3ba2ae7fec878579c24 (patch)
tree647e8e2efefb674f37c99a2b725f324b4ded5943
parent681df2c1e9ef1c66e9387d32a9e8d642d2dcb023 (diff)
Core/PacketIO: Added and enabled CMSG_SET_PVP opcode
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp17
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp5
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h2
5 files changed, 35 insertions, 1 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index d9ca1ea9c71..4c93eb2c454 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -339,6 +339,23 @@ void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& /*packet*/)
}
}
+void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet)
+{
+ GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, packet.EnablePVP);
+ GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !packet.EnablePVP);
+
+ if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP))
+ {
+ if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer)
+ GetPlayer()->UpdatePvP(true, true);
+ }
+ else
+ {
+ if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP())
+ GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start set-off
+ }
+}
+
void WorldSession::HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& /*packet*/)
{
if (GetPlayer()->IsAlive() || !GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST))
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 9b1bc42ff08..7c45810bc13 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -540,3 +540,8 @@ WorldPacket const* WorldPackets::Misc::SetPlayHoverAnim::Write()
return &_worldPacket;
}
+
+void WorldPackets::Misc::SetPvP::Read()
+{
+ EnablePVP = _worldPacket.ReadBit();
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index f90e89f1eb2..ea1d32b73cc 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -702,6 +702,16 @@ namespace WorldPackets
void Read() override { }
};
+
+ class SetPvP final : public ClientPacket
+ {
+ public:
+ SetPvP(WorldPacket&& packet) : ClientPacket(CMSG_SET_PVP, std::move(packet)) { }
+
+ void Read() override;
+
+ bool EnablePVP = false;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 5233a243342..511a668363b 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -733,7 +733,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SET_PET_SLOT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SET_PLAYER_DECLINED_NAMES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPlayerDeclinedNames );
DEFINE_HANDLER(CMSG_SET_PREFERRED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_SET_PVP, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_SET_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetPvP, &WorldSession::HandleSetPvP);
DEFINE_HANDLER(CMSG_SET_RAID_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::SetRaidDifficulty, &WorldSession::HandleSetRaidDifficultyOpcode);
DEFINE_HANDLER(CMSG_SET_ROLE, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Party::SetRole, &WorldSession::HandleSetRoleOpcode);
DEFINE_HANDLER(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Calendar::SetSavedInstanceExtend, &WorldSession::HandleSetSavedInstanceExtend);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index fabf4461fb2..cf2848a2799 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -368,6 +368,7 @@ namespace WorldPackets
class SaveCUFProfiles;
class OpeningCinematic;
class TogglePvP;
+ class SetPvP;
}
namespace Movement
@@ -1062,6 +1063,7 @@ class WorldSession
void HandleBugReportOpcode(WorldPackets::Ticket::BugReport& bugReport);
void HandleTogglePvP(WorldPackets::Misc::TogglePvP& packet);
+ void HandleSetPvP(WorldPackets::Misc::SetPvP& packet);
void HandleSetSelectionOpcode(WorldPackets::Misc::SetSelection& packet);
void HandleStandStateChangeOpcode(WorldPackets::Misc::StandStateChange& packet);