diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 40 | ||||
-rw-r--r-- | src/server/game/Handlers/TicketHandler.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 4 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TicketPackets.cpp | 39 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TicketPackets.h | 30 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
7 files changed, 85 insertions, 45 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 5b9616a5d68..b94b4ce838e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -724,46 +724,6 @@ void WorldSession::HandleWhoIsOpcode(WorldPackets::Who::WhoIsRequest& packet) SendPacket(response.Write()); } -void WorldSession::HandleComplainOpcode(WorldPacket& recvData) -{ - uint8 spam_type; // 0 - mail, 1 - chat - ObjectGuid spammer_guid; - uint32 unk1 = 0; - uint32 unk2 = 0; - uint32 unk3 = 0; - uint32 unk4 = 0; - std::string description = ""; - recvData >> spam_type; // unk 0x01 const, may be spam type (mail/chat) - recvData >> spammer_guid; // player guid - switch (spam_type) - { - case 0: - recvData >> unk1; // const 0 - recvData >> unk2; // probably mail id - recvData >> unk3; // const 0 - break; - case 1: - recvData >> unk1; // probably language - recvData >> unk2; // message type? - recvData >> unk3; // probably channel id - recvData >> unk4; // time - recvData >> description; // spam description string (messagetype, channel name, player name, message) - break; - } - - // NOTE: all chat messages from this spammer automatically ignored by spam reporter until logout in case chat spam. - // if it's mail spam - ALL mails from this spammer automatically removed by client - - // Complaint Received message - WorldPacket data(SMSG_COMPLAINT_RESULT, 2); - data << uint8(0); // value 1 resets CGChat::m_complaintsSystemStatus in client. (unused?) - data << uint8(0); // value 0xC generates a "CalendarError" in client. - SendPacket(&data); - - TC_LOG_DEBUG("network", "REPORT SPAM: type %u, %s, unk1 %u, unk2 %u, unk3 %u, unk4 %u, message %s", - spam_type, spammer_guid.ToString().c_str(), unk1, unk2, unk3, unk4, description.c_str()); -} - void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet) { if (packet.Enable) diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index 907cd9cd6f4..6f7a6acaa10 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -95,3 +95,13 @@ void WorldSession::HandleBugReportOpcode(WorldPackets::Ticket::BugReport& bugRep stmt->setString(1, bugReport.DiagInfo); CharacterDatabase.Execute(stmt); } + +void WorldSession::HandleComplaint(WorldPackets::Ticket::Complaint& packet) +{ // NOTE: all chat messages from this spammer are automatically ignored by the spam reporter until logout in case of chat spam. + // if it's mail spam - ALL mails from this spammer are automatically removed by client + + WorldPackets::Ticket::ComplaintResult result; + result.ComplaintType = packet.ComplaintType; + result.Result = 0; + SendPacket(result.Write()); +} diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 4a8c1211a85..042c32ac66e 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -849,8 +849,8 @@ namespace WorldPackets ObjectGuid Guid; uint16 MoveMsgID = 0; int32 SpellID = 0; - float Pitch = 0.0; - float Speed = 0.0; + float Pitch = 0.0f; + float Speed = 0.0f; G3D::Vector3 FirePos; G3D::Vector3 ImpactPos; Optional<MovementInfo> Status; diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp index 97c23b47191..4fe9e9e358e 100644 --- a/src/server/game/Server/Packets/TicketPackets.cpp +++ b/src/server/game/Server/Packets/TicketPackets.cpp @@ -223,6 +223,45 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() _worldPacket >> LFGListApplicant; } +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::Complaint::ComplaintOffender& complaintOffender) +{ + data >> complaintOffender.PlayerGuid; + data >> complaintOffender.RealmAddress; + data >> complaintOffender.TimeSinceOffence; + + return data; +} + +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::Complaint::ComplaintChat& chat) +{ + data >> chat.Command; + data >> chat.ChannelID; + chat.MessageLog = data.ReadString(data.ReadBits(12)); + + return data; +} + +void WorldPackets::Ticket::Complaint::Read() +{ + _worldPacket >> ComplaintType; + _worldPacket >> Offender; + + switch (ComplaintType) + { + case 0: + _worldPacket >> MailID; + break; + case 1: + _worldPacket >> Chat; + break; + case 2: + _worldPacket >> EventGuid; + _worldPacket >> InviteGuid; + default: + break; + } +} + WorldPacket const* WorldPackets::Ticket::ComplaintResult::Write() { _worldPacket << uint32(ComplaintType); diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index 9b126d681b0..691a7b27bb8 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -193,6 +193,36 @@ namespace WorldPackets }; + class Complaint final : public ClientPacket + { + public: + struct ComplaintOffender + { + ObjectGuid PlayerGuid; + uint32 RealmAddress = 0; + uint32 TimeSinceOffence = 0; + }; + + struct ComplaintChat + { + uint32 Command = 0; + uint32 ChannelID = 0; + std::string MessageLog; + }; + + Complaint(WorldPacket&& packet) : ClientPacket(CMSG_COMPLAINT, std::move(packet)) { } + + void Read() override; + + uint8 ComplaintType = 0; + ComplaintOffender Offender; + uint32 MailID = 0; + ComplaintChat Chat; + ObjectGuid EventGuid; + ObjectGuid InviteGuid; + + }; + class ComplaintResult final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index f0bc08f9f7a..87b1c8a59a9 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -291,7 +291,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_COMMENTATOR_GET_MAP_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_GET_PLAYER_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_START_WARGAME, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); - DEFINE_OPCODE_HANDLER_OLD(CMSG_COMPLAINT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleComplainOpcode ); + DEFINE_HANDLER(CMSG_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::Complaint, &WorldSession::HandleComplaint); DEFINE_HANDLER(CMSG_COMPLETE_CINEMATIC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::CompleteCinematic, &WorldSession::HandleCompleteCinematic); DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CONFIRM_RESPEC_WIPE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Talent::ConfirmRespecWipe, &WorldSession::HandleConfirmRespecWipeOpcode); @@ -990,7 +990,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMENTATOR_MAP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMENTATOR_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMENTATOR_STATE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPLAINT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPLAINT_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPLETE_SHIPMENT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPRESSED_PACKET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONNECT_TO, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 9b3f30a14ce..a3a1f85ce3a 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -623,6 +623,7 @@ namespace WorldPackets class SupportTicketSubmitSuggestion; class SupportTicketSubmitComplaint; class BugReport; + class Complaint; } namespace Token @@ -1157,6 +1158,7 @@ class WorldSession void HandleSupportTicketSubmitSuggestion(WorldPackets::Ticket::SupportTicketSubmitSuggestion& packet); void HandleSupportTicketSubmitComplaint(WorldPackets::Ticket::SupportTicketSubmitComplaint& packet); void HandleBugReportOpcode(WorldPackets::Ticket::BugReport& bugReport); + void HandleComplaint(WorldPackets::Ticket::Complaint& packet); void HandleTogglePvP(WorldPackets::Misc::TogglePvP& packet); void HandleSetPvP(WorldPackets::Misc::SetPvP& packet); @@ -1549,7 +1551,6 @@ class WorldSession void SendLfgTeleportError(uint8 err); void HandleSelfResOpcode(WorldPackets::Spells::SelfRes& packet); - void HandleComplainOpcode(WorldPacket& recvData); void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet); // Socket gem |