mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Auction House: Fixed sorting items with itemlevel greater than 255
This commit is contained in:
@@ -65,7 +65,7 @@ std::size_t AuctionsBucketKey::Hash(AuctionsBucketKey const& key)
|
||||
return hashVal;
|
||||
}
|
||||
|
||||
AuctionsBucketKey AuctionsBucketKey::ForItem(Item* item)
|
||||
AuctionsBucketKey AuctionsBucketKey::ForItem(Item const* item)
|
||||
{
|
||||
ItemTemplate const* itemTemplate = item->GetTemplate();
|
||||
if (itemTemplate->GetMaxStackSize() == 1)
|
||||
@@ -87,30 +87,7 @@ AuctionsBucketKey AuctionsBucketKey::ForCommodity(ItemTemplate const* itemTempla
|
||||
return { itemTemplate->GetId(), uint16(itemTemplate->GetBaseItemLevel()), 0, 0 };
|
||||
}
|
||||
|
||||
bool operator<(AuctionsBucketKey const& left, AuctionsBucketKey const& right)
|
||||
{
|
||||
if (left.ItemId < right.ItemId)
|
||||
return true;
|
||||
if (left.ItemId > right.ItemId)
|
||||
return false;
|
||||
if (left.ItemLevel < right.ItemLevel)
|
||||
return true;
|
||||
if (left.ItemLevel > right.ItemLevel)
|
||||
return false;
|
||||
if (left.BattlePetSpeciesId < right.BattlePetSpeciesId)
|
||||
return true;
|
||||
if (left.BattlePetSpeciesId > right.BattlePetSpeciesId)
|
||||
return false;
|
||||
if (left.SuffixItemNameDescriptionId < right.SuffixItemNameDescriptionId)
|
||||
return true;
|
||||
//if (left.SuffixItemNameDescriptionId > right.SuffixItemNameDescriptionId)
|
||||
// return false;
|
||||
|
||||
// everything equal
|
||||
return false;
|
||||
}
|
||||
|
||||
void AuctionsBucketData::BuildBucketInfo(WorldPackets::AuctionHouse::BucketInfo* bucketInfo, Player* player) const
|
||||
void AuctionsBucketData::BuildBucketInfo(WorldPackets::AuctionHouse::BucketInfo* bucketInfo, Player const* player) const
|
||||
{
|
||||
bucketInfo->Key = Key;
|
||||
bucketInfo->MinPrice = MinPrice;
|
||||
@@ -158,7 +135,7 @@ bool AuctionPosting::IsCommodity() const
|
||||
|
||||
uint32 AuctionPosting::GetTotalItemCount() const
|
||||
{
|
||||
return std::accumulate(Items.begin(), Items.end(), 0u, [](uint32 totalCount, Item* item)
|
||||
return std::accumulate(Items.begin(), Items.end(), 0u, [](uint32 totalCount, Item const* item)
|
||||
{
|
||||
return totalCount + item->GetCount();
|
||||
});
|
||||
@@ -258,16 +235,16 @@ uint64 AuctionPosting::CalculateMinIncrement(uint64 bidAmount)
|
||||
class AuctionsBucketData::Sorter
|
||||
{
|
||||
public:
|
||||
Sorter(LocaleConstant locale, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount)
|
||||
: _locale(locale), _sorts(sorts), _sortCount(sortCount) { }
|
||||
Sorter(LocaleConstant locale, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts)
|
||||
: _locale(locale), _sorts(sorts) { }
|
||||
|
||||
bool operator()(AuctionsBucketData const* left, AuctionsBucketData const* right) const
|
||||
{
|
||||
for (std::size_t i = 0; i < _sortCount; ++i)
|
||||
for (WorldPackets::AuctionHouse::AuctionSortDef const& sort : _sorts)
|
||||
{
|
||||
int64 ordering = CompareColumns(_sorts[i].SortOrder, left, right);
|
||||
int64 ordering = CompareColumns(sort.SortOrder, left, right);
|
||||
if (ordering != 0)
|
||||
return (ordering < 0) == !_sorts[i].ReverseSort;
|
||||
return (ordering < 0) == !sort.ReverseSort;
|
||||
}
|
||||
|
||||
return left->Key < right->Key;
|
||||
@@ -294,23 +271,22 @@ private:
|
||||
}
|
||||
|
||||
LocaleConstant _locale;
|
||||
WorldPackets::AuctionHouse::AuctionSortDef const* _sorts;
|
||||
std::size_t _sortCount;
|
||||
std::span<WorldPackets::AuctionHouse::AuctionSortDef const> _sorts;
|
||||
};
|
||||
|
||||
class AuctionPosting::Sorter
|
||||
{
|
||||
public:
|
||||
Sorter(LocaleConstant locale, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount)
|
||||
: _locale(locale), _sorts(sorts), _sortCount(sortCount) { }
|
||||
Sorter(LocaleConstant locale, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts)
|
||||
: _locale(locale), _sorts(sorts) { }
|
||||
|
||||
bool operator()(AuctionPosting const* left, AuctionPosting const* right) const
|
||||
{
|
||||
for (std::size_t i = 0; i < _sortCount; ++i)
|
||||
for (WorldPackets::AuctionHouse::AuctionSortDef const& sort : _sorts)
|
||||
{
|
||||
int64 ordering = CompareColumns(_sorts[i].SortOrder, left, right);
|
||||
int64 ordering = CompareColumns(sort.SortOrder, left, right);
|
||||
if (ordering != 0)
|
||||
return (ordering < 0) == !_sorts[i].ReverseSort;
|
||||
return (ordering < 0) == !sort.ReverseSort;
|
||||
}
|
||||
|
||||
// Auctions are processed in LIFO order
|
||||
@@ -355,8 +331,7 @@ private:
|
||||
}
|
||||
|
||||
LocaleConstant _locale;
|
||||
WorldPackets::AuctionHouse::AuctionSortDef const* _sorts;
|
||||
std::size_t _sortCount;
|
||||
std::span<WorldPackets::AuctionHouse::AuctionSortDef const> _sorts;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
@@ -365,8 +340,8 @@ class AuctionsResultBuilder
|
||||
public:
|
||||
using Sorter = typename T::Sorter;
|
||||
|
||||
AuctionsResultBuilder(uint32 offset, LocaleConstant locale, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount, AuctionHouseResultLimits maxResults)
|
||||
: _offset(offset), _sorter(locale, sorts, sortCount), _maxResults(AsUnderlyingType(maxResults)), _hasMoreResults(false)
|
||||
AuctionsResultBuilder(uint32 offset, LocaleConstant locale, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts, AuctionHouseResultLimits maxResults)
|
||||
: _offset(offset), _sorter(locale, sorts), _maxResults(AsUnderlyingType(maxResults)), _hasMoreResults(false)
|
||||
{
|
||||
_items.reserve(_maxResults + offset + 1);
|
||||
}
|
||||
@@ -385,7 +360,7 @@ public:
|
||||
|
||||
Trinity::IteratorPair<typename std::vector<T const*>::const_iterator> GetResultRange() const
|
||||
{
|
||||
return std::make_pair(_items.begin() + _offset, _items.end());
|
||||
return Trinity::Containers::MakeIteratorPair(_items.begin() + _offset, _items.end());
|
||||
}
|
||||
|
||||
bool HasMoreResults() const
|
||||
@@ -464,7 +439,7 @@ uint64 AuctionHouseMgr::GetCommodityAuctionDeposit(ItemTemplate const* item, Min
|
||||
return uint64(std::ceil(std::floor(fmax(0.15 * quantity * sellPrice, 100.0)) / int64(SILVER)) * int64(SILVER)) * (time.count() / (MIN_AUCTION_TIME / MINUTE));
|
||||
}
|
||||
|
||||
uint64 AuctionHouseMgr::GetItemAuctionDeposit(Player* player, Item* item, Minutes time)
|
||||
uint64 AuctionHouseMgr::GetItemAuctionDeposit(Player const* player, Item const* item, Minutes time)
|
||||
{
|
||||
uint32 sellPrice = item->GetSellPrice(player);
|
||||
return uint64(std::ceil(std::floor(fmax(sellPrice * 0.15, 100.0)) / int64(SILVER)) * int64(SILVER)) * (time.count() / (MIN_AUCTION_TIME / MINUTE));
|
||||
@@ -655,9 +630,9 @@ void AuctionHouseMgr::AddAItem(Item* item)
|
||||
_itemsByGuid[item->GetGUID()] = item;
|
||||
}
|
||||
|
||||
bool AuctionHouseMgr::RemoveAItem(ObjectGuid id, bool deleteItem /*= false*/, CharacterDatabaseTransaction* trans /*= nullptr*/)
|
||||
bool AuctionHouseMgr::RemoveAItem(ObjectGuid itemGuid, bool deleteItem /*= false*/, CharacterDatabaseTransaction* trans /*= nullptr*/)
|
||||
{
|
||||
auto i = _itemsByGuid.find(id);
|
||||
auto i = _itemsByGuid.find(itemGuid);
|
||||
if (i == _itemsByGuid.end())
|
||||
return false;
|
||||
|
||||
@@ -672,7 +647,7 @@ bool AuctionHouseMgr::RemoveAItem(ObjectGuid id, bool deleteItem /*= false*/, Ch
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AuctionHouseMgr::PendingAuctionAdd(Player* player, uint32 auctionHouseId, uint32 auctionId, uint64 deposit)
|
||||
bool AuctionHouseMgr::PendingAuctionAdd(Player const* player, uint32 auctionHouseId, uint32 auctionId, uint64 deposit)
|
||||
{
|
||||
auto itr = _pendingAuctionsByPlayer.find(player->GetGUID());
|
||||
if (itr != _pendingAuctionsByPlayer.end())
|
||||
@@ -812,7 +787,7 @@ uint32 AuctionHouseMgr::GenerateReplicationId()
|
||||
return ++_replicateIdGenerator;
|
||||
}
|
||||
|
||||
AuctionThrottleResult AuctionHouseMgr::CheckThrottle(Player* player, bool addonTainted, AuctionCommand command /*= AuctionCommand::SellItem*/)
|
||||
AuctionThrottleResult AuctionHouseMgr::CheckThrottle(Player const* player, bool addonTainted, AuctionCommand command /*= AuctionCommand::SellItem*/)
|
||||
{
|
||||
TimePoint now = GameTime::Now();
|
||||
auto itr = _playerThrottleObjects.emplace(std::piecewise_construct, std::forward_as_tuple(player->GetGUID()), std::forward_as_tuple());
|
||||
@@ -1027,7 +1002,7 @@ void AuctionHouseObject::AddAuction(CharacterDatabaseTransaction trans, AuctionP
|
||||
AuctionPosting* addedAuction = &(_itemsByAuctionId[auction.Id] = std::move(auction));
|
||||
|
||||
WorldPackets::AuctionHouse::AuctionSortDef priceSort{ AuctionHouseSortOrder::Price, false };
|
||||
AuctionPosting::Sorter insertSorter(LOCALE_enUS, &priceSort, 1);
|
||||
AuctionPosting::Sorter insertSorter(LOCALE_enUS, std::span(&priceSort, 1));
|
||||
bucket->Auctions.insert(std::lower_bound(bucket->Auctions.begin(), bucket->Auctions.end(), addedAuction, std::cref(insertSorter)), addedAuction);
|
||||
|
||||
sScriptMgr->OnAuctionAdd(this, addedAuction);
|
||||
@@ -1176,9 +1151,9 @@ void AuctionHouseObject::Update()
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player,
|
||||
void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player const* player,
|
||||
std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumFlag<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters,
|
||||
uint8 const* knownPetBits, std::size_t knownPetBitsCount, uint8 maxKnownPetLevel, uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount)
|
||||
std::span<uint8 const> knownPetBits, uint8 maxKnownPetLevel, uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
|
||||
{
|
||||
std::unordered_set<uint32> knownAppearanceIds;
|
||||
boost::dynamic_bitset<uint8> knownPetSpecies;
|
||||
@@ -1186,12 +1161,12 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis
|
||||
if (filters.HasFlag(AuctionHouseFilterMask::UncollectedOnly))
|
||||
{
|
||||
knownAppearanceIds = player->GetSession()->GetCollectionMgr()->GetAppearanceIds();
|
||||
knownPetSpecies.init_from_block_range(knownPetBits, knownPetBits + knownPetBitsCount);
|
||||
knownPetSpecies.init_from_block_range(knownPetBits.begin(), knownPetBits.end());
|
||||
if (knownPetSpecies.size() < sBattlePetSpeciesStore.GetNumRows())
|
||||
knownPetSpecies.resize(sBattlePetSpeciesStore.GetNumRows());
|
||||
}
|
||||
|
||||
AuctionsResultBuilder<AuctionsBucketData> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, sortCount, AuctionHouseResultLimits::Browse);
|
||||
AuctionsResultBuilder<AuctionsBucketData> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, AuctionHouseResultLimits::Browse);
|
||||
|
||||
for (std::pair<AuctionsBucketKey const, AuctionsBucketData> const& bucket : _buckets)
|
||||
{
|
||||
@@ -1318,20 +1293,20 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis
|
||||
listBucketsResult.HasMoreResults = builder.HasMoreResults();
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player,
|
||||
WorldPackets::AuctionHouse::AuctionBucketKey const* keys, std::size_t keysCount,
|
||||
WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount)
|
||||
void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player const* player,
|
||||
std::span<WorldPackets::AuctionHouse::AuctionBucketKey const> keys,
|
||||
std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
|
||||
{
|
||||
std::vector<AuctionsBucketData const*> buckets;
|
||||
buckets.reserve(keysCount);
|
||||
for (std::size_t i = 0; i < keysCount; ++i)
|
||||
buckets.reserve(keys.size());
|
||||
for (WorldPackets::AuctionHouse::AuctionBucketKey const& key : keys)
|
||||
{
|
||||
auto bucketItr = _buckets.find(AuctionsBucketKey(keys[i]));
|
||||
auto bucketItr = _buckets.find(AuctionsBucketKey(key));
|
||||
if (bucketItr != _buckets.end())
|
||||
buckets.push_back(&bucketItr->second);
|
||||
}
|
||||
|
||||
AuctionsBucketData::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionsBucketData::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts);
|
||||
std::sort(buckets.begin(), buckets.end(), std::cref(sorter));
|
||||
|
||||
for (AuctionsBucketData const* resultBucket : buckets)
|
||||
@@ -1342,11 +1317,10 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis
|
||||
}
|
||||
|
||||
listBucketsResult.HasMoreResults = false;
|
||||
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::AuctionListBiddedItemsResult& listBiddedItemsResult, Player* player,
|
||||
uint32 /*offset*/, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const
|
||||
void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::AuctionListBiddedItemsResult& listBiddedItemsResult, Player const* player,
|
||||
uint32 /*offset*/, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
|
||||
{
|
||||
// always full list
|
||||
std::vector<AuctionPosting const*> auctions;
|
||||
@@ -1354,7 +1328,7 @@ void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::Auctio
|
||||
if (AuctionPosting const* auction = Trinity::Containers::MapGetValuePtr(_itemsByAuctionId, auctionId.second))
|
||||
auctions.push_back(auction);
|
||||
|
||||
AuctionPosting::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionPosting::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts);
|
||||
std::sort(auctions.begin(), auctions.end(), std::cref(sorter));
|
||||
|
||||
for (AuctionPosting const* resultAuction : auctions)
|
||||
@@ -1367,13 +1341,13 @@ void AuctionHouseObject::BuildListBiddedItems(WorldPackets::AuctionHouse::Auctio
|
||||
listBiddedItemsResult.HasMoreResults = false;
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player* player, AuctionsBucketKey const& bucketKey,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const
|
||||
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;
|
||||
if (AuctionsBucketData const* bucket = Trinity::Containers::MapGetValuePtr(_buckets, bucketKey))
|
||||
{
|
||||
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, sortCount, AuctionHouseResultLimits::Items);
|
||||
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, AuctionHouseResultLimits::Items);
|
||||
|
||||
for (AuctionPosting const* auction : bucket->Auctions)
|
||||
{
|
||||
@@ -1394,10 +1368,10 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
|
||||
}
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player* player, uint32 itemId,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const
|
||||
void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player const* player, uint32 itemId,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
|
||||
{
|
||||
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, sortCount, AuctionHouseResultLimits::Items);
|
||||
AuctionsResultBuilder<AuctionPosting> builder(offset, player->GetSession()->GetSessionDbcLocale(), sorts, AuctionHouseResultLimits::Items);
|
||||
auto itr = _buckets.lower_bound(AuctionsBucketKey(itemId, 0, 0, 0));
|
||||
auto end = _buckets.lower_bound(AuctionsBucketKey(itemId + 1, 0, 0, 0));
|
||||
listItemsResult.TotalCount = 0;
|
||||
@@ -1424,8 +1398,8 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti
|
||||
listItemsResult.HasMoreResults = builder.HasMoreResults();
|
||||
}
|
||||
|
||||
void AuctionHouseObject::BuildListOwnedItems(WorldPackets::AuctionHouse::AuctionListOwnedItemsResult& listOwnedItemsResult, Player* player,
|
||||
uint32 /*offset*/, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount)
|
||||
void AuctionHouseObject::BuildListOwnedItems(WorldPackets::AuctionHouse::AuctionListOwnedItemsResult& listOwnedItemsResult, Player const* player,
|
||||
uint32 /*offset*/, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const
|
||||
{
|
||||
// always full list
|
||||
std::vector<AuctionPosting const*> auctions;
|
||||
@@ -1433,7 +1407,7 @@ void AuctionHouseObject::BuildListOwnedItems(WorldPackets::AuctionHouse::Auction
|
||||
if (AuctionPosting const* auction = Trinity::Containers::MapGetValuePtr(_itemsByAuctionId, auctionId.second))
|
||||
auctions.push_back(auction);
|
||||
|
||||
AuctionPosting::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionPosting::Sorter sorter(player->GetSession()->GetSessionDbcLocale(), sorts);
|
||||
std::sort(auctions.begin(), auctions.end(), std::cref(sorter));
|
||||
|
||||
for (AuctionPosting const* resultAuction : auctions)
|
||||
@@ -1446,76 +1420,6 @@ void AuctionHouseObject::BuildListOwnedItems(WorldPackets::AuctionHouse::Auction
|
||||
listOwnedItemsResult.HasMoreResults = false;
|
||||
}
|
||||
|
||||
/*
|
||||
void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& packet, Player* player,
|
||||
std::wstring const& searchedname, uint32 listfrom, uint8 levelmin, uint8 levelmax, EnumClassFlag<AuctionHouseFilterMask> filters,
|
||||
Optional<AuctionSearchClassFilters> const& classFilters)
|
||||
{
|
||||
time_t curTime = GameTime::GetGameTime();
|
||||
|
||||
for (AuctionEntryMap::const_iterator itr = AuctionsMap.begin(); itr != AuctionsMap.end(); ++itr)
|
||||
{
|
||||
AuctionEntry* Aentry = itr->second;
|
||||
// Skip expired auctions
|
||||
if (Aentry->expire_time < curTime)
|
||||
continue;
|
||||
|
||||
Item* item = sAuctionMgr->GetAItem(Aentry->itemGUIDLow);
|
||||
if (!item)
|
||||
continue;
|
||||
|
||||
ItemTemplate const* proto = item->GetTemplate();
|
||||
if (classFilters)
|
||||
{
|
||||
// if we dont want any class filters, Optional is not initialized
|
||||
// if we dont want this class included, SubclassMask is set to FILTER_SKIP_CLASS
|
||||
// if we want this class and did not specify and subclasses, its set to FILTER_SKIP_SUBCLASS
|
||||
// otherwise full restrictions apply
|
||||
if (classFilters->Classes[proto->GetClass()].SubclassMask == AuctionSearchClassFilters::FILTER_SKIP_CLASS)
|
||||
continue;
|
||||
|
||||
if (classFilters->Classes[proto->GetClass()].SubclassMask != AuctionSearchClassFilters::FILTER_SKIP_SUBCLASS)
|
||||
{
|
||||
if (!(classFilters->Classes[proto->GetClass()].SubclassMask & (1 << proto->GetSubClass())))
|
||||
continue;
|
||||
|
||||
if (!(classFilters->Classes[proto->GetClass()].InvTypes[proto->GetSubClass()] & (1 << proto->GetInventoryType())))
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!filters.HasFlag(static_cast<AuctionHouseFilterMask>(1 << (proto->GetQuality() + 4))))
|
||||
continue;
|
||||
|
||||
if (levelmin != 0 && (item->GetRequiredLevel() < levelmin || (levelmax != 0 && item->GetRequiredLevel() > levelmax)))
|
||||
continue;
|
||||
|
||||
if (filters.HasFlag(AuctionHouseFilterMask::UsableOnly) && player->CanUseItem(item) != EQUIP_ERR_OK)
|
||||
continue;
|
||||
|
||||
// Allow search by suffix (ie: of the Monkey) or partial name (ie: Monkey)
|
||||
// No need to do any of this if no search term was entered
|
||||
if (!searchedname.empty())
|
||||
{
|
||||
std::string name = proto->GetName(player->GetSession()->GetSessionDbcLocale());
|
||||
if (name.empty())
|
||||
continue;
|
||||
|
||||
// TODO: Generate name using ItemNameDescription
|
||||
|
||||
// Perform the search (with or without suffix)
|
||||
if (!Utf8FitTo(name, searchedname))
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add the item if no search term or if entered search term was found
|
||||
if (packet.Items.size() < 50 && packet.TotalCount >= listfrom)
|
||||
Aentry->BuildAuctionInfo(packet.Items, true, item);
|
||||
|
||||
++packet.TotalCount;
|
||||
}
|
||||
}
|
||||
*/
|
||||
void AuctionHouseObject::BuildReplicate(WorldPackets::AuctionHouse::AuctionReplicateResponse& replicateResponse, Player* player,
|
||||
uint32 global, uint32 cursor, uint32 tombstone, uint32 count)
|
||||
{
|
||||
@@ -1562,7 +1466,7 @@ uint64 AuctionHouseObject::CalculateAuctionHouseCut(uint64 bidAmount) const
|
||||
return std::max(int64(CalculatePct(bidAmount, _auctionHouse->ConsignmentRate) * double(sWorld->getRate(RATE_AUCTION_CUT))), SI64LIT(0));
|
||||
}
|
||||
|
||||
CommodityQuote const* AuctionHouseObject::CreateCommodityQuote(Player* player, uint32 itemId, uint32 quantity)
|
||||
CommodityQuote const* AuctionHouseObject::CreateCommodityQuote(Player const* player, uint32 itemId, uint32 quantity)
|
||||
{
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId);
|
||||
if (!itemTemplate)
|
||||
@@ -1824,7 +1728,7 @@ bool AuctionHouseObject::BuyCommodity(CharacterDatabaseTransaction trans, Player
|
||||
}
|
||||
|
||||
// this function notified old bidder that his bid is no longer highest
|
||||
void AuctionHouseObject::SendAuctionOutbid(AuctionPosting const* auction, ObjectGuid newBidder, uint64 newBidAmount, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionOutbid(AuctionPosting const* auction, ObjectGuid newBidder, uint64 newBidAmount, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
Player* oldBidder = ObjectAccessor::FindConnectedPlayer(auction->Bidder);
|
||||
|
||||
@@ -1848,7 +1752,7 @@ void AuctionHouseObject::SendAuctionOutbid(AuctionPosting const* auction, Object
|
||||
}
|
||||
}
|
||||
|
||||
void AuctionHouseObject::SendAuctionWon(AuctionPosting const* auction, Player* bidder, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionWon(AuctionPosting const* auction, Player* bidder, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
uint32 bidderAccId = 0;
|
||||
if (!bidder)
|
||||
@@ -1923,7 +1827,7 @@ void AuctionHouseObject::SendAuctionWon(AuctionPosting const* auction, Player* b
|
||||
}
|
||||
|
||||
//call this method to send mail to auction owner, when auction is successful, it does not clear ram
|
||||
void AuctionHouseObject::SendAuctionSold(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionSold(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
if (!owner)
|
||||
owner = ObjectAccessor::FindConnectedPlayer(auction->Owner);
|
||||
@@ -1950,7 +1854,7 @@ void AuctionHouseObject::SendAuctionSold(AuctionPosting const* auction, Player*
|
||||
}
|
||||
}
|
||||
|
||||
void AuctionHouseObject::SendAuctionExpired(AuctionPosting const* auction, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionExpired(AuctionPosting const* auction, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
Player* owner = ObjectAccessor::FindConnectedPlayer(auction->Owner);
|
||||
// owner exist
|
||||
@@ -1978,7 +1882,7 @@ void AuctionHouseObject::SendAuctionExpired(AuctionPosting const* auction, Chara
|
||||
}
|
||||
}
|
||||
|
||||
void AuctionHouseObject::SendAuctionRemoved(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionRemoved(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
auto itemItr = auction->Items.begin();
|
||||
while (itemItr != auction->Items.end())
|
||||
@@ -1993,7 +1897,7 @@ void AuctionHouseObject::SendAuctionRemoved(AuctionPosting const* auction, Playe
|
||||
}
|
||||
|
||||
//this function sends mail, when auction is cancelled to old bidder
|
||||
void AuctionHouseObject::SendAuctionCancelledToBidder(AuctionPosting const* auction, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionCancelledToBidder(AuctionPosting const* auction, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
Player* bidder = ObjectAccessor::FindConnectedPlayer(auction->Bidder);
|
||||
|
||||
@@ -2004,7 +1908,7 @@ void AuctionHouseObject::SendAuctionCancelledToBidder(AuctionPosting const* auct
|
||||
.SendMailTo(trans, MailReceiver(bidder, auction->Bidder), this, MAIL_CHECK_MASK_COPIED);
|
||||
}
|
||||
|
||||
void AuctionHouseObject::SendAuctionInvoice(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans)
|
||||
void AuctionHouseObject::SendAuctionInvoice(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const
|
||||
{
|
||||
if (!owner)
|
||||
owner = ObjectAccessor::FindConnectedPlayer(auction->Owner);
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "ObjectGuid.h"
|
||||
#include "Optional.h"
|
||||
#include <map>
|
||||
#include <span>
|
||||
#include <unordered_map>
|
||||
|
||||
class Item;
|
||||
@@ -177,30 +178,28 @@ struct AuctionsBucketKey
|
||||
return !(*this == right);
|
||||
}
|
||||
|
||||
static std::size_t Hash(AuctionsBucketKey const& bucket);
|
||||
static AuctionsBucketKey ForItem(Item* item);
|
||||
friend std::strong_ordering operator<=>(AuctionsBucketKey const& left, AuctionsBucketKey const& right) = default;
|
||||
|
||||
|
||||
static std::size_t Hash(AuctionsBucketKey const& key);
|
||||
static AuctionsBucketKey ForItem(Item const* item);
|
||||
static AuctionsBucketKey ForCommodity(ItemTemplate const* itemTemplate);
|
||||
};
|
||||
|
||||
bool operator<(AuctionsBucketKey const& left, AuctionsBucketKey const& right);
|
||||
|
||||
namespace std
|
||||
template<>
|
||||
struct std::hash<AuctionsBucketKey>
|
||||
{
|
||||
template<>
|
||||
struct hash<AuctionsBucketKey>
|
||||
size_t operator()(AuctionsBucketKey const& key) const noexcept
|
||||
{
|
||||
size_t operator()(AuctionsBucketKey const& key) const noexcept
|
||||
{
|
||||
return AuctionsBucketKey::Hash(key);
|
||||
}
|
||||
};
|
||||
}
|
||||
return AuctionsBucketKey::Hash(key);
|
||||
}
|
||||
};
|
||||
|
||||
struct AuctionPosting;
|
||||
|
||||
struct AuctionsBucketData
|
||||
{
|
||||
AuctionsBucketKey Key;
|
||||
AuctionsBucketKey Key{};
|
||||
|
||||
// filter helpers
|
||||
uint8 ItemClass = 0;
|
||||
@@ -211,14 +210,14 @@ struct AuctionsBucketData
|
||||
uint64 MinPrice = 0; // for sort
|
||||
std::array<std::pair<uint32, uint32>, 4> ItemModifiedAppearanceId = { }; // for uncollected search
|
||||
uint8 RequiredLevel = 0; // for usable search
|
||||
uint8 SortLevel = 0;
|
||||
uint16 SortLevel = 0;
|
||||
uint8 MinBattlePetLevel = 0;
|
||||
uint8 MaxBattlePetLevel = 0;
|
||||
std::array<std::wstring, TOTAL_LOCALES> FullName = { };
|
||||
|
||||
std::vector<AuctionPosting*> Auctions;
|
||||
|
||||
void BuildBucketInfo(WorldPackets::AuctionHouse::BucketInfo* bucketInfo, Player* player) const;
|
||||
void BuildBucketInfo(WorldPackets::AuctionHouse::BucketInfo* bucketInfo, Player const* player) const;
|
||||
|
||||
class Sorter;
|
||||
};
|
||||
@@ -254,7 +253,7 @@ struct AuctionPosting
|
||||
bool IsCommodity() const;
|
||||
uint32 GetTotalItemCount() const;
|
||||
void BuildAuctionItem(WorldPackets::AuctionHouse::AuctionItem* auctionItem, bool alwaysSendItem, bool sendKey, bool censorServerInfo, bool censorBidInfo) const;
|
||||
static uint64 CalculateMinIncrement(uint64 currentBid);
|
||||
static uint64 CalculateMinIncrement(uint64 bidAmount);
|
||||
uint64 CalculateMinIncrement() const { return CalculateMinIncrement(BidAmount); }
|
||||
|
||||
class Sorter;
|
||||
@@ -278,7 +277,10 @@ class TC_GAME_API AuctionHouseObject
|
||||
{
|
||||
public:
|
||||
explicit AuctionHouseObject(uint32 auctionHouseId);
|
||||
|
||||
AuctionHouseObject(AuctionHouseObject const&) = delete;
|
||||
AuctionHouseObject(AuctionHouseObject&&) = delete;
|
||||
AuctionHouseObject& operator=(AuctionHouseObject const&) = delete;
|
||||
AuctionHouseObject& operator=(AuctionHouseObject&&) = delete;
|
||||
~AuctionHouseObject();
|
||||
|
||||
struct PlayerReplicateThrottleData
|
||||
@@ -304,37 +306,37 @@ public:
|
||||
|
||||
void Update();
|
||||
|
||||
void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player,
|
||||
void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player const* player,
|
||||
std::wstring const& name, uint8 minLevel, uint8 maxLevel, EnumFlag<AuctionHouseFilterMask> filters, Optional<AuctionSearchClassFilters> const& classFilters,
|
||||
uint8 const* knownPetBits, std::size_t knownPetBitsCount, uint8 maxKnownPetLevel,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount);
|
||||
void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player* player,
|
||||
WorldPackets::AuctionHouse::AuctionBucketKey const* keys, std::size_t keysCount,
|
||||
WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount);
|
||||
void BuildListBiddedItems(WorldPackets::AuctionHouse::AuctionListBiddedItemsResult& listBiddedItemsResult, Player* player,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const;
|
||||
void BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player* player, AuctionsBucketKey const& bucketKey,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const;
|
||||
void BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player* player, uint32 itemId,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount) const;
|
||||
void BuildListOwnedItems(WorldPackets::AuctionHouse::AuctionListOwnedItemsResult& listOwnedItemsResult, Player* player,
|
||||
uint32 offset, WorldPackets::AuctionHouse::AuctionSortDef const* sorts, std::size_t sortCount);
|
||||
std::span<uint8 const> knownPetBits, uint8 maxKnownPetLevel,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildListBuckets(WorldPackets::AuctionHouse::AuctionListBucketsResult& listBucketsResult, Player const* player,
|
||||
std::span<WorldPackets::AuctionHouse::AuctionBucketKey const> keys,
|
||||
std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildListBiddedItems(WorldPackets::AuctionHouse::AuctionListBiddedItemsResult& listBiddedItemsResult, Player const* player,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player const* player, AuctionsBucketKey const& bucketKey,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildListAuctionItems(WorldPackets::AuctionHouse::AuctionListItemsResult& listItemsResult, Player const* player, uint32 itemId,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildListOwnedItems(WorldPackets::AuctionHouse::AuctionListOwnedItemsResult& listOwnedItemsResult, Player const* player,
|
||||
uint32 offset, std::span<WorldPackets::AuctionHouse::AuctionSortDef const> sorts) const;
|
||||
void BuildReplicate(WorldPackets::AuctionHouse::AuctionReplicateResponse& replicateResponse, Player* player,
|
||||
uint32 global, uint32 cursor, uint32 tombstone, uint32 count);
|
||||
|
||||
uint64 CalculateAuctionHouseCut(uint64 bidAmount) const;
|
||||
|
||||
CommodityQuote const* CreateCommodityQuote(Player* player, uint32 itemId, uint32 quantity);
|
||||
CommodityQuote const* CreateCommodityQuote(Player const* player, uint32 itemId, uint32 quantity);
|
||||
void CancelCommodityQuote(ObjectGuid guid);
|
||||
bool BuyCommodity(CharacterDatabaseTransaction trans, Player* player, uint32 itemId, uint32 quantity, Milliseconds delayForNextAction);
|
||||
|
||||
void SendAuctionOutbid(AuctionPosting const* auction, ObjectGuid newBidder, uint64 newBidAmount, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionWon(AuctionPosting const* auction, Player* player, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionSold(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionExpired(AuctionPosting const* auction, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionRemoved(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionCancelledToBidder(AuctionPosting const* auction, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionInvoice(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans);
|
||||
void SendAuctionOutbid(AuctionPosting const* auction, ObjectGuid newBidder, uint64 newBidAmount, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionWon(AuctionPosting const* auction, Player* bidder, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionSold(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionExpired(AuctionPosting const* auction, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionRemoved(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionCancelledToBidder(AuctionPosting const* auction, CharacterDatabaseTransaction trans) const;
|
||||
void SendAuctionInvoice(AuctionPosting const* auction, Player* owner, CharacterDatabaseTransaction trans) const;
|
||||
|
||||
private:
|
||||
AuctionHouseEntry const* _auctionHouse;
|
||||
@@ -359,6 +361,11 @@ class TC_GAME_API AuctionHouseMgr
|
||||
~AuctionHouseMgr();
|
||||
|
||||
public:
|
||||
AuctionHouseMgr(AuctionHouseMgr const&) = delete;
|
||||
AuctionHouseMgr(AuctionHouseMgr&&) = delete;
|
||||
AuctionHouseMgr& operator=(AuctionHouseMgr const&) = delete;
|
||||
AuctionHouseMgr& operator=(AuctionHouseMgr&&) = delete;
|
||||
|
||||
static AuctionHouseMgr* instance();
|
||||
|
||||
AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
|
||||
@@ -375,7 +382,7 @@ class TC_GAME_API AuctionHouseMgr
|
||||
static std::string BuildAuctionInvoiceMailBody(ObjectGuid guid, uint64 bid, uint64 buyout, uint32 deposit, uint64 consignment, uint32 moneyDelay, uint32 eta);
|
||||
|
||||
static uint64 GetCommodityAuctionDeposit(ItemTemplate const* item, Minutes time, uint32 quantity);
|
||||
static uint64 GetItemAuctionDeposit(Player* player, Item* item, Minutes time);
|
||||
static uint64 GetItemAuctionDeposit(Player const* player, Item const* item, Minutes time);
|
||||
static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId, uint32* houseId);
|
||||
|
||||
public:
|
||||
@@ -384,7 +391,7 @@ class TC_GAME_API AuctionHouseMgr
|
||||
|
||||
void AddAItem(Item* item);
|
||||
bool RemoveAItem(ObjectGuid itemGuid, bool deleteItem = false, CharacterDatabaseTransaction* trans = nullptr);
|
||||
bool PendingAuctionAdd(Player* player, uint32 auctionHouseId, uint32 auctionId, uint64 deposit);
|
||||
bool PendingAuctionAdd(Player const* player, uint32 auctionHouseId, uint32 auctionId, uint64 deposit);
|
||||
std::size_t PendingAuctionCount(Player const* player) const;
|
||||
void PendingAuctionProcess(Player* player);
|
||||
void UpdatePendingAuctions();
|
||||
@@ -392,7 +399,7 @@ class TC_GAME_API AuctionHouseMgr
|
||||
|
||||
uint32 GenerateReplicationId();
|
||||
|
||||
AuctionThrottleResult CheckThrottle(Player* player, bool addonTainted, AuctionCommand command = AuctionCommand::SellItem);
|
||||
AuctionThrottleResult CheckThrottle(Player const* player, bool addonTainted, AuctionCommand command = AuctionCommand::SellItem);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -87,8 +87,7 @@ void WorldSession::HandleAuctionBrowseQuery(WorldPackets::AuctionHouse::AuctionB
|
||||
|
||||
auctionHouse->BuildListBuckets(listBucketsResult, _player,
|
||||
name, browseQuery.MinLevel, browseQuery.MaxLevel, browseQuery.Filters, classFilters,
|
||||
browseQuery.KnownPets.data(), browseQuery.KnownPets.size(), browseQuery.MaxPetLevel,
|
||||
browseQuery.Offset, browseQuery.Sorts.data(), browseQuery.Sorts.size());
|
||||
browseQuery.KnownPets, browseQuery.MaxPetLevel, browseQuery.Offset, browseQuery.Sorts);
|
||||
|
||||
listBucketsResult.BrowseMode = AuctionHouseBrowseMode::Search;
|
||||
listBucketsResult.DesiredDelay = uint32(throttle.DelayUntilNext.count());
|
||||
@@ -228,7 +227,7 @@ void WorldSession::HandleAuctionListBiddedItems(WorldPackets::AuctionHouse::Auct
|
||||
WorldPackets::AuctionHouse::AuctionListBiddedItemsResult result;
|
||||
|
||||
Player* player = GetPlayer();
|
||||
auctionHouse->BuildListBiddedItems(result, player, listBiddedItems.Offset, listBiddedItems.Sorts.data(), listBiddedItems.Sorts.size());
|
||||
auctionHouse->BuildListBiddedItems(result, player, listBiddedItems.Offset, listBiddedItems.Sorts);
|
||||
result.DesiredDelay = uint32(throttle.DelayUntilNext.count());
|
||||
SendPacket(result.Write());
|
||||
}
|
||||
@@ -255,9 +254,7 @@ void WorldSession::HandleAuctionListBucketsByBucketKeys(WorldPackets::AuctionHou
|
||||
|
||||
WorldPackets::AuctionHouse::AuctionListBucketsResult listBucketsResult;
|
||||
|
||||
auctionHouse->BuildListBuckets(listBucketsResult, _player,
|
||||
listBucketsByBucketKeys.BucketKeys.data(), listBucketsByBucketKeys.BucketKeys.size(),
|
||||
listBucketsByBucketKeys.Sorts.data(), listBucketsByBucketKeys.Sorts.size());
|
||||
auctionHouse->BuildListBuckets(listBucketsResult, _player, listBucketsByBucketKeys.BucketKeys, listBucketsByBucketKeys.Sorts);
|
||||
|
||||
listBucketsResult.BrowseMode = AuctionHouseBrowseMode::SpecificKeys;
|
||||
listBucketsResult.DesiredDelay = uint32(throttle.DelayUntilNext.count());
|
||||
@@ -289,8 +286,7 @@ void WorldSession::HandleAuctionListItemsByBucketKey(WorldPackets::AuctionHouse:
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(listItemsByBucketKey.BucketKey.ItemID);
|
||||
listItemsResult.ListType = itemTemplate && itemTemplate->GetMaxStackSize() > 1 ? AuctionHouseListType::Commodities : AuctionHouseListType::Items;
|
||||
|
||||
auctionHouse->BuildListAuctionItems(listItemsResult, _player, listItemsByBucketKey.BucketKey, listItemsByBucketKey.Offset,
|
||||
listItemsByBucketKey.Sorts.data(), listItemsByBucketKey.Sorts.size());
|
||||
auctionHouse->BuildListAuctionItems(listItemsResult, _player, listItemsByBucketKey.BucketKey, listItemsByBucketKey.Offset, listItemsByBucketKey.Sorts);
|
||||
|
||||
SendPacket(listItemsResult.Write());
|
||||
}
|
||||
@@ -320,8 +316,7 @@ void WorldSession::HandleAuctionListItemsByItemID(WorldPackets::AuctionHouse::Au
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(listItemsByItemID.ItemID);
|
||||
listItemsResult.ListType = itemTemplate && itemTemplate->GetMaxStackSize() > 1 ? AuctionHouseListType::Commodities : AuctionHouseListType::Items;
|
||||
|
||||
auctionHouse->BuildListAuctionItems(listItemsResult, _player, listItemsByItemID.ItemID, listItemsByItemID.Offset,
|
||||
listItemsByItemID.Sorts.data(), listItemsByItemID.Sorts.size());
|
||||
auctionHouse->BuildListAuctionItems(listItemsResult, _player, listItemsByItemID.ItemID, listItemsByItemID.Offset, listItemsByItemID.Sorts);
|
||||
|
||||
SendPacket(listItemsResult.Write());
|
||||
}
|
||||
@@ -348,7 +343,7 @@ void WorldSession::HandleAuctionListOwnedItems(WorldPackets::AuctionHouse::Aucti
|
||||
|
||||
WorldPackets::AuctionHouse::AuctionListOwnedItemsResult result;
|
||||
|
||||
auctionHouse->BuildListOwnedItems(result, _player, listOwnedItems.Offset, listOwnedItems.Sorts.data(), listOwnedItems.Sorts.size());
|
||||
auctionHouse->BuildListOwnedItems(result, _player, listOwnedItems.Offset, listOwnedItems.Sorts);
|
||||
result.DesiredDelay = uint32(throttle.DelayUntilNext.count());
|
||||
SendPacket(result.Write());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user