diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-09-14 00:11:06 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-09-14 00:11:06 +0200 |
| commit | c2f5ce2b0333a9bda341ea837340dd3ac4b19ae8 (patch) | |
| tree | 15a8bacce27533a2ebaa85ec2aa31c22eabccc94 /src/server/game/Server | |
| parent | 097b5f3ec00f18161c9d616f60ed762eb722bde0 (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.cpp | 54 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/PartyPackets.h | 76 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 6 |
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); |
