TrinityCore
BattlegroundPackets.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 "BattlegroundPackets.h"
19
21{
30
31 return &_worldPacket;
32}
33
35{
36 _worldPacket >> HealerGuid;
37}
38
40{
41 _worldPacket >> HealerGuid;
42}
43
45{
46 _worldPacket << HealerGuid;
47 _worldPacket << int32(TimeLeft);
48
49 return &_worldPacket;
50}
51
53{
54 for (std::size_t i = 0; i < 2; ++i)
55 {
56 data << int32(ratingData.Prematch[i]);
57 data << int32(ratingData.Postmatch[i]);
58 data << int32(ratingData.PrematchMMR[i]);
59 }
60 return data;
61}
62
64{
65 data << uint32(honorData.HonorKills);
66 data << uint32(honorData.Deaths);
67 data << uint32(honorData.ContributionPoints);
68 return data;
69}
70
72{
73 data << int32(pvpStat.PvpStatID);
74 data << int32(pvpStat.PvpStatValue);
75 return data;
76}
77
79{
80 data << playerData.PlayerGUID;
81 data << uint32(playerData.Kills);
82 data << uint32(playerData.DamageDone);
83 data << uint32(playerData.HealingDone);
84 data << uint32(playerData.Stats.size());
85 data << int32(playerData.PrimaryTalentTree);
86 data << int8(playerData.Sex);
87 data << int32(playerData.Race);
88 data << int32(playerData.Class);
89 data << int32(playerData.CreatureID);
90 data << int32(playerData.HonorLevel);
91 data << int32(playerData.Role);
93 data << pvpStat;
94
95 data.WriteBit(playerData.Faction != 0);
96 data.WriteBit(playerData.IsInWorld);
97 data.WriteBit(playerData.Honor.has_value());
98 data.WriteBit(playerData.PreMatchRating.has_value());
99 data.WriteBit(playerData.RatingChange.has_value());
100 data.WriteBit(playerData.PreMatchMMR.has_value());
101 data.WriteBit(playerData.MmrChange.has_value());
102 data.WriteBit(playerData.PostMatchMMR.has_value());
103 data.FlushBits();
104
105 if (playerData.Honor)
106 data << *playerData.Honor;
107
108 if (playerData.PreMatchRating)
109 data << uint32(*playerData.PreMatchRating);
110
111 if (playerData.RatingChange)
112 data << int32(*playerData.RatingChange);
113
114 if (playerData.PreMatchMMR)
115 data << uint32(*playerData.PreMatchMMR);
116
117 if (playerData.MmrChange)
118 data << int32(*playerData.MmrChange);
119
120 if (playerData.PostMatchMMR)
121 data << uint32(*playerData.PostMatchMMR);
122
123 return data;
124}
125
127{
128 data.WriteBit(pvpLogData.Ratings.has_value());
129 data << uint32(pvpLogData.Statistics.size());
130 data.append(pvpLogData.PlayerCount.data(), pvpLogData.PlayerCount.size());
131
132 if (pvpLogData.Ratings.has_value())
133 data << *pvpLogData.Ratings;
134
136 data << player;
137
138 return data;
139}
140
142{
143 _worldPacket.reserve(Data.Statistics.size() * sizeof(PVPMatchStatistics::PVPMatchPlayerStatistics) + sizeof(PVPMatchStatistics));
144
145 _worldPacket << Data;
146
147 return &_worldPacket;
148}
149
151{
152 QueueIDs.resize(_worldPacket.read<uint32>());
153 _worldPacket >> Roles;
154 _worldPacket >> BlacklistMap[0] >> BlacklistMap[1];
155 for (uint64& queueId : QueueIDs)
156 _worldPacket >> queueId;
157}
158
160{
161 _worldPacket >> TeamSizeIndex;
162 _worldPacket >> Roles;
163}
164
166{
167 data << header.Ticket;
168 data << uint32(header.QueueID.size());
169 data << uint8(header.RangeMin);
170 data << uint8(header.RangeMax);
171 data << uint8(header.TeamSize);
172 data << uint32(header.InstanceID);
173 for (uint64 queueID : header.QueueID)
174 data << uint64(queueID);
175
176 data.WriteBit(header.RegisteredMatch);
177 data.WriteBit(header.TournamentRules);
178 data.FlushBits();
179 return data;
180}
181
183{
184 _worldPacket << Ticket;
185 return &_worldPacket;
186}
187
189{
190 _worldPacket << Hdr;
191 _worldPacket << uint32(Mapid);
192 _worldPacket << uint32(Timeout);
193 _worldPacket << uint8(Role);
194 return &_worldPacket;
195}
196
198{
199 _worldPacket << Hdr;
200 _worldPacket << uint32(Mapid);
201 _worldPacket << uint32(ShutdownTimer);
202 _worldPacket << uint32(StartTimer);
203 _worldPacket.WriteBit(ArenaFaction != 0);
204 _worldPacket.WriteBit(LeftEarly);
205 _worldPacket.FlushBits();
206 return &_worldPacket;
207}
208
210{
211 _worldPacket << Hdr;
212 _worldPacket << uint32(AverageWaitTime);
213 _worldPacket << uint32(WaitTime);
214 _worldPacket << int32(Unused920);
215 _worldPacket.WriteBit(AsGroup);
216 _worldPacket.WriteBit(EligibleForMatchmaking);
217 _worldPacket.WriteBit(SuspendedQueue);
218 _worldPacket.FlushBits();
219 return &_worldPacket;
220}
221
223{
224 _worldPacket << Ticket;
225 _worldPacket << uint64(QueueID);
226 _worldPacket << uint32(Reason);
227 _worldPacket << ClientID;
228 return &_worldPacket;
229}
230
232{
233 _worldPacket >> Ticket;
234 AcceptedInvite = _worldPacket.ReadBit();
235}
236
238{
239 _worldPacket >> ListID;
240}
241
243{
244 _worldPacket << BattlemasterGuid;
245 _worldPacket << int32(BattlemasterListID);
246 _worldPacket << uint8(MinLevel);
247 _worldPacket << uint8(MaxLevel);
248 _worldPacket << uint32(Battlefields.size());
249 if (!Battlefields.empty())
250 _worldPacket.append(Battlefields.data(), Battlefields.size());
251
252 _worldPacket.WriteBit(PvpAnywhere);
253 _worldPacket.WriteBit(HasRandomWinToday);
254 _worldPacket.FlushBits();
255 return &_worldPacket;
256}
257
259{
260 _worldPacket.WriteBit(RatedBattlegrounds);
261 _worldPacket.WriteBit(PugBattlegrounds);
262 _worldPacket.WriteBit(WargameBattlegrounds);
263 _worldPacket.WriteBit(WargameArenas);
264 _worldPacket.WriteBit(RatedArenas);
265 _worldPacket.WriteBit(ArenaSkirmish);
266 _worldPacket.WriteBit(SoloShuffle);
267 _worldPacket.WriteBit(RatedSoloShuffle);
268 _worldPacket.WriteBit(BattlegroundBlitz);
269 _worldPacket.WriteBit(RatedBattlegroundBlitz);
270 _worldPacket.FlushBits();
271 return &_worldPacket;
272}
273
275{
276 _worldPacket >> Offender;
277}
278
280{
281 _worldPacket << Offender;
282 _worldPacket << uint8(Result);
283 _worldPacket << uint8(NumBlackMarksOnOffender);
284 _worldPacket << uint8(NumPlayersIHaveReported);
285 return &_worldPacket;
286}
287
289{
290 data << playerPosition.Guid;
291 data << playerPosition.Pos;
292 data << int8(playerPosition.IconID);
293 data << int8(playerPosition.ArenaSlot);
294 return data;
295}
296
298{
299 _worldPacket << uint32(FlagCarriers.size());
300 for (BattlegroundPlayerPosition const& pos : FlagCarriers)
301 _worldPacket << pos;
302
303 return &_worldPacket;
304}
305
307{
308 _worldPacket << Guid;
309 return &_worldPacket;
310}
311
313{
314 _worldPacket << Guid;
315 return &_worldPacket;
316}
317
319{
320 _worldPacket << Guid;
321 return &_worldPacket;
322}
323
325{
326 data << int32(bracketInfo.PersonalRating);
327 data << int32(bracketInfo.Ranking);
328 data << int32(bracketInfo.SeasonPlayed);
329 data << int32(bracketInfo.SeasonWon);
330 data << int32(bracketInfo.Unused1);
331 data << int32(bracketInfo.Unused2);
332 data << int32(bracketInfo.WeeklyPlayed);
333 data << int32(bracketInfo.WeeklyWon);
334 data << int32(bracketInfo.RoundsSeasonPlayed);
335 data << int32(bracketInfo.RoundsSeasonWon);
336 data << int32(bracketInfo.RoundsWeeklyPlayed);
337 data << int32(bracketInfo.RoundsWeeklyWon);
338 data << int32(bracketInfo.BestWeeklyRating);
339 data << int32(bracketInfo.LastWeeksBestRating);
340 data << int32(bracketInfo.BestSeasonRating);
341 data << int32(bracketInfo.PvpTierID);
342 data << int32(bracketInfo.Unused3);
343 data << int32(bracketInfo.Unused4);
344 data << int32(bracketInfo.Rank);
345 data.WriteBit(bracketInfo.Disqualified);
346 data.FlushBits();
347
348 return data;
349}
350
352{
353 for (BracketInfo const& bracket : Bracket)
354 _worldPacket << bracket;
355
356 return &_worldPacket;
357}
358
360{
361 data << int32(ratedMatchDeserterPenalty.PersonalRatingChange);
362 data << int32(ratedMatchDeserterPenalty.QueuePenaltySpellID);
363 data << ratedMatchDeserterPenalty.QueuePenaltyDuration;
364 return data;
365}
366
368{
369 _worldPacket << uint32(MapID);
370 _worldPacket << uint8(State);
371 _worldPacket << StartTime;
372 _worldPacket << Duration;
373 _worldPacket << uint8(ArenaFaction);
374 _worldPacket << uint32(BattlemasterListID);
375 _worldPacket.WriteBit(Registered);
376 _worldPacket.WriteBit(AffectsRating);
377 _worldPacket.WriteBit(DeserterPenalty.has_value());
378 _worldPacket.FlushBits();
379
380 if (DeserterPenalty)
381 _worldPacket << *DeserterPenalty;
382
383 return &_worldPacket;
384}
385
387{
388 _worldPacket << uint8(State);
389
390 return &_worldPacket;
391}
392
394{
395 _worldPacket << uint8(Winner);
396 _worldPacket << Duration;
397 _worldPacket.WriteBit(LogData.has_value());
398 _worldPacket.WriteBits(SoloShuffleStatus, 2);
399 _worldPacket.FlushBits();
400
401 if (LogData)
402 _worldPacket << *LogData;
403
404 return &_worldPacket;
405}
406
408{
409 data << battlegroundCapturePointInfo.Guid;
410 data << battlegroundCapturePointInfo.Pos;
411 data << int8(battlegroundCapturePointInfo.State);
412
414 {
415 data << battlegroundCapturePointInfo.CaptureTime;
416 data << battlegroundCapturePointInfo.CaptureTotalDuration;
417 }
418
419 return data;
420}
421
423{
424 _worldPacket << CapturePointInfo;
425 return &_worldPacket;
426}
427
429{
430 _worldPacket << CapturePointGUID;
431 return &_worldPacket;
432}
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint64_t uint64
Definition: Define.h:141
uint32_t uint32
Definition: Define.h:142
void reserve(size_t ressize)
Definition: ByteBuffer.h:546
void append(T value)
Definition: ByteBuffer.h:143
bool WriteBit(bool bit)
Definition: ByteBuffer.h:175
void FlushBits()
Definition: ByteBuffer.h:155
WorldPacket const * Write() override
WorldPacket _worldPacket
Definition: Packet.h:43
time_t const StartTime
Definition: GameTime.cpp:26
ByteBuffer & operator<<(ByteBuffer &data, Movement::MonsterSplineFilterKey const &monsterSplineFilterKey)
std::vector< PVPMatchPlayerStatistics > Statistics
WorldPackets::Duration< Milliseconds, int32 > QueuePenaltyDuration