TrinityCore
Loading...
Searching...
No Matches
AuctionHousePackets.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 "AuctionHousePackets.h"
19#include "AuctionHouseMgr.h"
20#include "DB2Stores.h"
21#include "ObjectGuid.h"
22#include "PacketOperators.h"
23
25{
39
41{
42 data.ResetBitPos();
43 data >> Bits<20>(itemKey.ItemID);
44 data >> OptionalInit(itemKey.BattlePetSpeciesID);
45 data >> Bits<11>(itemKey.ItemLevel);
46 data >> OptionalInit(itemKey.ItemSuffix);
47
48 if (itemKey.BattlePetSpeciesID)
49 data >> *itemKey.BattlePetSpeciesID;
50
51 if (itemKey.ItemSuffix)
52 data >> *itemKey.ItemSuffix;
53
54 return data;
55}
56
58{
59 data << Bits<20>(itemKey.ItemID);
60 data << OptionalInit(itemKey.BattlePetSpeciesID);
61 data << Bits<11>(itemKey.ItemLevel);
62 data << OptionalInit(itemKey.ItemSuffix);
63 data.FlushBits();
64
65 if (itemKey.BattlePetSpeciesID)
66 data << uint16(*itemKey.BattlePetSpeciesID);
67
68 if (itemKey.ItemSuffix)
69 data << uint16(*itemKey.ItemSuffix);
70
71 return data;
72}
73
75{
76 data >> filterSubClass.InvTypeMask;
77 data >> filterSubClass.ItemSubclass;
78
79 return data;
80}
81
83{
84 data >> filterClass.ItemClass;
85 data >> BitsSize<5>(filterClass.SubClassFilters);
86 for (AuctionListFilterSubClass& filterSubClass : filterClass.SubClassFilters)
87 data >> filterSubClass;
88
89 return data;
90}
91
93{
94 data.ResetBitPos();
95 data >> As<uint8>(sortDef.SortOrder);
96 data >> Bits<1>(sortDef.ReverseSort);
97
98 return data;
99}
100
102{
103 data >> auctionItemForSale.Guid;
104 data >> auctionItemForSale.UseCount;
105
106 return data;
107}
108
110{
111 data >> favoriteInfo.Order;
112 data >> favoriteInfo.ItemID;
113 data >> favoriteInfo.ItemLevel;
114 data >> favoriteInfo.BattlePetSpeciesID;
115 data >> favoriteInfo.SuffixItemNameDescriptionID;
116
117 return data;
118}
119
121{
122 data << uint32(favoriteInfo.Order);
123 data << uint32(favoriteInfo.ItemID);
124 data << uint32(favoriteInfo.ItemLevel);
125 data << uint32(favoriteInfo.BattlePetSpeciesID);
126 data << uint32(favoriteInfo.SuffixItemNameDescriptionID);
127
128 return data;
129}
130
132{
133 AuctionID = auction->Id;
134 Item.Initialize(auction->Items[0]);
135 BidAmount = auction->BidAmount;
136}
137
139{
140 data << int32(ownerNotification.AuctionID);
141 data << uint64(ownerNotification.BidAmount);
142 data << ownerNotification.Item;
143
144 return data;
145}
146
147ByteBuffer& operator<<(ByteBuffer& data, BucketInfo const& bucketInfo)
148{
149 data << bucketInfo.Key;
150 data << int32(bucketInfo.TotalQuantity);
151 data << int32(bucketInfo.RequiredLevel);
152 data << uint64(bucketInfo.MinPrice);
153 data << Size<uint32>(bucketInfo.ItemModifiedAppearanceIDs);
154 if (!bucketInfo.ItemModifiedAppearanceIDs.empty())
155 data.append(bucketInfo.ItemModifiedAppearanceIDs.data(), bucketInfo.ItemModifiedAppearanceIDs.size());
156
157 data << OptionalInit(bucketInfo.MaxBattlePetQuality);
158 data << OptionalInit(bucketInfo.MaxBattlePetLevel);
159 data << OptionalInit(bucketInfo.BattlePetBreedID);
160 data << OptionalInit(bucketInfo.BattlePetLevelMask);
161 data << Bits<1>(bucketInfo.ContainsOwnerItem);
162 data << Bits<1>(bucketInfo.ContainsOnlyCollectedAppearances);
163 data.FlushBits();
164
165 if (bucketInfo.MaxBattlePetQuality)
166 data << uint8(*bucketInfo.MaxBattlePetQuality);
167
168 if (bucketInfo.MaxBattlePetLevel)
169 data << uint8(*bucketInfo.MaxBattlePetLevel);
170
171 if (bucketInfo.BattlePetBreedID)
172 data << uint8(*bucketInfo.BattlePetBreedID);
173
174 if (bucketInfo.BattlePetLevelMask)
175 data << uint32(*bucketInfo.BattlePetLevelMask);
176
177 return data;
178}
179
180ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
181{
182 data << OptionalInit(auctionItem.Item);
183 data << BitsSize<4>(auctionItem.Enchantments);
184 data << BitsSize<2>(auctionItem.Gems);
185 data << OptionalInit(auctionItem.MinBid);
186 data << OptionalInit(auctionItem.MinIncrement);
187 data << OptionalInit(auctionItem.BuyoutPrice);
188 data << OptionalInit(auctionItem.UnitPrice);
189 data << Bits<1>(auctionItem.CensorServerSideInfo);
190 data << Bits<1>(auctionItem.CensorBidInfo);
191 data << OptionalInit(auctionItem.AuctionBucketKey);
192 data << OptionalInit(auctionItem.Creator);
193 if (!auctionItem.CensorBidInfo)
194 {
195 data << OptionalInit(auctionItem.Bidder);
196 data << OptionalInit(auctionItem.BidAmount);
197
198 if (auctionItem.Bidder)
199 data << *auctionItem.Bidder;
200
201 if (auctionItem.BidAmount)
202 data << uint64(*auctionItem.BidAmount);
203 }
204
205 data.FlushBits();
206
207 data << int32(auctionItem.Count);
208 data << int32(auctionItem.Charges);
209 data << int32(auctionItem.Flags);
210 data << int32(auctionItem.AuctionID);
211 data << auctionItem.Owner;
212 data << int32(auctionItem.DurationLeft);
213 data << uint8(auctionItem.DeleteReason);
214 data << uint32(auctionItem.Unused1110);
215
216 if (auctionItem.Item)
217 data << *auctionItem.Item;
218
219 for (WorldPackets::Item::ItemEnchantData const& enchant : auctionItem.Enchantments)
220 data << enchant;
221
222 for (WorldPackets::Item::ItemGemData const& gem : auctionItem.Gems)
223 data << gem;
224
225 if (auctionItem.MinBid)
226 data << uint64(*auctionItem.MinBid);
227
228 if (auctionItem.MinIncrement)
229 data << uint64(*auctionItem.MinIncrement);
230
231 if (auctionItem.BuyoutPrice)
232 data << uint64(*auctionItem.BuyoutPrice);
233
234 if (auctionItem.UnitPrice)
235 data << uint64(*auctionItem.UnitPrice);
236
237 if (!auctionItem.CensorServerSideInfo)
238 {
239 data << auctionItem.ItemGuid;
240 data << auctionItem.OwnerAccountID;
241 data << int32(auctionItem.EndTime);
242 }
243
244 if (auctionItem.AuctionBucketKey)
245 data << *auctionItem.AuctionBucketKey;
246
247 if (auctionItem.Creator)
248 data << *auctionItem.Creator;
249
250 return data;
251}
252
253void AuctionBidderNotification::Initialize(int32 auctionHouseId, ::AuctionPosting const* auction, ::Item const* item)
254{
255 AuctionHouseID = auctionHouseId;
256 AuctionID = auction->Id;
257 Item.Initialize(item);
258 Bidder = auction->Bidder;
259}
260
262{
263 data << int32(bidderNotification.AuctionHouseID);
264 data << int32(bidderNotification.AuctionID);
265 data << bidderNotification.Bidder;
266 data << bidderNotification.Item;
267
268 return data;
269}
270
272{
279 _worldPacket >> As<uint32>(Filters);
280
281 uint32 knownPetsSize = _worldPacket.read<uint32>();
282 uint32 const sizeLimit = sBattlePetSpeciesStore.GetNumRows() / (sizeof(decltype(KnownPets)::value_type) * 8) + 1;
283 if (knownPetsSize >= sizeLimit)
284 OnInvalidArraySize(knownPetsSize, sizeLimit);
285
286 KnownPets.resize(knownPetsSize);
289 for (uint8& knownPetMask : KnownPets)
290 _worldPacket >> knownPetMask;
291
293 _worldPacket >> SizedString::BitsSize<8>(Name);
294 _worldPacket >> BitsSize<3>(ItemClassFilters);
295 _worldPacket >> BitsSize<2>(Sorts);
296
297 if (TaintedBy)
299
301 for (AuctionListFilterClass& filterClass : ItemClassFilters)
302 _worldPacket >> filterClass;
303
304 for (AuctionSortDef& sortDef : Sorts)
305 _worldPacket >> sortDef;
306}
307
315
325
330
332{
336 _worldPacket >> BitsSize<7>(AuctionIDs);
337 _worldPacket >> BitsSize<2>(Sorts);
338
339 if (TaintedBy)
341
342 for (uint32& auctionID : AuctionIDs)
343 _worldPacket >> auctionID;
344
345 for (AuctionSortDef& sortDef : Sorts)
346 _worldPacket >> sortDef;
347}
348
350{
353 _worldPacket >> BitsSize<7>(BucketKeys);
354 _worldPacket >> BitsSize<2>(Sorts);
355
356 if (TaintedBy)
358
359 for (AuctionBucketKey& bucketKey : BucketKeys)
360 _worldPacket >> bucketKey;
361
362 for (AuctionSortDef& sortDef : Sorts)
363 _worldPacket >> sortDef;
364}
365
367{
373 _worldPacket >> BitsSize<2>(Sorts);
374
375 if (TaintedBy)
377
378 for (AuctionSortDef& sortDef : Sorts)
379 _worldPacket >> sortDef;
380}
381
383{
389 _worldPacket >> BitsSize<2>(Sorts);
390
391 if (TaintedBy)
393
394 for (AuctionSortDef& sortDef : Sorts)
395 _worldPacket >> sortDef;
396}
397
399{
403 _worldPacket >> BitsSize<2>(Sorts);
404
405 if (TaintedBy)
407
408 for (AuctionSortDef& sortDef : Sorts)
409 _worldPacket >> sortDef;
410}
411
421
431
443
445{
450 _worldPacket >> BitsSize<6>(Items);
451
452 if (TaintedBy)
454
455 for (AuctionItemForSale& item : Items)
456 _worldPacket >> item;
457}
458
460{
466 _worldPacket >> BitsSize<6>(Items);
467
468 if (TaintedBy)
470
471 for (AuctionItemForSale& item : Items)
472 _worldPacket >> item;
473}
474
480
490
492{
495 _worldPacket << Bits<1>(Sold);
497
498 return &_worldPacket;
499}
500
514
534
536{
538 _worldPacket << BitsSize<7>(Items);
540
541 for (AuctionFavoriteInfo const& favoriteInfo : Items)
542 _worldPacket << favoriteInfo;
543
544 return &_worldPacket;
545}
546
558
560{
561 _worldPacket << Size<uint32>(Items);
563
564 for (AuctionItem const& item : Items)
565 _worldPacket << item;
566
567 _worldPacket << Bits<1>(HasMoreResults);
569
570 return &_worldPacket;
571}
572
574{
575 _worldPacket << Size<uint32>(Buckets);
579
580 for (BucketInfo const& bucketInfo : Buckets)
581 _worldPacket << bucketInfo;
582
583 _worldPacket << Bits<1>(BrowseMode);
584 _worldPacket << Bits<1>(HasMoreResults);
586
587 return &_worldPacket;
588}
589
591{
592 {
593 _worldPacket << Size<uint32>(Items);
596 for (AuctionItem const& item : Items)
597 _worldPacket << item;
598 }
599
600 {
601 _worldPacket << Bits<2>(ListType);
602 _worldPacket << Bits<1>(HasMoreResults);
604
607 }
608
609 return &_worldPacket;
610}
611
613{
614 _worldPacket << Size<int32>(Items);
615 _worldPacket << Size<int32>(SoldItems);
617
618 for (AuctionItem const& item : Items)
619 _worldPacket << item;
620
621 for (AuctionItem const& item : SoldItems)
622 _worldPacket << item;
623
624 _worldPacket << Bits<1>(HasMoreResults);
626
627 return &_worldPacket;
628}
629
638
647
649{
655 _worldPacket << Size<uint32>(Items);
656
657 for (AuctionItem const& item : Items)
658 _worldPacket << item;
659
660 return &_worldPacket;
661}
662
664{
666
667 return &_worldPacket;
668}
669}
DB2Storage< BattlePetSpeciesEntry > sBattlePetSpeciesStore("BattlePetSpecies.db2", &BattlePetSpeciesLoadInfo::Instance)
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
void append(T value)
Definition ByteBuffer.h:131
void ResetBitPos()
Definition ByteBuffer.h:153
void FlushBits()
Definition ByteBuffer.h:142
Definition Item.h:185
Array< AuctionListFilterClass, 7 > ItemClassFilters
uint64 Money
the amount of money that the player bid in copper
uint64 MinIncrement
the sum of outbid is (1% of current bid) * 5, if the bid is too small, then this value is 1 copper.
int32 BagResult
the bid error. Possible values are AuctionError
ObjectGuid Guid
the GUID of the bidder for this auction.
int32 ErrorCode
the error code that was generated when trying to perform the action. Possible values are AuctionError
int32 AuctionID
the id of the auction that triggered this notification
int32 Command
the type of action that triggered this notification. Possible values are AuctionAction
uint32 TotalQuantity
number of items (summing stack counts)
WorldPacket _worldPacket
Definition Packet.h:43
ByteBuffer & operator>>(ByteBuffer &data, AuctionBucketKey &itemKey)
ByteBuffer & operator<<(ByteBuffer &data, AuctionBucketKey const &itemKey)
DataWriter< Container > Data(Container const &value)
void OnInvalidArraySize(std::size_t requestedSize, std::size_t sizeLimit)
OptionalInitWriter< T > OptionalInit(Optional< T > const &value)
std::vector< Item * > Items
uint16 SuffixItemNameDescriptionId
void Initialize(int32 auctionHouseId, ::AuctionPosting const *auction, ::Item const *item)
AuctionBucketKey & operator=(AuctionsBucketKey const &key)
std::vector< Item::ItemGemData > Gems
Optional< WorldPackets::AuctionHouse::AuctionBucketKey > AuctionBucketKey
std::vector< Item::ItemEnchantData > Enchantments
Array< AuctionListFilterSubClass, 31 > SubClassFilters