aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-09-14 00:11:06 +0200
committerShauren <shauren.trinity@gmail.com>2023-09-14 00:11:06 +0200
commitc2f5ce2b0333a9bda341ea837340dd3ac4b19ae8 (patch)
tree15a8bacce27533a2ebaa85ec2aa31c22eabccc94 /src/server/game/Server
parent097b5f3ec00f18161c9d616f60ed762eb722bde0 (diff)
Core/Groups: Implemented 10.1.7 ping system
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp54
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h76
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp12
-rw-r--r--src/server/game/Server/WorldSession.h6
4 files changed, 142 insertions, 6 deletions
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index 1e181cdeb82..ac9fbd7d0d7 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -728,3 +728,57 @@ WorldPacket const* WorldPackets::Party::BroadcastSummonResponse::Write()
return &_worldPacket;
}
+
+void WorldPackets::Party::SetRestrictPingsToAssistants::Read()
+{
+ bool hasPartyIndex = _worldPacket.ReadBit();
+ RestrictPingsToAssistants = _worldPacket.ReadBit();
+ if (hasPartyIndex)
+ _worldPacket >> PartyIndex.emplace();
+}
+
+void WorldPackets::Party::SendPingUnit::Read()
+{
+ _worldPacket >> SenderGUID;
+ _worldPacket >> TargetGUID;
+ Type = _worldPacket.read<PingSubjectType, uint8>();
+ _worldPacket >> PinFrameID;
+}
+
+WorldPacket const* WorldPackets::Party::ReceivePingUnit::Write()
+{
+ _worldPacket << SenderGUID;
+ _worldPacket << TargetGUID;
+ _worldPacket << uint8(Type);
+ _worldPacket << uint32(PinFrameID);
+
+ return &_worldPacket;
+}
+
+void WorldPackets::Party::SendPingWorldPoint::Read()
+{
+ _worldPacket >> SenderGUID;
+ _worldPacket >> MapID;
+ _worldPacket >> Point;
+ Type = _worldPacket.read<PingSubjectType, uint8>();
+ _worldPacket >> PinFrameID;
+}
+
+WorldPacket const* WorldPackets::Party::ReceivePingWorldPoint::Write()
+{
+ _worldPacket << SenderGUID;
+ _worldPacket << MapID;
+ _worldPacket << Point;
+ _worldPacket << uint8(Type);
+ _worldPacket << PinFrameID;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Party::CancelPingPin::Write()
+{
+ _worldPacket << SenderGUID;
+ _worldPacket << PinFrameID;
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 179c881b3d9..15b5f85de1f 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -665,6 +665,82 @@ namespace WorldPackets
ObjectGuid Target;
bool Accepted = false;
};
+
+ class SetRestrictPingsToAssistants final : public ClientPacket
+ {
+ public:
+ explicit SetRestrictPingsToAssistants(WorldPacket&& packet) : ClientPacket(CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS, std::move(packet)) { }
+
+ void Read() override;
+
+ Optional<uint8> PartyIndex;
+ bool RestrictPingsToAssistants = false;
+ };
+
+ class SendPingUnit final : public ClientPacket
+ {
+ public:
+ explicit SendPingUnit(WorldPacket&& packet) : ClientPacket(CMSG_SEND_PING_UNIT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid SenderGUID;
+ ObjectGuid TargetGUID;
+ PingSubjectType Type = PingSubjectType::Max;
+ uint32 PinFrameID = 0;
+ };
+
+ class ReceivePingUnit final : public ServerPacket
+ {
+ public:
+ ReceivePingUnit() : ServerPacket(SMSG_RECEIVE_PING_UNIT, 16 + 16 + 1 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid SenderGUID;
+ ObjectGuid TargetGUID;
+ PingSubjectType Type = PingSubjectType::Max;
+ uint32 PinFrameID = 0;
+ };
+
+ class SendPingWorldPoint final : public ClientPacket
+ {
+ public:
+ explicit SendPingWorldPoint(WorldPacket&& packet) : ClientPacket(CMSG_SEND_PING_WORLD_POINT, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid SenderGUID;
+ uint32 MapID = 0;
+ TaggedPosition<Position::XYZ> Point;
+ PingSubjectType Type = PingSubjectType::Max;
+ uint32 PinFrameID = 0;
+ };
+
+ class ReceivePingWorldPoint final : public ServerPacket
+ {
+ public:
+ ReceivePingWorldPoint() : ServerPacket(SMSG_RECEIVE_PING_WORLD_POINT, 16 + 4 + 4 * 3 + 1 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid SenderGUID;
+ uint32 MapID = 0;
+ TaggedPosition<Position::XYZ> Point;
+ PingSubjectType Type = PingSubjectType::Max;
+ uint32 PinFrameID = 0;
+ };
+
+ class CancelPingPin final : public ServerPacket
+ {
+ public:
+ CancelPingPin() : ServerPacket(SMSG_CANCEL_PING_PIN, 16 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid SenderGUID;
+ uint32 PinFrameID = 0;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 9c3d530ed5f..ac853aed657 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -847,8 +847,8 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SEND_CHARACTER_CLUB_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SEND_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode);
DEFINE_HANDLER(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail);
- DEFINE_HANDLER(CMSG_SEND_PING_UNIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_SEND_PING_UNIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingUnit);
+ DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingWorldPoint);
DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTextEmoteOpcode);
DEFINE_HANDLER(CMSG_SERVER_TIME_OFFSET_REQUEST, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleServerTimeOffsetRequest);
DEFINE_HANDLER(CMSG_SET_ACHIEVEMENTS_HIDDEN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -881,7 +881,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SET_PREFERRED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPvP);
DEFINE_HANDLER(CMSG_SET_RAID_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRaidDifficultyOpcode);
- DEFINE_HANDLER(CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRestrictPingsToAssistants);
DEFINE_HANDLER(CMSG_SET_ROLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRoleOpcode);
DEFINE_HANDLER(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend);
DEFINE_HANDLER(CMSG_SET_SELECTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSelectionOpcode);
@@ -1166,7 +1166,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_ORPHAN_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PING_PIN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PING_PIN, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PRELOAD_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SCENE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1928,8 +1928,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REATTACH_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_UNIT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_WORLD_POINT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_UNIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_WORLD_POINT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRAFT_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 150e73da527..fd89dd9c16f 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -590,6 +590,9 @@ namespace WorldPackets
class SwapSubGroups;
class RaidMarkersChanged;
class ClearRaidMarker;
+ class SetRestrictPingsToAssistants;
+ class SendPingUnit;
+ class SendPingWorldPoint;
}
namespace Pet
@@ -1344,6 +1347,9 @@ class TC_GAME_API WorldSession
void HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& packet);
void HandleSetEveryoneIsAssistant(WorldPackets::Party::SetEveryoneIsAssistant& packet);
void HandleClearRaidMarker(WorldPackets::Party::ClearRaidMarker& packet);
+ void HandleSetRestrictPingsToAssistants(WorldPackets::Party::SetRestrictPingsToAssistants const& setRestrictPingsToAssistants);
+ void HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& pingUnit);
+ void HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPoint const& pingWorldPoint);
void HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet);
void HandlePetitionShowSignatures(WorldPackets::Petition::PetitionShowSignatures& packet);