aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-04-20 20:36:24 +0200
committerShauren <shauren.trinity@gmail.com>2020-04-20 20:36:24 +0200
commitaced88b09bd918b0ed17b6c5e8a6048788600d9d (patch)
tree80f699e135bdb890f12be5db99f49caec9e373cb /src/server/game/Server
parent7ef9acd765feeecb3752359958f717896bcbe37a (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.cpp98
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.h70
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp44
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h8
-rw-r--r--src/server/game/Server/WorldSession.h58
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);