TrinityCore
LFGPackets.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 "LFGPackets.h"
19
21{
23 bool hasPartyIndex = _worldPacket.ReadBit();
27 if (hasPartyIndex)
28 _worldPacket >> PartyIndex.emplace();
29 for (uint32& slot : Slots)
30 _worldPacket >> slot;
31}
32
34{
35 _worldPacket >> Ticket;
36}
37
39{
40 _worldPacket >> Ticket;
41 _worldPacket >> InstanceID;
42 _worldPacket >> ProposalID;
43 Accepted = _worldPacket.ReadBit();
44}
45
47{
48 bool hasPartyIndex = _worldPacket.ReadBit();
49 _worldPacket >> RolesDesired;
50 if (hasPartyIndex)
51 _worldPacket >> PartyIndex.emplace();
52}
53
55{
56 Vote = _worldPacket.ReadBit();
57}
58
60{
61 TeleportOut = _worldPacket.ReadBit();
62}
63
65{
66 Player = _worldPacket.ReadBit();
67 if (_worldPacket.ReadBit())
68 _worldPacket >> PartyIndex.emplace();
69}
70
72{
73 data << uint32(lfgBlackListSlot.Slot);
74 data << uint32(lfgBlackListSlot.Reason);
75 data << int32(lfgBlackListSlot.SubReason1);
76 data << int32(lfgBlackListSlot.SubReason2);
77 data << uint32(lfgBlackListSlot.SoftLock);
78
79 return data;
80}
81
83{
84 data.WriteBit(blackList.PlayerGuid.has_value());
85 data << uint32(blackList.Slot.size());
86 if (blackList.PlayerGuid)
87 data << *blackList.PlayerGuid;
88
89 for (WorldPackets::LFG::LFGBlackListSlot const& slot : blackList.Slot)
90 data << slot;
91
92 return data;
93}
94
96{
97 data << int32(playerQuestRewardItem.ItemID);
98 data << int32(playerQuestRewardItem.Quantity);
99
100 return data;
101}
102
104{
105 data << int32(playerQuestRewardCurrency.CurrencyID);
106 data << int32(playerQuestRewardCurrency.Quantity);
107
108 return data;
109}
110
112{
113 data << uint8(playerQuestReward.Mask);
114 data << int32(playerQuestReward.RewardMoney);
115 data << int32(playerQuestReward.RewardXP);
116 data << uint32(playerQuestReward.Item.size());
117 data << uint32(playerQuestReward.Currency.size());
118 data << uint32(playerQuestReward.BonusCurrency.size());
119
120 for (WorldPackets::LFG::LfgPlayerQuestRewardItem const& item : playerQuestReward.Item)
121 data << item;
122
123 for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& currency : playerQuestReward.Currency)
124 data << currency;
125
126 for (WorldPackets::LFG::LfgPlayerQuestRewardCurrency const& bonusCurrency : playerQuestReward.BonusCurrency)
127 data << bonusCurrency;
128
129 data.WriteBit(playerQuestReward.RewardSpellID.has_value());
130 data.WriteBit(playerQuestReward.Unused1.has_value());
131 data.WriteBit(playerQuestReward.Unused2.has_value());
132 data.WriteBit(playerQuestReward.Honor.has_value());
133 data.FlushBits();
134
135 if (playerQuestReward.RewardSpellID)
136 data << int32(*playerQuestReward.RewardSpellID);
137
138 if (playerQuestReward.Unused1)
139 data << int32(*playerQuestReward.Unused1);
140
141 if (playerQuestReward.Unused2)
142 data << uint64(*playerQuestReward.Unused2);
143
144 if (playerQuestReward.Honor)
145 data << int32(*playerQuestReward.Honor);
146
147 return data;
148}
149
151{
152 data << uint32(playerDungeonInfo.Slot);
153 data << int32(playerDungeonInfo.CompletionQuantity);
154 data << int32(playerDungeonInfo.CompletionLimit);
155 data << int32(playerDungeonInfo.CompletionCurrencyID);
156 data << int32(playerDungeonInfo.SpecificQuantity);
157 data << int32(playerDungeonInfo.SpecificLimit);
158 data << int32(playerDungeonInfo.OverallQuantity);
159 data << int32(playerDungeonInfo.OverallLimit);
160 data << int32(playerDungeonInfo.PurseWeeklyQuantity);
161 data << int32(playerDungeonInfo.PurseWeeklyLimit);
162 data << int32(playerDungeonInfo.PurseQuantity);
163 data << int32(playerDungeonInfo.PurseLimit);
164 data << int32(playerDungeonInfo.Quantity);
165 data << uint32(playerDungeonInfo.CompletedMask);
166 data << uint32(playerDungeonInfo.EncounterMask);
167 data << uint32(playerDungeonInfo.ShortageReward.size());
168 data.WriteBit(playerDungeonInfo.FirstReward);
169 data.WriteBit(playerDungeonInfo.ShortageEligible);
170 data.FlushBits();
171
172 data << playerDungeonInfo.Rewards;
173 for (WorldPackets::LFG::LfgPlayerQuestReward const& shortageReward : playerDungeonInfo.ShortageReward)
174 data << shortageReward;
175
176 return data;
177}
178
180{
181 _worldPacket << uint32(Dungeon.size());
182 _worldPacket << BlackList;
183 for (LfgPlayerDungeonInfo const& playerDungeonInfo : Dungeon)
184 _worldPacket << playerDungeonInfo;
185
186 return &_worldPacket;
187}
188
190{
191 _worldPacket << uint32(Player.size());
192 for (WorldPackets::LFG::LFGBlackList const& player : Player)
193 _worldPacket << player;
194
195 return &_worldPacket;
196}
197
199{
200 _worldPacket << Ticket;
201 _worldPacket << uint8(SubType);
202 _worldPacket << uint8(Reason);
203 _worldPacket << uint32(Slots.size());
204 _worldPacket << uint8(RequestedRoles);
205 _worldPacket << uint32(SuspendedPlayers.size());
206 _worldPacket << uint32(QueueMapID);
207
208 for (uint32 slot : Slots)
209 _worldPacket << uint32(slot);
210
211 for (ObjectGuid const& suspendedPlayer : SuspendedPlayers)
212 _worldPacket << suspendedPlayer;
213
214 _worldPacket.WriteBit(IsParty);
215 _worldPacket.WriteBit(NotifyUI);
216 _worldPacket.WriteBit(Joined);
217 _worldPacket.WriteBit(LfgJoined);
218 _worldPacket.WriteBit(Queued);
219 _worldPacket.WriteBit(Unused);
220 _worldPacket.FlushBits();
221
222 return &_worldPacket;
223}
224
226{
227 _worldPacket << Player;
228 _worldPacket << uint8(RoleMask);
229 _worldPacket.WriteBit(Accepted);
230 _worldPacket.FlushBits();
231
232 return &_worldPacket;
233}
234
236{
237 data << lfgRoleCheckUpdateMember.Guid;
238 data << uint8(lfgRoleCheckUpdateMember.RolesDesired);
239 data << uint8(lfgRoleCheckUpdateMember.Level);
240 data.WriteBit(lfgRoleCheckUpdateMember.RoleCheckComplete);
241 data.FlushBits();
242
243 return data;
244}
245
247{
248 _worldPacket << uint8(PartyIndex);
249 _worldPacket << uint8(RoleCheckStatus);
250 _worldPacket << uint32(JoinSlots.size());
251 _worldPacket << uint32(BgQueueIDs.size());
252 _worldPacket << int32(GroupFinderActivityID);
253 _worldPacket << uint32(Members.size());
254
255 for (uint32 slot : JoinSlots)
256 _worldPacket << uint32(slot);
257
258 for (uint64 bgQueueID : BgQueueIDs)
259 _worldPacket << uint64(bgQueueID);
260
261 _worldPacket.WriteBit(IsBeginning);
262 _worldPacket.WriteBit(IsRequeue);
263 _worldPacket.FlushBits();
264
265 for (LFGRoleCheckUpdateMember const& member : Members)
266 _worldPacket << member;
267
268 return &_worldPacket;
269}
270
272{
273 _worldPacket << Ticket;
274 _worldPacket << uint8(Result);
275 _worldPacket << uint8(ResultDetail);
276 _worldPacket << uint32(BlackList.size());
277 _worldPacket << uint32(BlackListNames.size());
278
279 for (LFGBlackList const& blackList : BlackList)
280 _worldPacket << blackList;
281
282 for (std::string const* str : BlackListNames)
283 _worldPacket.WriteBits(str->length() + 1, 24);
284
285 for (std::string const* str : BlackListNames)
286 if (!str->empty())
287 _worldPacket << *str;
288
289 return &_worldPacket;
290}
291
293{
294 _worldPacket << Ticket;
295 _worldPacket << uint32(Slot);
296 _worldPacket << uint32(AvgWaitTimeMe);
297 _worldPacket << uint32(AvgWaitTime);
298
299 for (uint32 i = 0; i < 3; ++i)
300 {
301 _worldPacket << uint32(AvgWaitTimeByRole[i]);
302 _worldPacket << uint8(LastNeeded[i]);
303 }
304 _worldPacket << uint32(QueuedTime);
305
306 return &_worldPacket;
307}
308
310{
311 data.WriteBit(lfgPlayerRewards.RewardItem.has_value());
312 data.WriteBit(lfgPlayerRewards.RewardCurrency.has_value());
313 if (lfgPlayerRewards.RewardItem)
314 data << *lfgPlayerRewards.RewardItem;
315
316 data << uint32(lfgPlayerRewards.Quantity);
317 data << int32(lfgPlayerRewards.BonusQuantity);
318 if (lfgPlayerRewards.RewardCurrency)
319 data << int32(*lfgPlayerRewards.RewardCurrency);
320
321 return data;
322}
323
325{
326 _worldPacket << uint32(QueuedSlot);
327 _worldPacket << uint32(ActualSlot);
328 _worldPacket << int32(RewardMoney);
329 _worldPacket << int32(AddedXP);
330 _worldPacket << uint32(Rewards.size());
331
332 for (LFGPlayerRewards const& reward : Rewards)
333 _worldPacket << reward;
334
335 return &_worldPacket;
336}
337
339{
340 data.WriteBit(lfgBootInfo.VoteInProgress);
341 data.WriteBit(lfgBootInfo.VotePassed);
342 data.WriteBit(lfgBootInfo.MyVoteCompleted);
343 data.WriteBit(lfgBootInfo.MyVote);
344 data.WriteBits(lfgBootInfo.Reason.length(), 8);
345 data << lfgBootInfo.Target;
346 data << uint32(lfgBootInfo.TotalVotes);
347 data << uint32(lfgBootInfo.BootVotes);
348 data << int32(lfgBootInfo.TimeLeft);
349 data << uint32(lfgBootInfo.VotesNeeded);
350 data.WriteString(lfgBootInfo.Reason);
351
352 return data;
353}
354
356{
357 _worldPacket << Info;
358
359 return &_worldPacket;
360}
361
363{
364 data << uint8(lfgProposalUpdatePlayer.Roles);
365 data.WriteBit(lfgProposalUpdatePlayer.Me);
366 data.WriteBit(lfgProposalUpdatePlayer.SameParty);
367 data.WriteBit(lfgProposalUpdatePlayer.MyParty);
368 data.WriteBit(lfgProposalUpdatePlayer.Responded);
369 data.WriteBit(lfgProposalUpdatePlayer.Accepted);
370 data.FlushBits();
371
372 return data;
373}
374
376{
377 _worldPacket << Ticket;
378 _worldPacket << uint64(InstanceID);
379 _worldPacket << uint32(ProposalID);
380 _worldPacket << uint32(Slot);
381 _worldPacket << int8(State);
382 _worldPacket << uint32(CompletedMask);
383 _worldPacket << uint32(EncounterMask);
384 _worldPacket << uint32(Players.size());
385 _worldPacket << uint8(Unused);
386 _worldPacket.WriteBit(ValidCompletedMask);
387 _worldPacket.WriteBit(ProposalSilent);
388 _worldPacket.WriteBit(IsRequeue);
389 _worldPacket.FlushBits();
390
391 for (LFGProposalUpdatePlayer const& player : Players)
392 _worldPacket << player;
393
394 return &_worldPacket;
395}
396
398{
399 _worldPacket << uint32(Slot);
400
401 return &_worldPacket;
402}
403
405{
406 _worldPacket.WriteBits(Reason, 4);
407 _worldPacket.FlushBits();
408
409 return &_worldPacket;
410}
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 WriteString(std::string const &str)
Definition: ByteBuffer.h:500
bool WriteBit(bool bit)
Definition: ByteBuffer.h:175
void WriteBits(std::size_t value, int32 bits)
Definition: ByteBuffer.h:203
void FlushBits()
Definition: ByteBuffer.h:155
bool ReadBit()
Definition: ByteBuffer.h:191
void resize(size_type newSize)
void Read() override
Definition: LFGPackets.cpp:20
Array< uint32, 50 > Slots
Definition: LFGPackets.h:47
Optional< uint8 > PartyIndex
Definition: LFGPackets.h:45
WorldPacket const * Write() override
Definition: LFGPackets.cpp:271
WorldPacket const * Write() override
Definition: LFGPackets.cpp:397
WorldPacket const * Write() override
Definition: LFGPackets.cpp:324
WorldPacket const * Write() override
Definition: LFGPackets.cpp:375
WorldPacket const * Write() override
Definition: LFGPackets.cpp:292
WorldPacket const * Write() override
Definition: LFGPackets.cpp:246
WorldPacket const * Write() override
Definition: LFGPackets.cpp:404
WorldPacket const * Write() override
Definition: LFGPackets.cpp:198
WorldPacket const * Write() override
Definition: LFGPackets.cpp:355
WorldPacket const * Write() override
Definition: LFGPackets.cpp:189
WorldPacket const * Write() override
Definition: LFGPackets.cpp:179
WorldPacket const * Write() override
Definition: LFGPackets.cpp:225
WorldPacket _worldPacket
Definition: Packet.h:43
ByteBuffer & operator<<(ByteBuffer &data, Movement::MonsterSplineFilterKey const &monsterSplineFilterKey)
Optional< ObjectGuid > PlayerGuid
Definition: LFGPackets.h:138
std::vector< LFGBlackListSlot > Slot
Definition: LFGPackets.h:139
Optional< Item::ItemInstance > RewardItem
Definition: LFGPackets.h:328
std::vector< LfgPlayerQuestReward > ShortageReward
Definition: LFGPackets.h:194
std::vector< LfgPlayerQuestRewardCurrency > Currency
Definition: LFGPackets.h:166
std::vector< LfgPlayerQuestRewardItem > Item
Definition: LFGPackets.h:165
std::vector< LfgPlayerQuestRewardCurrency > BonusCurrency
Definition: LFGPackets.h:167