Core/PacketIO: Updated CMSG_COMPLAINT

This commit is contained in:
Carbenium
2016-02-03 22:53:48 +01:00
parent ff9ac9f9b0
commit 15bfabaa0a
7 changed files with 85 additions and 45 deletions

View File

@@ -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)

View File

@@ -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());
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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:

View File

@@ -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);

View File

@@ -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