TrinityCore
TicketPackets.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "TicketPackets.h"
19#include "PacketUtilities.h"
20#include "SupportMgr.h"
21
23{
24 data >> header.MapID;
25 data >> header.Position;
26 data >> header.Facing;
27 data >> header.Program;
28
29 return data;
30}
31
33{
35
36 return &_worldPacket;
37}
38
40{
41 _worldPacket << int32(Cases.size());
42
43 for (GMTicketCase const& c : Cases)
44 {
45 _worldPacket << int32(c.CaseID);
46 _worldPacket << c.CaseOpened;
47 _worldPacket << int32(c.CaseStatus);
48 _worldPacket << uint16(c.CfgRealmID);
49 _worldPacket << uint64(c.CharacterID);
50 _worldPacket << int32(c.WaitTimeOverrideMinutes);
51
52 _worldPacket.WriteBits(c.Url.size(), 11);
53 _worldPacket.WriteBits(c.WaitTimeOverrideMessage.size(), 10);
54
55 _worldPacket.WriteString(c.Url);
56 _worldPacket.WriteString(c.WaitTimeOverrideMessage);
57 }
58
59 _worldPacket.FlushBits();
60 return &_worldPacket;
61}
62
64{
65 _worldPacket >> CaseID;
66}
67
69{
70 _worldPacket >> Header;
71 uint32 noteLength = _worldPacket.ReadBits(24);
72 IsSuggestion = _worldPacket.ReadBit();
73 if (noteLength)
74 {
75 Note = _worldPacket.ReadString(noteLength - 1);
76 _worldPacket.read_skip<char>(); // null terminator
77 }
78}
79
81 Timestamp(timestamp), Text(text)
82{ }
83
85{
86 data >> line.Timestamp;
87 line.Text = data.ReadString(data.ReadBits(12));
88
89 return data;
90}
91
93{
94 data >> *this;
95}
96
98{
99 uint32 linesCount = data.read<uint32>();
100 bool hasReportLineIndex = data.ReadBit();
101 data.ResetBitPos();
102
103 for (uint32 i = 0; i < linesCount; i++)
104 chatlog.Lines.emplace_back(data);
105
106 if (hasReportLineIndex)
107 chatlog.ReportLineIndex = data.read<uint32>();
108
109 return data;
110}
111
113{
114 data >> line.Timestamp;
115 data >> line.AuthorGUID;
116
117 bool hasClubID = data.ReadBit();
118 bool hasChannelGUID = data.ReadBit();
119 bool hasRealmAddress = data.ReadBit();
120 bool hasSlashCmd = data.ReadBit();
121 uint32 textLength = data.ReadBits(12);
122
123 if (hasClubID)
124 line.ClubID = data.read<uint64>();
125
126 if (hasChannelGUID)
127 {
128 line.ChannelGUID.emplace();
129 data >> *line.ChannelGUID;
130 }
131
132 if (hasRealmAddress)
133 {
134 line.RealmAddress.emplace();
135 data >> line.RealmAddress->VirtualRealmAddress;
136 data >> line.RealmAddress->field_4;
137 data >> line.RealmAddress->field_6;
138 }
139
140 if (hasSlashCmd)
141 line.SlashCmd = data.read<int32>();
142
143 line.Text = data.ReadString(textLength);
144
145 return data;
146}
147
149{
150 data >> *this;
151}
152
154{
155 uint32 linesCount = data.read<uint32>();
156 data.ResetBitPos();
157
158 for (uint32 i = 0; i < linesCount; i++)
159 chatlog.Lines.emplace_back(data);
160
161 return data;
162}
163
165{
166 mail.emplace();
167
168 data >> mail->MailID;
169 uint32 bodyLength = data.ReadBits(13);
170 uint32 subjectLength = data.ReadBits(9);
171 mail->MailBody = data.ReadString(bodyLength);
172 mail->MailSubject = data.ReadString(subjectLength);
173
174 return data;
175}
176
178{
179 event.emplace();
180
181 data >> event->EventID;
182 data >> event->InviteID;
183 event->EventTitle = data.ReadString(data.ReadBits(8));
184
185 return data;
186}
187
189{
190 pet.emplace();
191
192 data >> pet->PetID;
193 pet->PetName = data.ReadString(data.ReadBits(8));
194
195 return data;
196}
197
199{
200 guild.emplace();
201
202 uint32 nameLength = data.ReadBits(7);
203 data >> guild->GuildID;
204 guild->GuildName = data.ReadString(nameLength);
205
206 return data;
207}
208
210{
211 lfgListSearchResult.emplace();
212
213 data >> lfgListSearchResult->RideTicket;
214 data >> lfgListSearchResult->GroupFinderActivityID;
215 data >> lfgListSearchResult->Unknown1007;
216 data >> lfgListSearchResult->LastTitleAuthorGuid;
217 data >> lfgListSearchResult->LastDescriptionAuthorGuid;
218 data >> lfgListSearchResult->LastVoiceChatAuthorGuid;
219 data >> lfgListSearchResult->ListingCreatorGuid;
220 data >> lfgListSearchResult->Unknown735;
221
222 uint32 titleLength = data.ReadBits(10);
223 uint32 descriptionLength = data.ReadBits(11);
224 uint32 voiceChatLength = data.ReadBits(8);
225
226 lfgListSearchResult->Title = data.ReadString(titleLength);
227 lfgListSearchResult->Description = data.ReadString(descriptionLength);
228 lfgListSearchResult->VoiceChat = data.ReadString(voiceChatLength);
229
230 return data;
231}
232
234{
235 lfgListApplicant.emplace();
236
237 data >> lfgListApplicant->RideTicket;
238 lfgListApplicant->Comment = data.ReadString(data.ReadBits(9));
239
240 return data;
241}
242
244{
245 clubInfo.emplace();
246
247 data >> clubInfo->ClubFinderPostingID;
248 data >> clubInfo->ClubID;
249 data >> clubInfo->ClubFinderGUID;
250 clubInfo->ClubName = data.ReadString(data.ReadBits(12));
251
252 return data;
253}
254
256{
257 unused.emplace();
258
259 uint32 field_0Length = data.ReadBits(7);
260 data >> unused->field_104;
261 unused->field_0 = data.ReadString(field_0Length);
262
263 return data;
264}
265
267{
268 _worldPacket >> Header;
269 _worldPacket >> TargetCharacterGUID;
270 _worldPacket >> ReportType;
271 _worldPacket >> MajorCategory;
272 _worldPacket >> MinorCategoryFlags;
273 _worldPacket >> ChatLog;
274
275 uint32 noteLength = _worldPacket.ReadBits(10);
276 bool hasMailInfo = _worldPacket.ReadBit();
277 bool hasCalendarInfo = _worldPacket.ReadBit();
278 bool hasPetInfo = _worldPacket.ReadBit();
279 bool hasGuildInfo = _worldPacket.ReadBit();
280 bool hasLFGListSearchResult = _worldPacket.ReadBit();
281 bool hasLFGListApplicant = _worldPacket.ReadBit();
282 bool hasClubMessage = _worldPacket.ReadBit();
283 bool hasClubFinderResult = _worldPacket.ReadBit();
284 bool hasUnk910 = _worldPacket.ReadBit();
285
286 _worldPacket.ResetBitPos();
287
288 if (hasClubMessage)
289 {
290 CommunityMessage.emplace();
291 CommunityMessage->IsPlayerUsingVoice = _worldPacket.ReadBit();
292 _worldPacket.ResetBitPos();
293 }
294
295 _worldPacket >> HorusChatLog;
296
297 Note = _worldPacket.ReadString(noteLength);
298
299 if (hasMailInfo)
300 _worldPacket >> MailInfo;
301
302 if (hasCalendarInfo)
303 _worldPacket >> CalenderInfo;
304
305 if (hasPetInfo)
306 _worldPacket >> PetInfo;
307
308 if (hasGuildInfo)
309 _worldPacket >> GuildInfo;
310
311 if (hasLFGListSearchResult)
312 _worldPacket >> LFGListSearchResult;
313
314 if (hasLFGListApplicant)
315 _worldPacket >> LFGListApplicant;
316
317 if (hasClubFinderResult)
318 _worldPacket >> ClubFinderResult;
319
320 if (hasUnk910)
321 _worldPacket >> Unused910;
322}
323
325{
326 data >> complaintOffender.PlayerGuid;
327 data >> complaintOffender.RealmAddress;
328 data >> complaintOffender.TimeSinceOffence;
329
330 return data;
331}
332
334{
335 data >> chat.Command;
336 data >> chat.ChannelID;
337 chat.MessageLog = data.ReadString(data.ReadBits(12));
338
339 return data;
340}
341
343{
344 _worldPacket >> ComplaintType;
345 _worldPacket >> Offender;
346
347 switch (ComplaintType)
348 {
350 _worldPacket >> MailID;
351 break;
353 _worldPacket >> Chat;
354 break;
356 _worldPacket >> EventGuid;
357 _worldPacket >> InviteGuid;
358 break;
359 default:
360 break;
361 }
362}
363
365{
366 _worldPacket << uint32(ComplaintType);
367 _worldPacket << uint8(Result);
368
369 return &_worldPacket;
370}
371
373{
374 Type = _worldPacket.ReadBit();
375 uint32 diagLen = _worldPacket.ReadBits(12);
376 uint32 textLen = _worldPacket.ReadBits(10);
377 DiagInfo = _worldPacket.ReadString(diagLen);
378 Text = _worldPacket.ReadString(textLen);
379}
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:25
@ SUPPORT_SPAM_TYPE_CHAT
Definition: SupportMgr.h:83
@ SUPPORT_SPAM_TYPE_CALENDAR
Definition: SupportMgr.h:84
@ SUPPORT_SPAM_TYPE_MAIL
Definition: SupportMgr.h:82
ReportType
Definition: SupportMgr.h:29
WorldPackets::Ticket::SupportTicketChatLog ChatLog
Definition: SupportMgr.h:87
ByteBuffer & operator>>(ByteBuffer &data, WorldPackets::Ticket::SupportTicketHeader &header)
uint32 ReadBits(int32 bits)
Definition: ByteBuffer.h:209
void ResetBitPos()
Definition: ByteBuffer.h:166
std::string ReadString(uint32 length, bool requireValidUtf8=true)
Definition: ByteBuffer.cpp:78
bool ReadBit()
Definition: ByteBuffer.h:191
WorldPacket _worldPacket
Definition: Packet.h:43
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Array< SupportTicketChatLine, 255 > Lines
TaggedPosition<::Position::XYZ > Position
Definition: TicketPackets.h:33
Array< SupportTicketHorusChatLine, 255 > Lines