diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-04-20 20:36:24 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-04-20 20:36:24 +0200 |
| commit | aced88b09bd918b0ed17b6c5e8a6048788600d9d (patch) | |
| tree | 80f699e135bdb890f12be5db99f49caec9e373cb /src/server/game/Server | |
| parent | 7ef9acd765feeecb3752359958f717896bcbe37a (diff) | |
Core/AuctionHouse: After taking a break at the start of patch 8.3 auction house is now back in business.
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/AuctionHousePackets.cpp | 98 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AuctionHousePackets.h | 70 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 44 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 8 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 58 |
5 files changed, 150 insertions, 128 deletions
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index 283978a3b36..41cd3912eb6 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -18,11 +18,26 @@ #include "AuctionHousePackets.h" #include "AuctionHouseMgr.h" #include "ObjectGuid.h" +#include "Util.h" namespace WorldPackets { namespace AuctionHouse { +AuctionBucketKey& AuctionBucketKey::operator=(AuctionsBucketKey const& key) +{ + ItemID = key.ItemId; + ItemLevel = key.ItemLevel; + + if (key.BattlePetSpeciesId) + BattlePetSpeciesID = key.BattlePetSpeciesId; + + if (key.SuffixItemNameDescriptionId) + SuffixItemNameDescriptionID = key.SuffixItemNameDescriptionId; + + return *this; +} + ByteBuffer& operator>>(ByteBuffer& data, AuctionBucketKey& itemKey) { data.ResetBitPos(); @@ -103,7 +118,7 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionFavoriteInfo& favoriteInfo) data >> favoriteInfo.ItemID; data >> favoriteInfo.ItemLevel; data >> favoriteInfo.BattlePetSpeciesID; - data >> favoriteInfo.ItemSuffix; + data >> favoriteInfo.SuffixItemNameDescriptionID; return data; } @@ -114,16 +129,16 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionFavoriteInfo const& favoriteInfo data << uint32(favoriteInfo.ItemID); data << uint32(favoriteInfo.ItemLevel); data << uint32(favoriteInfo.BattlePetSpeciesID); - data << uint32(favoriteInfo.ItemSuffix); + data << uint32(favoriteInfo.SuffixItemNameDescriptionID); return data; } -void AuctionOwnerNotification::Initialize(::AuctionEntry const* auction, ::Item const* item) +void AuctionOwnerNotification::Initialize(::AuctionPosting const* auction) { AuctionID = auction->Id; - Item.Initialize(item); - BidAmount = auction->bid; + Item.Initialize(auction->Items[0]); + BidAmount = auction->BidAmount; } ByteBuffer& operator<<(ByteBuffer& data, AuctionOwnerNotification const& ownerNotification) @@ -234,11 +249,11 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem) return data; } -void AuctionBidderNotification::Initialize(::AuctionEntry const* auction, ::Item const* item) +void AuctionBidderNotification::Initialize(::AuctionPosting const* auction, ::Item const* item) { AuctionID = auction->Id; Item.Initialize(item); - Bidder = ObjectGuid::Create<HighGuid::Player>(auction->bidder); + Bidder = auction->Bidder; } ByteBuffer& operator<<(ByteBuffer& data, AuctionBidderNotification const& bidderNotification) @@ -327,32 +342,31 @@ void AuctionListBidderItems::Read() _worldPacket >> auctionID; } -void AuctionListItemsByBucketKey::Read() +void AuctionListBucketsByBucketKeys::Read() { _worldPacket >> Auctioneer; - _worldPacket >> Offset; - _worldPacket >> Unknown830; if (_worldPacket.ReadBit()) TaintedBy.emplace(); + BucketKeys.resize(_worldPacket.ReadBits(7)); Sorts.resize(_worldPacket.ReadBits(2)); for (AuctionSortDef& sortDef : Sorts) _worldPacket >> sortDef; - _worldPacket >> BucketKey; - if (TaintedBy) _worldPacket >> *TaintedBy; + + for (AuctionBucketKey& bucketKey : BucketKeys) + _worldPacket >> bucketKey; } -void AuctionListItemsByItemID::Read() +void AuctionListItemsByBucketKey::Read() { _worldPacket >> Auctioneer; - _worldPacket >> ItemID; - _worldPacket >> SuffixItemNameDescriptionID; _worldPacket >> Offset; + _worldPacket >> Unknown830; if (_worldPacket.ReadBit()) TaintedBy.emplace(); @@ -362,18 +376,22 @@ void AuctionListItemsByItemID::Read() for (AuctionSortDef& sortDef : Sorts) _worldPacket >> sortDef; + _worldPacket >> BucketKey; + if (TaintedBy) _worldPacket >> *TaintedBy; } -void AuctionListItemsByItemKeys::Read() +void AuctionListItemsByItemID::Read() { _worldPacket >> Auctioneer; + _worldPacket >> ItemID; + _worldPacket >> SuffixItemNameDescriptionID; + _worldPacket >> Offset; if (_worldPacket.ReadBit()) TaintedBy.emplace(); - BucketKeys.resize(_worldPacket.ReadBits(7)); Sorts.resize(_worldPacket.ReadBits(2)); for (AuctionSortDef& sortDef : Sorts) @@ -381,9 +399,6 @@ void AuctionListItemsByItemKeys::Read() if (TaintedBy) _worldPacket >> *TaintedBy; - - for (AuctionBucketKey& bucketKey : BucketKeys) - _worldPacket >> bucketKey; } void AuctionListOwnerItems::Read() @@ -505,17 +520,6 @@ WorldPacket const* AuctionClosedNotification::Write() return &_worldPacket; } -void AuctionCommandResult::InitializeAuction(::AuctionEntry const* auction) -{ - if (auction) - { - AuctionID = auction->Id; - Money = auction->bid == auction->buyout ? 0 : auction->bid; - MinIncrement = auction->bid == auction->buyout ? 0 : auction->GetAuctionOutBid(); - Guid = ObjectGuid::Create<HighGuid::Player>(auction->bidder); - } -} - WorldPacket const* AuctionCommandResult::Write() { _worldPacket << int32(AuctionID); @@ -530,7 +534,7 @@ WorldPacket const* AuctionCommandResult::Write() return &_worldPacket; } -WorldPacket const* AuctionCommodityPriceUpdate::Write() +WorldPacket const* AuctionCommodityQuote::Write() { _worldPacket.WriteBit(TotalPrice.is_initialized()); _worldPacket.WriteBit(Quantity.is_initialized()); @@ -550,6 +554,18 @@ WorldPacket const* AuctionCommodityPriceUpdate::Write() return &_worldPacket; } +WorldPacket const* AuctionFavoriteItems::Write() +{ + _worldPacket << uint32(DesiredDelay); + _worldPacket.WriteBits(Items.size(), 7); + _worldPacket.FlushBits(); + + for (AuctionFavoriteInfo const& favoriteInfo : Items) + _worldPacket << favoriteInfo; + + return &_worldPacket; +} + WorldPacket const* AuctionHelloResponse::Write() { _worldPacket << Guid; @@ -572,13 +588,13 @@ WorldPacket const* AuctionListBidderItemsResult::Write() return &_worldPacket; } -WorldPacket const* AuctionListBucketItemsResult::Write() +WorldPacket const* AuctionListBucketsResult::Write() { _worldPacket << uint32(Buckets.size()); _worldPacket << uint32(DesiredDelay); _worldPacket << int32(Unknown830_0); _worldPacket << int32(Unknown830_1); - _worldPacket.WriteBits(BrowseMode, 1); + _worldPacket.WriteBits(AsUnderlyingType(BrowseMode), 1); _worldPacket.WriteBit(HasMoreResults); _worldPacket.FlushBits(); @@ -588,25 +604,13 @@ WorldPacket const* AuctionListBucketItemsResult::Write() return &_worldPacket; } -WorldPacket const* AuctionListFavoriteItemsResult::Write() -{ - _worldPacket << uint32(DesiredDelay); - _worldPacket.WriteBits(Items.size(), 7); - _worldPacket.FlushBits(); - - for (AuctionFavoriteInfo const& favoriteInfo : Items) - _worldPacket << favoriteInfo; - - return &_worldPacket; -} - WorldPacket const* AuctionListItemsResult::Write() { _worldPacket << uint32(Items.size()); _worldPacket << uint32(Unknown830); _worldPacket << uint32(TotalCount); _worldPacket << uint32(DesiredDelay); - _worldPacket.WriteBits(ListType, 2); + _worldPacket.WriteBits(AsUnderlyingType(ListType), 2); _worldPacket.WriteBit(HasMoreResults); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 809655ab234..c117319f79e 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -24,9 +24,12 @@ #include "ItemPacketsCommon.h" #include "ObjectGuid.h" -struct AuctionEntry; -enum class AuctionHouseSortOrder : uint8; +struct AuctionsBucketKey; +struct AuctionPosting; +enum class AuctionHouseBrowseMode : uint8; enum class AuctionHouseFilterMask : uint32; +enum class AuctionHouseListType : uint8; +enum class AuctionHouseSortOrder : uint8; namespace WorldPackets { @@ -34,6 +37,12 @@ namespace WorldPackets { struct AuctionBucketKey { + AuctionBucketKey() : ItemID(0), ItemLevel(0) { } + AuctionBucketKey(AuctionsBucketKey const& key) { *this = key; } + + AuctionBucketKey& operator=(AuctionBucketKey const& key) = default; + AuctionBucketKey& operator=(AuctionsBucketKey const& key); + uint32 ItemID = 0; uint16 ItemLevel = 0; Optional<uint16> BattlePetSpeciesID; @@ -70,12 +79,12 @@ namespace WorldPackets uint32 ItemID = 0; uint32 ItemLevel = 0; uint32 BattlePetSpeciesID = 0; - uint32 ItemSuffix = 0; + uint32 SuffixItemNameDescriptionID = 0; }; struct AuctionOwnerNotification { - void Initialize(::AuctionEntry const* auction, ::Item const* item); + void Initialize(::AuctionPosting const* auction); int32 AuctionID = 0; uint64 BidAmount = 0; @@ -123,7 +132,7 @@ namespace WorldPackets struct AuctionBidderNotification { - void Initialize(::AuctionEntry const* auction, ::Item const* item); + void Initialize(::AuctionPosting const* auction, ::Item const* item); int32 AuctionID = 0; ObjectGuid Bidder; @@ -198,46 +207,46 @@ namespace WorldPackets Optional<Addon::AddOnInfo> TaintedBy; }; - class AuctionListItemsByBucketKey final : public ClientPacket + class AuctionListBucketsByBucketKeys final : public ClientPacket { public: - AuctionListItemsByBucketKey(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY, std::move(packet)) { } + AuctionListBucketsByBucketKeys(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS, std::move(packet)) { } void Read() override; ObjectGuid Auctioneer; - uint32 Offset = 0; - int8 Unknown830 = 0; Optional<Addon::AddOnInfo> TaintedBy; + Array<AuctionBucketKey, 100> BucketKeys; Array<AuctionSortDef, 2> Sorts; - AuctionBucketKey BucketKey; }; - class AuctionListItemsByItemID final : public ClientPacket + class AuctionListItemsByBucketKey final : public ClientPacket { public: - AuctionListItemsByItemID(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID, std::move(packet)) { } + AuctionListItemsByBucketKey(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY, std::move(packet)) { } void Read() override; ObjectGuid Auctioneer; - int32 ItemID = 0; - int32 SuffixItemNameDescriptionID = 0; uint32 Offset = 0; + int8 Unknown830 = 0; Optional<Addon::AddOnInfo> TaintedBy; Array<AuctionSortDef, 2> Sorts; + AuctionBucketKey BucketKey; }; - class AuctionListItemsByItemKeys final : public ClientPacket + class AuctionListItemsByItemID final : public ClientPacket { public: - AuctionListItemsByItemKeys(WorldPacket&& packet) : ClientPacket(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_KEYS, std::move(packet)) { } + 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<Addon::AddOnInfo> TaintedBy; - Array<AuctionBucketKey, 100> BucketKeys; Array<AuctionSortDef, 2> Sorts; }; @@ -320,7 +329,7 @@ namespace WorldPackets uint64 MinBid = 0; uint32 RunTime = 0; Optional<Addon::AddOnInfo> TaintedBy; - Array<AuctionItemForSale, 64> Items; + Array<AuctionItemForSale, 1> Items; }; class AuctionSetFavoriteItem final : public ClientPacket @@ -364,15 +373,6 @@ namespace WorldPackets public: AuctionCommandResult() : ServerPacket(SMSG_AUCTION_COMMAND_RESULT, 4 + 4 + 4 + 8 + 4 + 8 + 8 + 8) { } - /** - * @fn void WorldPackets::AuctionHousePackets::AuctionCommandResult::InitializeAuction(AuctionEntry* auction); - * - * @brief Initialize the following fields: AuctionId, Bid, AuctionOutBid, Bidder - * - * @param auction The relevant auction object - */ - void InitializeAuction(::AuctionEntry const* auction); - WorldPacket const* Write() override; int32 AuctionID = 0; ///< the id of the auction that triggered this notification @@ -385,10 +385,10 @@ namespace WorldPackets uint32 DesiredDelay = 0; }; - class AuctionCommodityPriceUpdate final : public ServerPacket + class AuctionCommodityQuote final : public ServerPacket { public: - AuctionCommodityPriceUpdate() : ServerPacket(SMSG_AUCTION_COMMODITY_PRICE_UPDATE, 1 + 8 + 4 + 4 + 4 + 4) { } + AuctionCommodityQuote() : ServerPacket(SMSG_AUCTION_COMMODITY_QUOTE, 1 + 8 + 4 + 4 + 4 + 4) { } WorldPacket const* Write() override; @@ -422,10 +422,10 @@ namespace WorldPackets bool HasMoreResults = false; }; - class AuctionListBucketItemsResult final : public ServerPacket + class AuctionListBucketsResult final : public ServerPacket { public: - AuctionListBucketItemsResult() : ServerPacket(SMSG_AUCTION_LIST_BUCKET_ITEMS_RESULT) { } + AuctionListBucketsResult() : ServerPacket(SMSG_AUCTION_LIST_BUCKETS_RESULT) { } WorldPacket const* Write() override; @@ -433,14 +433,14 @@ namespace WorldPackets uint32 DesiredDelay = 0; int32 Unknown830_0 = 0; int32 Unknown830_1 = 0; - int32 BrowseMode = 0; + AuctionHouseBrowseMode BrowseMode = AuctionHouseBrowseMode(0); bool HasMoreResults = false; }; - class AuctionListFavoriteItemsResult final : public ServerPacket + class AuctionFavoriteItems final : public ServerPacket { public: - AuctionListFavoriteItemsResult() : ServerPacket(SMSG_AUCTION_LIST_FAVORITE_ITEMS_RESULT, 4 + 4 + 20 * 100) { } + AuctionFavoriteItems() : ServerPacket(SMSG_AUCTION_FAVORITE_ITEMS, 4 + 4 + 20 * 100) { } WorldPacket const* Write() override; @@ -459,7 +459,7 @@ namespace WorldPackets uint32 Unknown830 = 0; uint32 TotalCount = 0; uint32 DesiredDelay = 0; - uint32 ListType = 0; + AuctionHouseListType ListType = AuctionHouseListType(0); bool HasMoreResults = false; AuctionBucketKey BucketKey; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 3e9ae794b3a..306144a1ac8 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -163,22 +163,22 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ARTIFACT_SET_APPEARANCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArtifactSetAppearance); DEFINE_HANDLER(CMSG_ATTACK_STOP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode); DEFINE_HANDLER(CMSG_ATTACK_SWING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode); - DEFINE_HANDLER(CMSG_AUCTION_BROWSE_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_AUCTION_BROWSE_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionBrowseQuery); + DEFINE_HANDLER(CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionCancelCommoditiesPurchase); + DEFINE_HANDLER(CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionConfirmCommoditiesPurchase); DEFINE_HANDLER(CMSG_AUCTION_HELLO_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionHelloOpcode); - DEFINE_HANDLER(CMSG_AUCTION_LIST_BIDDER_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_KEYS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_LIST_OWNER_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_PLACE_BID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_REMOVE_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_REPLICATE_ITEMS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_SELL_COMMODITY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_SELL_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_SET_FAVORITE_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_AUCTION_START_COMMODITIES_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_AUCTION_LIST_BIDDER_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListBidderItems); + DEFINE_HANDLER(CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListBucketsByBucketKeys); + DEFINE_HANDLER(CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListItemsByBucketKey); + DEFINE_HANDLER(CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListItemsByItemID); + DEFINE_HANDLER(CMSG_AUCTION_LIST_OWNER_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionListOwnerItems); + DEFINE_HANDLER(CMSG_AUCTION_PLACE_BID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionPlaceBid); + DEFINE_HANDLER(CMSG_AUCTION_REMOVE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionRemoveItem); + DEFINE_HANDLER(CMSG_AUCTION_REPLICATE_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionReplicateItems); + DEFINE_HANDLER(CMSG_AUCTION_SELL_COMMODITY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionSellCommodity); + DEFINE_HANDLER(CMSG_AUCTION_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionSellItem); + DEFINE_HANDLER(CMSG_AUCTION_SET_FAVORITE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionSetFavoriteItem); + DEFINE_HANDLER(CMSG_AUCTION_START_COMMODITIES_PURCHASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionStartCommoditiesPurchase); DEFINE_HANDLER(CMSG_AUTH_CONTINUED_SESSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_AUTH_SESSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_AUTOBANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankItemOpcode); @@ -939,16 +939,16 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACK_SWING_LANDED_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_CLOSED_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMODITY_PRICE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMODITY_QUOTE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_FAVORITE_ITEMS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_HELLO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_BUCKET_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_FAVORITE_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_BUCKETS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_OUTBID_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_OWNER_BID_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_REPLICATE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_REPLICATE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_WON_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AURA_POINTS_DEPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AURA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 7c3722d9a1c..2c90b66c0db 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -72,7 +72,7 @@ enum OpcodeClient : uint16 CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D4, CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY = 0x34D1, CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID = 0x34D2, - CMSG_AUCTION_LIST_ITEMS_BY_ITEM_KEYS = 0x34D5, + CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS = 0x34D5, CMSG_AUCTION_LIST_OWNER_ITEMS = 0x34D3, CMSG_AUCTION_PLACE_BID = 0x34CF, CMSG_AUCTION_REMOVE_ITEM = 0x34CD, @@ -839,11 +839,11 @@ enum OpcodeServer : uint16 SMSG_ATTACK_SWING_LANDED_LOG = 0x273A, SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2731, SMSG_AUCTION_COMMAND_RESULT = 0x272E, - SMSG_AUCTION_COMMODITY_PRICE_UPDATE = 0x28C3, + SMSG_AUCTION_COMMODITY_QUOTE = 0x28C3, + SMSG_AUCTION_FAVORITE_ITEMS = 0x28CC, SMSG_AUCTION_HELLO_RESPONSE = 0x272C, SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x28C2, - SMSG_AUCTION_LIST_BUCKET_ITEMS_RESULT = 0x28BF, - SMSG_AUCTION_LIST_FAVORITE_ITEMS_RESULT = 0x28CC, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x28BF, SMSG_AUCTION_LIST_ITEMS_RESULT = 0x28C0, SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x28C1, SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2730, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 1f8b8100b02..9466c8682cf 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -25,6 +25,7 @@ #include "Common.h" #include "AsyncCallbackProcessor.h" #include "DatabaseEnvFwd.h" +#include "Duration.h" #include "LockedQueue.h" #include "ObjectGuid.h" #include "Packet.h" @@ -46,12 +47,15 @@ class Unit; class Warden; class WorldSession; class WorldSocket; -struct AuctionEntry; +struct AuctionPosting; struct BlackMarketTemplate; struct DeclinedName; struct ItemTemplate; struct MovementInfo; struct Position; +enum class AuctionCommand : int8; +enum class AuctionResult : int8; +enum InventoryResult : uint8; namespace lfg { @@ -92,14 +96,22 @@ namespace WorldPackets namespace AuctionHouse { + class AuctionBrowseQuery; + class AuctionCancelCommoditiesPurchase; + class AuctionConfirmCommoditiesPurchase; class AuctionHelloRequest; class AuctionListBidderItems; - class AuctionBrowseQuery; + class AuctionListBucketsByBucketKeys; + class AuctionListItemsByBucketKey; + class AuctionListItemsByItemID; class AuctionListOwnerItems; class AuctionPlaceBid; class AuctionRemoveItem; class AuctionReplicateItems; + class AuctionSellCommodity; class AuctionSellItem; + class AuctionSetFavoriteItem; + class AuctionStartCommoditiesPurchase; } namespace Auth @@ -1032,20 +1044,18 @@ class TC_GAME_API WorldSession void SendAuctionHello(ObjectGuid guid, Creature* unit); /** - * @fn void WorldSession::SendAuctionCommandResult(AuctionEntry* auction, uint32 Action, uint32 ErrorCode, uint32 bidError = 0); + * @fn void WorldSession::SendAuctionCommandResult(uint32 auctionId, uint32 action, uint32 errorCode, uint32 bagError = 0); * * @brief Notifies the client of the result of his last auction operation. It is called when the player bids, creates, or deletes an auction * - * @param auction The relevant auction object - * @param Action The action that was performed. - * @param ErrorCode The resulting error code. - * @param bidError (Optional) the bid error. + * @param auctionId The relevant auction id + * @param command The action that was performed. + * @param errorCode The resulting error code. + * @param bagError (Optional) InventoryResult. */ - void SendAuctionCommandResult(AuctionEntry* auction, uint32 Action, uint32 ErrorCode, uint32 bidError = 0); - void SendAuctionOutBidNotification(AuctionEntry const* auction, Item const* item); - void SendAuctionClosedNotification(AuctionEntry const* auction, float mailDelay, bool sold, Item const* item); - void SendAuctionWonNotification(AuctionEntry const* auction, Item const* item); - void SendAuctionOwnerBidNotification(AuctionEntry const* auction, Item const* item); + void SendAuctionCommandResult(uint32 auctionId, AuctionCommand command, AuctionResult errorCode, Milliseconds delayForNextAction, InventoryResult bagError = InventoryResult(0)); + void SendAuctionClosedNotification(AuctionPosting const* auction, float mailDelay, bool sold); + void SendAuctionOwnerBidNotification(AuctionPosting const* auction); // Black Market void SendBlackMarketOpenResult(ObjectGuid guid, Creature* auctioneer); @@ -1377,14 +1387,22 @@ class TC_GAME_API WorldSession void HandleSetTradeItemOpcode(WorldPackets::Trade::SetTradeItem& setTradeItem); void HandleUnacceptTradeOpcode(WorldPackets::Trade::UnacceptTrade& unacceptTrade); - void HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& packet); - void HandleAuctionListItems(WorldPackets::AuctionHouse::AuctionBrowseQuery& browseQuery); - void HandleAuctionListBidderItems(WorldPackets::AuctionHouse::AuctionListBidderItems& packet); - void HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSellItem& packet); - void HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRemoveItem& packet); - void HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::AuctionListOwnerItems& packet); - void HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlaceBid& packet); - void HandleReplicateItems(WorldPackets::AuctionHouse::AuctionReplicateItems& packet); + void HandleAuctionBrowseQuery(WorldPackets::AuctionHouse::AuctionBrowseQuery& browseQuery); + void HandleAuctionCancelCommoditiesPurchase(WorldPackets::AuctionHouse::AuctionCancelCommoditiesPurchase& cancelCommoditiesPurchase); + void HandleAuctionConfirmCommoditiesPurchase(WorldPackets::AuctionHouse::AuctionConfirmCommoditiesPurchase& confirmCommoditiesPurchase); + void HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& hello); + void HandleAuctionListBidderItems(WorldPackets::AuctionHouse::AuctionListBidderItems& listBidderItems); + void HandleAuctionListBucketsByBucketKeys(WorldPackets::AuctionHouse::AuctionListBucketsByBucketKeys& listBucketsByBucketKeys); + void HandleAuctionListItemsByBucketKey(WorldPackets::AuctionHouse::AuctionListItemsByBucketKey& listItemsByBucketKey); + void HandleAuctionListItemsByItemID(WorldPackets::AuctionHouse::AuctionListItemsByItemID& listItemsByItemID); + void HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::AuctionListOwnerItems& listOwnerItems); + void HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlaceBid& placeBid); + void HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRemoveItem& removeItem); + void HandleAuctionReplicateItems(WorldPackets::AuctionHouse::AuctionReplicateItems& replicateItems); + void HandleAuctionSellCommodity(WorldPackets::AuctionHouse::AuctionSellCommodity& sellCommodity); + void HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSellItem& sellItem); + void HandleAuctionSetFavoriteItem(WorldPackets::AuctionHouse::AuctionSetFavoriteItem& setFavoriteItem); + void HandleAuctionStartCommoditiesPurchase(WorldPackets::AuctionHouse::AuctionStartCommoditiesPurchase& startCommoditiesPurchase); // Bank void HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet); |
