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
199 data.FlushBits();
200
201 if (auctionItem.Item)
202 data << *auctionItem.Item;
203
204 data << int32(auctionItem.Count);
205 data << int32(auctionItem.Charges);
206 data << int32(auctionItem.Flags);
207 data << int32(auctionItem.AuctionID);
208 data << auctionItem.Owner;
209 data << int32(auctionItem.DurationLeft);
210 data << uint8(auctionItem.DeleteReason);
211 data << uint32(auctionItem.Unused1110);
212
213 for (WorldPackets::Item::ItemEnchantData const& enchant : auctionItem.Enchantments)
214 data << enchant;
215
216 if (auctionItem.MinBid)
217 data << uint64(*auctionItem.MinBid);
218
219 if (auctionItem.MinIncrement)
220 data << uint64(*auctionItem.MinIncrement);
221
222 if (auctionItem.BuyoutPrice)
223 data << uint64(*auctionItem.BuyoutPrice);
224
225 if (auctionItem.UnitPrice)
226 data << uint64(*auctionItem.UnitPrice);
227
228 if (!auctionItem.CensorServerSideInfo)
229 {
230 data << auctionItem.ItemGuid;
231 data << auctionItem.OwnerAccountID;
232 data << int32(auctionItem.EndTime);
233 }
234
235 if (auctionItem.Creator)
236 data << *auctionItem.Creator;
237
238 if (!auctionItem.CensorBidInfo)
239 {
240 if (auctionItem.Bidder)
241 data << *auctionItem.Bidder;
242
243 if (auctionItem.BidAmount)
244 data << uint64(*auctionItem.BidAmount);
245 }
246
247 for (WorldPackets::Item::ItemGemData const& gem : auctionItem.Gems)
248 data << gem;
249
250 if (auctionItem.AuctionBucketKey)
251 data << *auctionItem.AuctionBucketKey;
252
253 return data;
254}
255
256void AuctionBidderNotification::Initialize(int32 auctionHouseId, ::AuctionPosting const* auction, ::Item const* item)
257{
258 AuctionHouseID = auctionHouseId;
259 AuctionID = auction->Id;
260 Item.Initialize(item);
261 Bidder = auction->Bidder;
262}
263
265{
266 data << int32(bidderNotification.AuctionHouseID);
267 data << int32(bidderNotification.AuctionID);
268 data << bidderNotification.Bidder;
269 data << bidderNotification.Item;
270 return data;
271}
272
274{
281 _worldPacket >> As<uint32>(Filters);
282
283 uint32 knownPetsSize = _worldPacket.read<uint32>();
284 uint32 const sizeLimit = sBattlePetSpeciesStore.GetNumRows() / (sizeof(decltype(KnownPets)::value_type) * 8) + 1;
285 if (knownPetsSize >= sizeLimit)
286 OnInvalidArraySize(knownPetsSize, sizeLimit);
287
288 KnownPets.resize(knownPetsSize);
291 for (uint8& knownPetMask : KnownPets)
292 _worldPacket >> knownPetMask;
293
295 _worldPacket >> SizedString::BitsSize<8>(Name);
296 _worldPacket >> BitsSize<3>(ItemClassFilters);
297 _worldPacket >> BitsSize<2>(Sorts);
298
299 if (TaintedBy)
301
303 for (AuctionListFilterClass& filterClass : ItemClassFilters)
304 _worldPacket >> filterClass;
305
306 for (AuctionSortDef& sortDef : Sorts)
307 _worldPacket >> sortDef;
308}
309
317
327
332
334{
338 _worldPacket >> BitsSize<7>(AuctionIDs);
339 _worldPacket >> BitsSize<2>(Sorts);
340
341 if (TaintedBy)
343
344 for (uint32& auctionID : AuctionIDs)
345 _worldPacket >> auctionID;
346
347 for (AuctionSortDef& sortDef : Sorts)
348 _worldPacket >> sortDef;
349}
350
352{
355 _worldPacket >> BitsSize<7>(BucketKeys);
356 _worldPacket >> BitsSize<2>(Sorts);
357
358 if (TaintedBy)
360
361 for (AuctionBucketKey& bucketKey : BucketKeys)
362 _worldPacket >> bucketKey;
363
364 for (AuctionSortDef& sortDef : Sorts)
365 _worldPacket >> sortDef;
366}
367
369{
374 _worldPacket >> BitsSize<2>(Sorts);
375
377
378 if (TaintedBy)
380
381 for (AuctionSortDef& sortDef : Sorts)
382 _worldPacket >> sortDef;
383}
384
386{
392 _worldPacket >> BitsSize<2>(Sorts);
393
394 if (TaintedBy)
396
397 for (AuctionSortDef& sortDef : Sorts)
398 _worldPacket >> sortDef;
399}
400
402{
406 _worldPacket >> BitsSize<2>(Sorts);
407
408 if (TaintedBy)
410
411 for (AuctionSortDef& sortDef : Sorts)
412 _worldPacket >> sortDef;
413}
414
424
434
446
448{
453 _worldPacket >> BitsSize<6>(Items);
454
455 if (TaintedBy)
457
458 for (AuctionItemForSale& item : Items)
459 _worldPacket >> item;
460}
461
463{
469 _worldPacket >> BitsSize<6>(Items);
470
471 if (TaintedBy)
473
474 for (AuctionItemForSale& item : Items)
475 _worldPacket >> item;
476}
477
483
493
495{
498 _worldPacket << Bits<1>(Sold);
500
501 return &_worldPacket;
502}
503
517
537
539{
541 _worldPacket << BitsSize<7>(Items);
543
544 for (AuctionFavoriteInfo const& favoriteInfo : Items)
545 _worldPacket << favoriteInfo;
546
547 return &_worldPacket;
548}
549
561
563{
564 _worldPacket << Size<uint32>(Items);
566 _worldPacket << Bits<1>(HasMoreResults);
568
569 for (AuctionItem const& item : Items)
570 _worldPacket << item;
571
572 return &_worldPacket;
573}
574
576{
577 _worldPacket << Size<uint32>(Buckets);
581 _worldPacket << Bits<1>(BrowseMode);
582 _worldPacket << Bits<1>(HasMoreResults);
584
585 for (BucketInfo const& bucketInfo : Buckets)
586 _worldPacket << bucketInfo;
587
588 return &_worldPacket;
589}
590
592{
593 {
594 _worldPacket << Size<uint32>(Items);
597 for (AuctionItem const& item : Items)
598 _worldPacket << item;
599 }
600
601 {
602 _worldPacket << Bits<2>(ListType);
603 _worldPacket << Bits<1>(HasMoreResults);
605
608 }
609
610 return &_worldPacket;
611}
612
614{
615 _worldPacket << Size<int32>(Items);
616 _worldPacket << Size<int32>(SoldItems);
618 _worldPacket << Bits<1>(HasMoreResults);
620
621 for (AuctionItem const& item : Items)
622 _worldPacket << item;
623
624 for (AuctionItem const& item : SoldItems)
625 _worldPacket << item;
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:130
void ResetBitPos()
Definition ByteBuffer.h:152
void FlushBits()
Definition ByteBuffer.h:141
Definition Item.h:179
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
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