aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp40
-rw-r--r--src/server/game/Handlers/TicketHandler.cpp10
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h4
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp39
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h30
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rw-r--r--src/server/game/Server/WorldSession.h3
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