aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorCarbenium <keresztesschmidt@gmail.com>2015-02-08 01:07:00 +0100
committerCarbenium <keresztesschmidt@gmail.com>2015-03-10 21:09:21 +0100
commit37a14bc2d5066bdcdc24331c6718ccf54fb1afa5 (patch)
treea8514c64ae0e5184f20a810d36043d03ab4feac1 /src/server/game/Server
parentc8944d73b32697456b8baeaa72f98378044d3800 (diff)
Core/Support: Update the support/ticket system to 6.x
Core/Mail: fix a logic error introduced in 829e11b6623f967672143d79cd8d31772f54866d
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp28
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h39
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp14
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h12
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp291
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h235
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp41
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h36
-rw-r--r--src/server/game/Server/WorldSession.h24
9 files changed, 662 insertions, 58 deletions
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
new file mode 100644
index 00000000000..4e7bc35b55a
--- /dev/null
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "LFGPackets.h"
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket)
+{
+ data >> ticket.RequesterGuid;
+ data >> ticket.Id;
+ data >> ticket.Type;
+ data >> ticket.Time;
+
+ return data;
+}
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
new file mode 100644
index 00000000000..e62cb47b41a
--- /dev/null
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008-2015 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef LFGPackets_h__
+#define LFGPackets_h__
+
+#include "ObjectGuid.h"
+
+namespace WorldPackets
+{
+ namespace LFG
+ {
+ struct RideTicket
+ {
+ ObjectGuid RequesterGuid;
+ int32 Id = 0;
+ int32 Type = 0;
+ time_t Time = 0;
+ };
+ }
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::LFG::RideTicket& ticket);
+
+#endif // LFGPackets_h__
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 1a01c2d28c6..a88895fb35c 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -39,18 +39,20 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(SessionAlert.HasValue);
_worldPacket.WriteBit(RecruitAFriendSendingEnabled);
_worldPacket.WriteBit(CharUndeleteEnabled);
- _worldPacket.WriteBit(UnkBit21);
- _worldPacket.WriteBit(UnkBit22);
+ _worldPacket.WriteBit(RestrictedAccount);
+ _worldPacket.WriteBit(TutorialsEnabled);
_worldPacket.WriteBit(UnkBit90);
_worldPacket.WriteBit(TwitterEnabled);
_worldPacket.WriteBit(UnkBit61);
+ _worldPacket.FlushBits();
+
if (EuropaTicketSystemStatus.HasValue)
{
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.UnkBit0);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.UnkBit1);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.TicketSystemEnabled);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.SubmitBugEnabled);
+ _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.TicketsEnabled);
+ _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.BugsEnabled);
+ _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.ComplaintsEnabled);
+ _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.SuggestionsEnabled);
_worldPacket << uint32(EuropaTicketSystemStatus.Value.ThrottleState.MaxTries);
_worldPacket << uint32(EuropaTicketSystemStatus.Value.ThrottleState.PerMilliseconds);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 897726575a4..d20d35649fb 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -37,10 +37,10 @@ namespace WorldPackets
struct EuropaTicketConfig
{
- bool UnkBit0 = false;
- bool UnkBit1 = false;
- bool TicketSystemEnabled = false;
- bool SubmitBugEnabled = false;
+ bool TicketsEnabled = false;
+ bool BugsEnabled = false;
+ bool ComplaintsEnabled = false;
+ bool SuggestionsEnabled = false;
SavedThrottleObjectState ThrottleState;
};
@@ -76,8 +76,8 @@ namespace WorldPackets
bool BpayStoreDisabledByParentalControls = false;
bool TwitterEnabled = false;
- bool UnkBit21 = false;
- bool UnkBit22 = false;
+ bool RestrictedAccount = false;
+ bool TutorialsEnabled = false;
bool UnkBit90 = false;
bool UnkBit61 = false;
};
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index 8567cebd736..1a4d4d00c0a 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -15,8 +15,21 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "LFGPackets.h"
+#include "PacketUtilities.h"
#include "TicketPackets.h"
+using namespace WorldPackets;
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketHeader& header)
+{
+ data >> header.MapID;
+ data >> header.Position;
+ data >> header.Facing;
+
+ return data;
+}
+
WorldPacket const* WorldPackets::Ticket::GMTicketSystemStatus::Write()
{
_worldPacket << int32(Status);
@@ -80,3 +93,281 @@ WorldPacket const* WorldPackets::Ticket::GMTicketGetTicketResponse::Write()
return &_worldPacket;
}
+
+void WorldPackets::Ticket::GMTicketCreate::Read()
+{
+ _worldPacket >> Map;
+ _worldPacket >> Pos;
+ _worldPacket >> Flags;
+
+ uint16 descLength = _worldPacket.ReadBits(11);
+ Description = _worldPacket.ReadString(descLength);
+ _worldPacket.ResetBitPos();
+
+ NeedMoreHelp = _worldPacket.ReadBit();
+ NeedResponse = _worldPacket.ReadBit();
+ _worldPacket >> DataLength;
+
+ if (DataLength > 0)
+ {
+ _worldPacket >> ChatHistoryData.TextCount;
+ for (uint8 i = 0; i < ChatHistoryData.TextCount; ++i)
+ ChatHistoryData.Sent.push_back(_worldPacket.read<uint32>());
+
+ _worldPacket >> ChatHistoryData.DecompressedSize;
+
+ //Note: don't ask why, but it works...
+ uint32 realLength = DataLength - ((ChatHistoryData.TextCount * 4) + 5);
+ ChatHistoryData.Data.resize(realLength);
+ _worldPacket.read(ChatHistoryData.Data.contents(), realLength);
+ }
+}
+
+void WorldPackets::Ticket::GMTicketUpdateText::Read()
+{
+ uint16 descLength = _worldPacket.ReadBits(11);
+ Description = _worldPacket.ReadString(descLength);
+}
+
+WorldPacket const* WorldPackets::Ticket::GMTicketUpdate::Write()
+{
+ _worldPacket << uint8(Result);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Ticket::GMTicketStatusUpdate::Write()
+{
+ _worldPacket << int32(StatusInt);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Ticket::GMTicketResponse::Write()
+{
+ _worldPacket << uint32(TicketID);
+ _worldPacket << uint32(ResponseID);
+
+ _worldPacket.WriteBits(Description.size(), 11);
+ _worldPacket.WriteBits(ResponseText.size(), 14);
+ _worldPacket.FlushBits();
+
+ _worldPacket.WriteString(Description);
+ _worldPacket.WriteString(ResponseText);
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Ticket::GMTicketResolveResponse::Write()
+{
+ _worldPacket.WriteBit(ShowSurvey);
+
+ _worldPacket.FlushBits();
+ return &_worldPacket;
+}
+
+void WorldPackets::Ticket::GMSurveySubmit::Read()
+{
+ _worldPacket >> SurveyID;
+
+ SurveyQuestion.resize(_worldPacket.ReadBits(4));
+ uint16 commentLength = _worldPacket.ReadBits(11);
+
+ for (auto& q : SurveyQuestion)
+ {
+ _worldPacket >> q.QuestionID;
+ _worldPacket >> q.Answer;
+ q.AnswerComment = _worldPacket.ReadString(_worldPacket.ReadBits(11));
+ }
+
+ Comment = _worldPacket.ReadString(commentLength);
+}
+
+void WorldPackets::Ticket::SupportTicketSubmitBug::Read()
+{
+ _worldPacket >> Header;
+ Note = _worldPacket.ReadString(_worldPacket.ReadBits(10));
+}
+
+void WorldPackets::Ticket::SupportTicketSubmitSuggestion::Read()
+{
+ _worldPacket >> Header;
+ Note = _worldPacket.ReadString(_worldPacket.ReadBits(10));
+}
+
+WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine::SupportTicketChatLine(ByteBuffer& data)
+{
+ data >> Timestamp;
+ uint16 textLength = data.ReadBits(12);
+ data.ResetBitPos();
+ Text = data.ReadString(textLength);
+}
+
+WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine::SupportTicketChatLine(uint32 timestamp, std::string const& text)
+{
+ Timestamp = timestamp;
+ Text = text;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine& line)
+{
+ data >> line.Timestamp;
+ uint16 textLength = data.ReadBits(12);
+ data.ResetBitPos();
+ line.Text = data.ReadString(textLength);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLog& chatlog)
+{
+ uint32 linesCount = data.read<uint32>();
+
+ for (uint32 i = 0; i < linesCount; i++)
+ chatlog.Lines.emplace_back(data);
+
+ bool hasReportLineIndex = data.ReadBit();
+ if (hasReportLineIndex)
+ chatlog.ReportLineIndex.Set(data.read<uint32>());
+
+ data.ResetBitPos();
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketMailInfo& mail)
+{
+ data >> mail.MailID;
+ uint16 bodyLength = data.ReadBits(13);
+ uint16 subjectLength = data.ReadBits(9);
+
+ mail.MailBody = data.ReadString(bodyLength);
+ mail.MailSubject = data.ReadString(subjectLength);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketCalendarEventInfo& event)
+{
+ data >> event.EventID;
+ data >> event.InviteID;
+ uint8 titleLength = data.ReadBits(8);
+
+ event.EventTitle = data.ReadString(titleLength);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketPetInfo& pet)
+{
+ data >> pet.PetID;
+ uint8 nameLength = data.ReadBits(8);
+
+ pet.PetName = data.ReadString(nameLength);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketGuildInfo& guild)
+{
+ data >> guild.GuildID;
+ uint8 nameLength = data.ReadBits(8);
+
+ guild.GuildName = data.ReadString(nameLength);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::Struct5E4383& str)
+{
+ data >> str.RideTicket;
+ data >> str._40;
+ data >> str._56;
+ data >> str._72;
+
+ uint8 _88Length = data.ReadBits(8);
+ uint8 _217Length = data.ReadBits(8);
+ uint8 _1242Length = data.ReadBits(8);
+
+ str._88 = data.ReadString(_88Length);
+ str._217 = data.ReadString(_217Length);
+ str._1242 = data.ReadString(_1242Length);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::Struct5E3DFB& str)
+{
+ data >> str.RideTicket;
+
+ uint16 _32Length = data.ReadBits(9);
+ data.ResetBitPos();
+
+ str._32 = data.ReadString(_32Length);
+
+ return data;
+}
+
+void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
+{
+ _worldPacket >> Header;
+ _worldPacket >> ChatLog;
+ _worldPacket >> TargetCharacterGUID;
+ ComplaintType = _worldPacket.ReadBits(5);
+
+ uint16 noteLength = _worldPacket.ReadBits(10);
+ bool hasMailInfo = _worldPacket.ReadBit();
+ bool hasCalendarInfo = _worldPacket.ReadBit();
+ bool hasPetInfo = _worldPacket.ReadBit();
+ bool hasGuildInfo = _worldPacket.ReadBit();
+ bool has5E4383 = _worldPacket.ReadBit();
+ bool has5E3DFB = _worldPacket.ReadBit();
+
+ _worldPacket.ResetBitPos();
+
+ Note = _worldPacket.ReadString(noteLength);
+
+ if (hasMailInfo)
+ {
+ _worldPacket >> MailInfo.Value;
+ MailInfo.HasValue = true;
+ }
+
+ if (hasCalendarInfo)
+ {
+ _worldPacket >> CalenderInfo.Value;
+ CalenderInfo.HasValue = true;
+ }
+
+ if (hasPetInfo)
+ {
+ _worldPacket >> PetInfo.Value;
+ PetInfo.HasValue = true;
+ }
+
+ if (hasGuildInfo)
+ {
+ _worldPacket >> GuildInfo.Value;
+ GuildInfo.HasValue = true;
+ }
+
+ if (has5E4383)
+ {
+ _worldPacket >> _5E4383.Value;
+ _5E4383.HasValue = true;
+ }
+
+ if (has5E3DFB)
+ {
+ _worldPacket >> _5E3DFB.Value;
+ _5E3DFB.HasValue = true;
+ }
+}
+
+WorldPacket const* WorldPackets::Ticket::ComplaintResult::Write()
+{
+ _worldPacket << uint32(ComplaintType);
+ _worldPacket << uint8(Result);
+
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index 8a5ae862f84..e11adf912ed 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -19,11 +19,20 @@
#define TicketPackets_h__
#include "Packet.h"
+#include "LFGPackets.h"
+#include <G3D/Vector3.h>
namespace WorldPackets
{
namespace Ticket
{
+ struct SupportTicketHeader
+ {
+ int32 MapID = 0;
+ G3D::Vector3 Position;
+ float Facing = 0.0f;
+ };
+
class GMTicketGetSystemStatus final : public ClientPacket
{
public:
@@ -107,6 +116,120 @@ namespace WorldPackets
Optional<GMTicketInfo> Info;
};
+ class GMTicketCreate final : public ClientPacket
+ {
+ public:
+ struct ChatHistoryData
+ {
+ uint8 TextCount = 0;
+ std::vector<uint32> Sent;
+ uint32 DecompressedSize = 0;
+ ByteBuffer Data;
+ };
+
+ GMTicketCreate(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_CREATE, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 Map = 0;
+ G3D::Vector3 Pos;
+ uint8 Flags = 0;
+ std::string Description;
+ bool NeedMoreHelp = false;
+ bool NeedResponse = false;
+ uint32 DataLength = 0;
+ ChatHistoryData ChatHistoryData; ///< Compressed Data
+ };
+
+ class GMTicketUpdateText final : public ClientPacket
+ {
+ public:
+ GMTicketUpdateText(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_UPDATE_TEXT, std::move(packet)) { }
+
+ void Read() override;
+
+ std::string Description;
+ };
+
+ class GMTicketUpdate final : public ServerPacket
+ {
+ public:
+ GMTicketUpdate() : ServerPacket(SMSG_GM_TICKET_UPDATE, 1) { }
+
+ WorldPacket const* Write() override;
+
+ uint8 Result = 0;
+ };
+
+ class GMTicketStatusUpdate final : public ServerPacket
+ {
+ public:
+ GMTicketStatusUpdate() : ServerPacket(SMSG_GM_TICKET_STATUS_UPDATE, 4) { }
+
+ WorldPacket const* Write() override;
+
+ int32 StatusInt = 0;
+ };
+
+ class GMTicketDelete final : public ClientPacket
+ {
+ public:
+ GMTicketDelete(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_DELETE_TICKET, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GMTicketResponse final : public ServerPacket
+ {
+ public:
+ GMTicketResponse() : ServerPacket(SMSG_GM_TICKET_RESPONSE, 12) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 TicketID = 0;
+ uint32 ResponseID = 0;
+ std::string Description;
+ std::string ResponseText;
+ };
+
+ class GMTicketResponseResolve final : public ClientPacket
+ {
+ public:
+ GMTicketResponseResolve(WorldPacket&& packet) : ClientPacket(CMSG_GM_TICKET_RESPONSE_RESOLVE, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
+ class GMTicketResolveResponse final : public ServerPacket
+ {
+ public:
+ GMTicketResolveResponse() : ServerPacket(SMSG_GM_TICKET_RESOLVE_RESPONSE, 1) { }
+
+ WorldPacket const* Write() override;
+
+ bool ShowSurvey = false;
+ };
+
+ class GMSurveySubmit final : public ClientPacket
+ {
+ public:
+ struct GMSurveyQuestion
+ {
+ int32 QuestionID = 0;
+ uint8 Answer = 0;
+ std::string AnswerComment;
+ };
+
+ GMSurveySubmit(WorldPacket&& packet) : ClientPacket(CMSG_GM_SURVEY_SUBMIT, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 SurveyID = 0;
+ std::vector<GMSurveyQuestion> SurveyQuestion;
+ std::string Comment;
+
+ };
+
class GMTicketAcknowledgeSurvey final : public ClientPacket
{
public:
@@ -124,6 +247,118 @@ namespace WorldPackets
WorldPacket const* Write() { return &_worldPacket; }
};
+
+ class SupportTicketSubmitBug final : public ClientPacket
+ {
+ public:
+ SupportTicketSubmitBug(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_BUG, std::move(packet)) { }
+
+ void Read() override;
+
+ SupportTicketHeader Header;
+ std::string Note;
+ };
+
+ class SupportTicketSubmitSuggestion final : public ClientPacket
+ {
+ public:
+ SupportTicketSubmitSuggestion(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION, std::move(packet)) { }
+
+ void Read() override;
+
+ SupportTicketHeader Header;
+ std::string Note;
+ };
+
+ class SupportTicketSubmitComplaint final : public ClientPacket
+ {
+ public:
+ struct SupportTicketChatLine
+ {
+ SupportTicketChatLine(ByteBuffer& data);
+ SupportTicketChatLine(uint32 timestamp, std::string const& text);
+
+ uint32 Timestamp = 0;
+ std::string Text;
+ };
+
+ struct SupportTicketChatLog
+ {
+ std::vector<SupportTicketChatLine> Lines;
+ Optional<uint32> ReportLineIndex;
+ };
+
+ struct SupportTicketMailInfo
+ {
+ int32 MailID = 0;
+ std::string MailSubject;
+ std::string MailBody;
+ };
+
+ struct SupportTicketCalendarEventInfo
+ {
+ ObjectGuid EventID;
+ ObjectGuid InviteID;
+ std::string EventTitle;
+ };
+
+ struct SupportTicketPetInfo
+ {
+ ObjectGuid PetID;
+ std::string PetName;
+ };
+
+ struct SupportTicketGuildInfo
+ {
+ ObjectGuid GuildID;
+ std::string GuildName;
+ };
+
+ struct Struct5E4383
+ {
+ WorldPackets::LFG::RideTicket RideTicket;
+ ObjectGuid _40;
+ ObjectGuid _56;
+ ObjectGuid _72;
+ std::string _88;
+ std::string _217;
+ std::string _1242;
+ };
+
+ struct Struct5E3DFB
+ {
+ WorldPackets::LFG::RideTicket RideTicket;
+ std::string _32;
+ };
+
+ SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { }
+
+ void Read() override;
+
+ SupportTicketHeader Header;
+ SupportTicketChatLog ChatLog;
+ ObjectGuid TargetCharacterGUID;
+ uint8 ComplaintType = 0;
+ std::string Note;
+ Optional<SupportTicketMailInfo> MailInfo;
+ Optional<SupportTicketCalendarEventInfo> CalenderInfo;
+ Optional<SupportTicketPetInfo> PetInfo;
+ Optional<SupportTicketGuildInfo> GuildInfo;
+ Optional<Struct5E4383> _5E4383;
+ Optional<Struct5E3DFB> _5E3DFB;
+
+ };
+
+ class ComplaintResult final : public ServerPacket
+ {
+ public:
+ ComplaintResult() : ServerPacket(SMSG_COMPLAINT_RESULT, 9) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 ComplaintType = 0;
+ uint8 Result = 0;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index de285fb1ed6..43ffe3e223e 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -379,20 +379,19 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GET_UNDELETE_COOLDOWN_STATUS, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::GetUndeleteCooldownStatus, &WorldSession::HandleGetUndeleteCooldownStatus);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GHOST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_INVIS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_LAG_REPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleReportLag );
+ DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_LAG_REPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_NUKE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_SET_SECURITY_GROUP, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_SURVEY_SUBMIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmit );
+ DEFINE_HANDLER(CMSG_GM_SURVEY_SUBMIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMSurveySubmit, &WorldSession::HandleGMSurveySubmit);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//DEFINE_HANDLER(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Ticket::GMTicketAcknowledgeSurvey, &WorldSession::HandleGMTicketAcknowledgeSurveyOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_CREATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketCreateOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_DELETE_TICKET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketDeleteOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- //DEFINE_HANDLER(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Ticket::GMTicketGetCaseStatus, &WorldSession::HandleGMTicketGetCaseStatusOpcode);
- DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetSystemStatus, &WorldSession::HandleGMTicketSystemStatusOpcode);
- DEFINE_HANDLER(CMSG_GM_TICKET_GET_TICKET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetTicket, &WorldSession::HandleGMTicketGetTicketOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_RESPONSE_RESOLVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMResponseResolve );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_GM_TICKET_UPDATE_TEXT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketUpdateOpcode );
+ DEFINE_HANDLER(CMSG_GM_TICKET_CREATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketCreate, &WorldSession::HandleGMTicketCreateOpcode);
+ DEFINE_HANDLER(CMSG_GM_TICKET_DELETE_TICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketDelete, &WorldSession::HandleGMTicketDeleteOpcode);
+ DEFINE_HANDLER(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Ticket::GMTicketGetCaseStatus, &WorldSession::HandleGMTicketGetCaseStatusOpcode);
+ DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetSystemStatus, &WorldSession::HandleGMTicketSystemStatusOpcode);
+ DEFINE_HANDLER(CMSG_GM_TICKET_GET_TICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketGetTicket, &WorldSession::HandleGMTicketGetTicketOpcode);
+ DEFINE_HANDLER(CMSG_GM_TICKET_RESPONSE_RESOLVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketResponseResolve, &WorldSession::HandleGMResponseResolve);
+ DEFINE_HANDLER(CMSG_GM_TICKET_UPDATE_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::GMTicketUpdateText, &WorldSession::HandleGMTicketUpdateTextOpcode);
DEFINE_HANDLER(CMSG_GOSSIP_HELLO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::NPC::Hello, &WorldSession::HandleGossipHelloOpcode);
DEFINE_HANDLER(CMSG_GOSSIP_SELECT_OPTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::NPC::GossipSelectOption, &WorldSession::HandleGossipSelectOptionOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_GRANT_LEVEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel );
@@ -804,9 +803,9 @@ void OpcodeTable::Initialize()
DEFINE_OPCODE_HANDLER_OLD(CMSG_STOP_DANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_STORE_LOOT_IN_SLOT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUMMON_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleSummonResponseOpcode );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SUPPORT_TICKET_SUBMIT_BUG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
- DEFINE_OPCODE_HANDLER_OLD(CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
+ DEFINE_HANDLER(CMSG_SUPPORT_TICKET_SUBMIT_BUG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::SupportTicketSubmitBug, &WorldSession::HandleSupportTicketSubmitBug);
+ DEFINE_HANDLER(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::SupportTicketSubmitComplaint, &WorldSession::HandleSupportTicketSubmitComplaint);
+ DEFINE_HANDLER(CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Ticket::SupportTicketSubmitSuggestion, &WorldSession::HandleSupportTicketSubmitSuggestion);
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUSPEND_COMMS_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_OPCODE_HANDLER_OLD(CMSG_SUSPEND_TOKEN_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
DEFINE_HANDLER(CMSG_SWAP_INV_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::SwapInvItem, &WorldSession::HandleSwapInvItemOpcode);
@@ -1239,14 +1238,14 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_MESSAGECHAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_REQUEST_PLAYER_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_GET_TICKET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESOLVE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_SYSTEM_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_CASE_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_GET_TICKET_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESOLVE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_RESPONSE_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_SYSTEM_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_GM_TICKET_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOD_MODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 7bc9488dd26..f4bfac9225e 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -292,13 +292,13 @@ enum OpcodeClient : uint32
CMSG_GM_SET_SECURITY_GROUP = 0xBADD,
CMSG_GM_SURVEY_SUBMIT = 0xBADD,
CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0xBADD,
- CMSG_GM_TICKET_CREATE = 0xBADD,
- CMSG_GM_TICKET_DELETE_TICKET = 0xBADD,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0xBADD,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0xBADD,
- CMSG_GM_TICKET_GET_TICKET = 0xBADD,
- CMSG_GM_TICKET_RESPONSE_RESOLVE = 0xBADD,
- CMSG_GM_TICKET_UPDATE_TEXT = 0xBADD,
+ CMSG_GM_TICKET_CREATE = 0x19A4,
+ CMSG_GM_TICKET_DELETE_TICKET = 0x1B39,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x17E1,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x1BB9,
+ CMSG_GM_TICKET_GET_TICKET = 0x1939,
+ CMSG_GM_TICKET_RESPONSE_RESOLVE = 0x19FB,
+ CMSG_GM_TICKET_UPDATE_TEXT = 0x19EB,
CMSG_GOSSIP_HELLO = 0x0483,
CMSG_GOSSIP_SELECT_OPTION = 0xBADD,
CMSG_GRANT_LEVEL = 0xBADD,
@@ -712,9 +712,9 @@ enum OpcodeClient : uint32
CMSG_STOP_DANCE = 0xBADD,
CMSG_STORE_LOOT_IN_SLOT = 0xBADD,
CMSG_SUMMON_RESPONSE = 0xBADD,
- CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0xBADD,
- CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0xBADD,
- CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0xBADD,
+ CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x11BB,
+ CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x1BB1,
+ CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x1B63,
CMSG_SUSPEND_COMMS_ACK = 0x123C,
CMSG_SUSPEND_TOKEN_RESPONSE = 0x1273,
CMSG_SWAP_INV_ITEM = 0x00C5,
@@ -1171,14 +1171,14 @@ enum OpcodeServer : uint32
SMSG_GM_PLAYER_INFO = 0xBADD,
SMSG_GM_REQUEST_PLAYER_INFO = 0xBADD,
SMSG_GM_SUMMON = 0xBADD,
- SMSG_GM_TICKET_CASE_STATUS = 0xBADD,
- SMSG_GM_TICKET_GET_TICKET_RESPONSE = 0xBADD,
- SMSG_GM_TICKET_RESOLVE_RESPONSE = 0xBADD,
- SMSG_GM_TICKET_RESPONSE = 0xBADD,
- SMSG_GM_TICKET_RESPONSE_ERROR = 0xBADD,
- SMSG_GM_TICKET_STATUS_UPDATE = 0xBADD,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0xBADD,
- SMSG_GM_TICKET_UPDATE = 0xBADD,
+ SMSG_GM_TICKET_CASE_STATUS = 0x086B,
+ SMSG_GM_TICKET_GET_TICKET_RESPONSE = 0x0183,
+ SMSG_GM_TICKET_RESOLVE_RESPONSE = 0x0869,
+ SMSG_GM_TICKET_RESPONSE = 0x1729,
+ SMSG_GM_TICKET_RESPONSE_ERROR = 0x0A33,
+ SMSG_GM_TICKET_STATUS_UPDATE = 0x0B74,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x134C,
+ SMSG_GM_TICKET_UPDATE = 0x193A,
SMSG_GOD_MODE = 0xBADD,
SMSG_GOSSIP_COMPLETE = 0xBADD,
SMSG_GOSSIP_MESSAGE = 0x0117,
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 54c995589a4..c7ea26b7adf 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -358,10 +358,18 @@ namespace WorldPackets
namespace Ticket
{
+ class GMSurveySubmit;
+ class GMTicketAcknowledgeSurvey;
+ class GMTicketCreate;
+ class GMTicketDelete;
class GMTicketGetSystemStatus;
class GMTicketGetCaseStatus;
class GMTicketGetTicket;
- class GMTicketAcknowledgeSurvey;
+ class GMTicketResponseResolve;
+ class GMTicketUpdateText;
+ class SupportTicketSubmitBug;
+ class SupportTicketSubmitSuggestion;
+ class SupportTicketSubmitComplaint;
}
namespace Trade
@@ -840,15 +848,17 @@ class WorldSession
void HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCancel& logoutCancel);
// GM Ticket opcodes
- void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
- void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
- void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
+ void HandleGMTicketCreateOpcode(WorldPackets::Ticket::GMTicketCreate& packet);
+ void HandleGMTicketUpdateTextOpcode(WorldPackets::Ticket::GMTicketUpdateText& packet);
+ void HandleGMTicketDeleteOpcode(WorldPackets::Ticket::GMTicketDelete& packet);
void HandleGMTicketGetCaseStatusOpcode(WorldPackets::Ticket::GMTicketGetCaseStatus& packet);
void HandleGMTicketGetTicketOpcode(WorldPackets::Ticket::GMTicketGetTicket& packet);
void HandleGMTicketSystemStatusOpcode(WorldPackets::Ticket::GMTicketGetSystemStatus& packet);
- void HandleGMSurveySubmit(WorldPacket& recvPacket);
- void HandleReportLag(WorldPacket& recvPacket);
- void HandleGMResponseResolve(WorldPacket& recvPacket);
+ void HandleGMSurveySubmit(WorldPackets::Ticket::GMSurveySubmit& packet);
+ void HandleGMResponseResolve(WorldPackets::Ticket::GMTicketResponseResolve& packet);
+ void HandleSupportTicketSubmitBug(WorldPackets::Ticket::SupportTicketSubmitBug& packet);
+ void HandleSupportTicketSubmitSuggestion(WorldPackets::Ticket::SupportTicketSubmitSuggestion& packet);
+ void HandleSupportTicketSubmitComplaint(WorldPackets::Ticket::SupportTicketSubmitComplaint& packet);
void HandleTogglePvP(WorldPacket& recvPacket);