Core/AuctionHouse: Implement some missing packet fields
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user