/*
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/
#ifndef TRINITYCORE_AUCTION_HOUSE_PACKETS_H
#define TRINITYCORE_AUCTION_HOUSE_PACKETS_H
#include "Packet.h"
#include "AddonPackets.h"
#include "DBCEnums.h"
#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
struct AuctionsBucketKey;
struct AuctionPosting;
enum class AuctionHouseBrowseMode : uint8;
enum class AuctionHouseFilterMask : uint32;
enum class AuctionHouseListType : uint8;
enum class AuctionHouseSortOrder : uint8;
namespace WorldPackets
{
namespace AuctionHouse
{
struct AuctionBucketKey
{
AuctionBucketKey() : ItemID(0), ItemLevel(0) { }
AuctionBucketKey(AuctionsBucketKey const& key) { *this = key; }
AuctionBucketKey& operator=(AuctionsBucketKey const& key);
uint32 ItemID = 0;
uint16 ItemLevel = 0;
Optional BattlePetSpeciesID;
Optional ItemSuffix;
};
struct AuctionListFilterSubClass
{
int32 ItemSubclass = 0;
uint64 InvTypeMask = 0;
};
struct AuctionListFilterClass
{
int32 ItemClass = 0;
Array SubClassFilters;
};
struct AuctionSortDef
{
AuctionHouseSortOrder SortOrder = AuctionHouseSortOrder(0);
bool ReverseSort = false;
};
struct AuctionItemForSale
{
ObjectGuid Guid;
uint32 UseCount = 0;
};
struct AuctionFavoriteInfo
{
uint32 Order = 0;
uint32 ItemID = 0;
uint32 ItemLevel = 0;
uint32 BattlePetSpeciesID = 0;
uint32 SuffixItemNameDescriptionID = 0;
};
struct AuctionOwnerNotification
{
void Initialize(::AuctionPosting const* auction);
int32 AuctionID = 0;
uint64 BidAmount = 0;
Item::ItemInstance Item;
};
struct BucketInfo
{
AuctionBucketKey Key;
int32 TotalQuantity = 0;
int32 RequiredLevel = 0;
uint64 MinPrice = 0;
std::vector ItemModifiedAppearanceIDs;
Optional MaxBattlePetQuality;
Optional MaxBattlePetLevel;
Optional BattlePetBreedID;
Optional BattlePetLevelMask;
bool ContainsOwnerItem = false;
bool ContainsOnlyCollectedAppearances = false;
};
struct AuctionItem
{
Optional Item;
int32 Count = 0;
int32 Charges = 0;
std::vector Enchantments;
int32 Flags = 0;
int32 AuctionID = 0;
ObjectGuid Owner;
Optional MinBid;
Optional MinIncrement;
Optional BuyoutPrice;
Optional UnitPrice;
int32 DurationLeft = 0;
uint8 DeleteReason = 0;
bool CensorServerSideInfo = false;
bool CensorBidInfo = false;
ObjectGuid ItemGuid;
ObjectGuid OwnerAccountID;
uint32 EndTime = 0;
uint32 Unused1110 = 0;
Optional Bidder;
Optional BidAmount;
std::vector Gems;
Optional AuctionBucketKey;
Optional Creator;
};
struct AuctionBidderNotification
{
void Initialize(int32 auctionHouseId, ::AuctionPosting const* auction, ::Item const* item);
int32 AuctionHouseID = 0;
int32 AuctionID = 0;
ObjectGuid Bidder;
Item::ItemInstance Item;
};
class AuctionBrowseQuery final : public ClientPacket
{
public:
explicit AuctionBrowseQuery(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_BROWSE_QUERY, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint32 Offset = 0;
uint8 MinLevel = 1;
uint8 MaxLevel = MAX_LEVEL;
uint8 Unused1007_1 = 0;
uint8 Unused1007_2 = 0;
AuctionHouseFilterMask Filters = AuctionHouseFilterMask(0);
std::vector KnownPets; // size checked separately in Read()
int8 MaxPetLevel = 0;
uint32 Unused1026 = 0;
Optional TaintedBy;
std::string Name;
Array ItemClassFilters;
Array Sorts;
};
class AuctionCancelCommoditiesPurchase final : public ClientPacket
{
public:
explicit AuctionCancelCommoditiesPurchase(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
Optional TaintedBy;
};
class AuctionConfirmCommoditiesPurchase final : public ClientPacket
{
public:
explicit AuctionConfirmCommoditiesPurchase(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
int32 ItemID = 0;
uint32 Quantity = 0;
Optional TaintedBy;
};
class AuctionHelloRequest final : public ClientPacket
{
public:
explicit AuctionHelloRequest(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_HELLO_REQUEST, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
};
class AuctionListBiddedItems final : public ClientPacket
{
public:
explicit AuctionListBiddedItems(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_BIDDED_ITEMS, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint32 Offset = 0;
Array AuctionIDs;
Array Sorts;
Optional TaintedBy;
};
class AuctionListBucketsByBucketKeys final : public ClientPacket
{
public:
explicit AuctionListBucketsByBucketKeys(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
Optional TaintedBy;
Array BucketKeys;
Array Sorts;
};
class AuctionListItemsByBucketKey final : public ClientPacket
{
public:
explicit AuctionListItemsByBucketKey(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint32 Offset = 0;
int8 Unknown830 = 0;
Optional TaintedBy;
Array Sorts;
AuctionBucketKey BucketKey;
};
class AuctionListItemsByItemID final : public ClientPacket
{
public:
explicit AuctionListItemsByItemID(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
int32 ItemID = 0;
int32 SuffixItemNameDescriptionID = 0;
uint32 Offset = 0;
Optional TaintedBy;
Array Sorts;
};
class AuctionListOwnedItems final : public ClientPacket
{
public:
explicit AuctionListOwnedItems(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_OWNED_ITEMS, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint32 Offset = 0;
Optional TaintedBy;
Array Sorts;
};
class AuctionPlaceBid final : public ClientPacket
{
public:
explicit AuctionPlaceBid(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_PLACE_BID, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint64 BidAmount = 0;
int32 AuctionID = 0;
Optional TaintedBy;
};
class AuctionRemoveItem final : public ClientPacket
{
public:
explicit AuctionRemoveItem(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_REMOVE_ITEM, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
int32 AuctionID = 0;
int32 ItemID = 0;
Optional TaintedBy;
};
class AuctionReplicateItems final : public ClientPacket
{
public:
explicit AuctionReplicateItems(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_REPLICATE_ITEMS, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint32 ChangeNumberGlobal = 0;
uint32 ChangeNumberCursor = 0;
uint32 ChangeNumberTombstone = 0;
uint32 Count = 0;
Optional TaintedBy;
};
class AuctionSellCommodity final : public ClientPacket
{
public:
explicit AuctionSellCommodity(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_SELL_COMMODITY, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
uint64 UnitPrice = 0;
uint32 RunTime = 0;
Optional TaintedBy;
Array Items;
};
class AuctionSellItem final : public ClientPacket
{
public:
explicit AuctionSellItem(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_SELL_ITEM, std::move(packet)) { }
void Read() override;
uint64 BuyoutPrice = 0;
ObjectGuid Auctioneer;
uint64 MinBid = 0;
uint32 RunTime = 0;
Optional TaintedBy;
Array Items;
};
class AuctionSetFavoriteItem final : public ClientPacket
{
public:
explicit AuctionSetFavoriteItem(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_SET_FAVORITE_ITEM, std::move(packet)) { }
void Read() override;
AuctionFavoriteInfo Item;
bool IsNotFavorite = true;
};
class AuctionGetCommodityQuote final : public ClientPacket
{
public:
explicit AuctionGetCommodityQuote(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_GET_COMMODITY_QUOTE, std::move(packet)) { }
void Read() override;
ObjectGuid Auctioneer;
int32 ItemID = 0;
uint32 Quantity = 0;
Optional TaintedBy;
};
class AuctionClosedNotification final : public ServerPacket
{
public:
explicit AuctionClosedNotification() : ServerPacket(SMSG_AUCTION_CLOSED_NOTIFICATION, 45) { }
WorldPacket const* Write() override;
AuctionOwnerNotification Info;
float ProceedsMailDelay = 0.0f;
bool Sold = true;
};
class AuctionCommandResult final : public ServerPacket
{
public:
explicit AuctionCommandResult() : ServerPacket(SMSG_AUCTION_COMMAND_RESULT, 4 + 4 + 4 + 8 + 4 + 8 + 8 + 8) { }
WorldPacket const* Write() override;
int32 AuctionID = 0; ///< the id of the auction that triggered this notification
int32 Command = 0; ///< the type of action that triggered this notification. Possible values are @ref AuctionAction
int32 ErrorCode = 0; ///< the error code that was generated when trying to perform the action. Possible values are @ref AuctionError
int32 BagResult = 0; ///< the bid error. Possible values are @ref AuctionError
ObjectGuid Guid; ///< the GUID of the bidder for this auction.
uint64 MinIncrement = 0; ///< the sum of outbid is (1% of current bid) * 5, if the bid is too small, then this value is 1 copper.
uint64 Money = 0; ///< the amount of money that the player bid in copper
uint32 DesiredDelay = 0;
};
class AuctionGetCommodityQuoteResult final : public ServerPacket
{
public:
explicit AuctionGetCommodityQuoteResult() : ServerPacket(SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT, 1 + 8 + 4 + 4 + 4 + 4) { }
WorldPacket const* Write() override;
Optional TotalPrice;
Optional Quantity;
Optional> QuoteDuration;
int32 ItemID = 0;
uint32 DesiredDelay = 0;
};
class AuctionHelloResponse final : public ServerPacket
{
public:
explicit AuctionHelloResponse() : ServerPacket(SMSG_AUCTION_HELLO_RESPONSE, 1 + 16) { }
WorldPacket const* Write() override;
ObjectGuid Auctioneer;
uint32 PurchaseDeliveryDelay = 0;
uint32 CancelDeliveryDelay = 0;
int32 AuctionHouseID = 0;
bool OpenForBusiness = true;
};
class AuctionListBiddedItemsResult final : public ServerPacket
{
public:
explicit AuctionListBiddedItemsResult() : ServerPacket(SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT, 149) { }
WorldPacket const* Write() override;
std::vector Items;
uint32 DesiredDelay = 0;
bool HasMoreResults = false;
};
class AuctionListBucketsResult final : public ServerPacket
{
public:
explicit AuctionListBucketsResult() : ServerPacket(SMSG_AUCTION_LIST_BUCKETS_RESULT) { }
WorldPacket const* Write() override;
std::vector Buckets;
uint32 DesiredDelay = 0;
int32 Unknown830_0 = 0;
int32 Unknown830_1 = 0;
AuctionHouseBrowseMode BrowseMode = AuctionHouseBrowseMode(0);
bool HasMoreResults = false;
};
class AuctionFavoriteList final : public ServerPacket
{
public:
explicit AuctionFavoriteList() : ServerPacket(SMSG_AUCTION_FAVORITE_LIST, 4 + 4 + 20 * 100) { }
WorldPacket const* Write() override;
uint32 DesiredDelay = 0;
std::vector Items;
};
class AuctionListItemsResult final : public ServerPacket
{
public:
explicit AuctionListItemsResult() : ServerPacket(SMSG_AUCTION_LIST_ITEMS_RESULT, 150) { }
WorldPacket const* Write() override;
std::vector Items;
uint32 Unknown830 = 0;
uint32 TotalCount = 0;
uint32 DesiredDelay = 0;
AuctionHouseListType ListType = AuctionHouseListType(0);
bool HasMoreResults = false;
AuctionBucketKey BucketKey;
};
class AuctionListOwnedItemsResult final : public ServerPacket
{
public:
explicit AuctionListOwnedItemsResult() : ServerPacket(SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT, 149) { }
WorldPacket const* Write() override;
std::vector Items;
std::vector SoldItems;
uint32 DesiredDelay = 0;
bool HasMoreResults = false;
};
class AuctionOutbidNotification final : public ServerPacket
{
public:
explicit AuctionOutbidNotification() : ServerPacket(SMSG_AUCTION_OUTBID_NOTIFICATION, 62) { }
WorldPacket const* Write() override;
AuctionBidderNotification Info;
uint64 BidAmount = 0;
uint64 MinIncrement = 0;
};
class AuctionOwnerBidNotification final : public ServerPacket
{
public:
explicit AuctionOwnerBidNotification() : ServerPacket(SMSG_AUCTION_OWNER_BID_NOTIFICATION, 62) { }
WorldPacket const* Write() override;
AuctionOwnerNotification Info;
ObjectGuid Bidder;
uint64 MinIncrement = 0;
};
class AuctionReplicateResponse final : public ServerPacket
{
public:
explicit AuctionReplicateResponse() : ServerPacket(SMSG_AUCTION_REPLICATE_RESPONSE, 165) { }
WorldPacket const* Write() override;
uint32 ChangeNumberCursor = 0;
uint32 ChangeNumberGlobal = 0;
uint32 DesiredDelay = 0;
uint32 ChangeNumberTombstone = 0;
uint32 Result = 0;
std::vector Items;
};
class AuctionWonNotification final : public ServerPacket
{
public:
explicit AuctionWonNotification() : ServerPacket(SMSG_AUCTION_WON_NOTIFICATION, 46) { }
WorldPacket const* Write() override;
AuctionBidderNotification Info;
};
}
}
#endif // TRINITYCORE_AUCTION_HOUSE_PACKETS_H