Core/AuctionHouse: Implement some missing packet fields

This commit is contained in:
Shauren
2026-08-17 23:41:20 +02:00
parent 6b49871ba9
commit 44f04a4da2
3 changed files with 32 additions and 31 deletions
@@ -346,7 +346,7 @@ public:
using Sorter = typename T::Sorter;
AuctionsResultBuilder(uint32 offset, LocaleConstant locale, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts, AuctionHouseResultLimits maxResults)
: _offset(offset), _sorter(locale, sorts), _maxResults(AsUnderlyingType(maxResults)), _hasMoreResults(false)
: _offset(offset), _sorter(locale, sorts), _maxResults(AsUnderlyingType(maxResults)), _totalCount(0)
{
_items.reserve(_maxResults + offset + 1);
}
@@ -355,12 +355,10 @@ public:
{
auto where = std::ranges::lower_bound(_items, item, std::cref(_sorter));
++_totalCount;
_items.insert(where, item);
if (_items.size() > _maxResults + _offset)
{
_items.pop_back();
_hasMoreResults = true;
}
}
std::span<T const* const> GetResultRange() const
@@ -368,17 +366,22 @@ public:
return std::span(_items.begin() + _offset, _items.end());
}
std::size_t GetTotalCount() const
{
return _totalCount;
}
bool HasMoreResults() const
{
return _hasMoreResults;
return _totalCount > _items.size();
}
private:
uint32 _offset;
Sorter _sorter;
std::size_t _maxResults;
std::size_t _totalCount;
std::vector<T const*> _items;
bool _hasMoreResults;
};
AuctionHouseMgr::AuctionHouseMgr() : mHordeAuctions(6), mAllianceAuctions(2), mNeutralAuctions(1), mGoblinAuctions(7), _replicateIdGenerator(0)
@@ -1280,11 +1283,12 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis
for (AuctionsBucketData const* resultBucket : builder.GetResultRange())
{
listBucketsResult.Buckets.emplace_back();
WorldPackets::AuctionHouse::BucketInfo& bucketInfo = listBucketsResult.Buckets.back();
WorldPackets::AuctionHouse::BucketInfo& bucketInfo = listBucketsResult.Buckets.emplace_back();
resultBucket->BuildBucketInfo(&bucketInfo, player);
}
listBucketsResult.Filters = filters;
listBucketsResult.TotalCount = builder.GetTotalCount();
listBucketsResult.HasMoreResults = builder.HasMoreResults();
}
@@ -1306,11 +1310,11 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis
for (AuctionsBucketData const* resultBucket : buckets)
{
listBucketsResult.Buckets.emplace_back();
WorldPackets::AuctionHouse::BucketInfo& bucketInfo = listBucketsResult.Buckets.back();
WorldPackets::AuctionHouse::BucketInfo& bucketInfo = listBucketsResult.Buckets.emplace_back();
resultBucket->BuildBucketInfo(&bucketInfo, player);
}
listBucketsResult.TotalCount = buckets.size();
listBucketsResult.HasMoreResults = false;
}
@@ -1328,8 +1332,7 @@ void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::Auctio
for (AuctionPosting const* resultAuction : auctions)
{
listBiddedItemsResult.Items.emplace_back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listBiddedItemsResult.Items.back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listBiddedItemsResult.Items.emplace_back();
resultAuction->BuildAuctionItem(&auctionItem, true, true, true, false);
}
@@ -1339,7 +1342,7 @@ void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::Auctio
void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player const* player, AuctionsBucketKey const& bucketKey,
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
{
listItemsResult.TotalCount = 0;
listItemsResult.TotalQuantity = 0;
if (AuctionsBucketData const* bucket = Trinity::Containers::MapGetValuePtr(_buckets, bucketKey))
{
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, AuctionHouseResultLimits::Items);
@@ -1348,17 +1351,17 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
{
builder.AddItem(auction);
for (Item* item : auction->Items)
listItemsResult.TotalCount += item->GetCount();
listItemsResult.TotalQuantity += item->GetCount();
}
for (AuctionPosting const* resultAuction : builder.GetResultRange())
{
listItemsResult.Items.emplace_back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listItemsResult.Items.back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listItemsResult.Items.emplace_back();
resultAuction->BuildAuctionItem(&auctionItem, false, false, resultAuction->OwnerAccount != player->GetSession()->GetAccountGUID(),
resultAuction->Bidder.IsEmpty());
}
listItemsResult.TotalCount = builder.GetTotalCount();
listItemsResult.HasMoreResults = builder.HasMoreResults();
}
}
@@ -1369,14 +1372,14 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, AuctionHouseResultLimits::Items);
auto itr = _buckets.lower_bound(AuctionsBucketKey(itemId, 0, 0, 0));
auto end = _buckets.end();
listItemsResult.TotalCount = 0;
listItemsResult.TotalQuantity = 0;
while (itr != end && itr->first.ItemId == itemId)
{
for (AuctionPosting const* auction : itr->second.Auctions)
{
builder.AddItem(auction);
for (Item* item : auction->Items)
listItemsResult.TotalCount += item->GetCount();
listItemsResult.TotalQuantity += item->GetCount();
}
++itr;
@@ -1384,12 +1387,12 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
for (AuctionPosting const* resultAuction : builder.GetResultRange())
{
listItemsResult.Items.emplace_back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listItemsResult.Items.back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listItemsResult.Items.emplace_back();
resultAuction->BuildAuctionItem(&auctionItem, false, true, resultAuction->OwnerAccount != player->GetSession()->GetAccountGUID(),
resultAuction->Bidder.IsEmpty());
}
listItemsResult.TotalCount = builder.GetTotalCount();
listItemsResult.HasMoreResults = builder.HasMoreResults();
}
@@ -1407,8 +1410,7 @@ void AuctionHouseObject::BuildListOwnedItems(WorldPackets::AuctionHouse::Auction
for (AuctionPosting const* resultAuction : auctions)
{
listOwnedItemsResult.Items.emplace_back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listOwnedItemsResult.Items.back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = listOwnedItemsResult.Items.emplace_back();
resultAuction->BuildAuctionItem(&auctionItem, true, true, false, false);
}
@@ -1444,8 +1446,7 @@ void AuctionHouseObject::BuildReplicate(WorldPackets::AuctionHouse::AuctionRepli
{
AuctionPosting const& auction = itr->second;
replicateResponse.Items.emplace_back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = replicateResponse.Items.back();
WorldPackets::AuctionHouse::AuctionItem& auctionItem = replicateResponse.Items.emplace_back();
auction.BuildAuctionItem(&auctionItem, false, true, true, auction.Bidder.IsEmpty());
if (!--count)
break;
@@ -576,8 +576,8 @@ WorldPacket const* AuctionListBucketsResult::Write()
{
_worldPacket << Size<uint32>(Buckets);
_worldPacket << uint32(DesiredDelay);
_worldPacket << int32(Unknown830_0);
_worldPacket << int32(Unknown830_1);
_worldPacket << int32(Filters);
_worldPacket << int32(TotalCount);
_worldPacket << Bits<1>(BrowseMode);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
@@ -592,7 +592,7 @@ WorldPacket const* AuctionListItemsResult::Write()
{
{
_worldPacket << Size<uint32>(Items);
_worldPacket << uint32(Unknown830);
_worldPacket << uint32(TotalCount);
_worldPacket << uint32(DesiredDelay);
for (AuctionItem const& item : Items)
_worldPacket << item;
@@ -442,8 +442,8 @@ namespace WorldPackets
std::vector<BucketInfo> Buckets;
uint32 DesiredDelay = 0;
int32 Unknown830_0 = 0;
int32 Unknown830_1 = 0;
AuctionHouseFilterMask Filters = AuctionHouseFilterMask(0);
int32 TotalCount = 0;
AuctionHouseBrowseMode BrowseMode = AuctionHouseBrowseMode(0);
bool HasMoreResults = false;
};
@@ -467,8 +467,8 @@ namespace WorldPackets
WorldPacket const* Write() override;
std::vector<AuctionItem> Items;
uint32 Unknown830 = 0;
uint32 TotalCount = 0;
uint32 TotalCount = 0; ///< number of auctions
uint32 TotalQuantity = 0; ///< number of items (summing stack counts)
uint32 DesiredDelay = 0;
AuctionHouseListType ListType = AuctionHouseListType(0);
bool HasMoreResults = false;