From 86960f140eab5d20e783290860764b856447aa88 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 3 Nov 2024 20:53:10 +0100 Subject: Core/AuctionHouse: Updated AuctionHouseFilterMask and implemented current expansion filter (cherry picked from commit 5b278a4ca79dd8aa19cde3892d92ae857d6f1dd4) --- src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 13 +++++++++--- src/server/game/AuctionHouse/AuctionHouseMgr.h | 27 ++++++++++++------------ 2 files changed, 24 insertions(+), 16 deletions(-) (limited to 'src/server') diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index a17bb9a5a86..a809b0e502b 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -961,7 +961,7 @@ void AuctionHouseObject::AddAuction(CharacterDatabaseTransaction trans, AuctionP } } - bucket->QualityMask |= static_cast(1 << (quality + 4)); + bucket->QualityMask |= static_cast(AsUnderlyingType(AuctionHouseFilterMask::PoorQuality) << quality); ++bucket->QualityCounts[quality]; if (trans) @@ -1063,7 +1063,7 @@ std::map::node_type AuctionHouseObject::RemoveAuction(Ch } if (!--bucket->QualityCounts[quality]) - bucket->QualityMask &= static_cast(~(1 << (quality + 4))); + bucket->QualityMask &= static_cast(AsUnderlyingType(AuctionHouseFilterMask::PoorQuality) << quality); } else { @@ -1223,7 +1223,7 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis { if (ItemModifiedAppearanceEntry const* itemModifiedAppearance = sItemModifiedAppearanceStore.LookupEntry(bucketAppearance.first)) { - if (knownAppearanceIds.find(itemModifiedAppearance->ItemAppearanceID) == knownAppearanceIds.end()) + if (!knownAppearanceIds.contains(itemModifiedAppearance->ItemAppearanceID)) { hasAll = false; break; @@ -1277,6 +1277,13 @@ void AuctionHouseObject::BuildListBuckets(WorldPackets::AuctionHouse::AuctionLis continue; } + if (filters.HasFlag(AuctionHouseFilterMask::CurrentExpansionOnly)) + { + ItemTemplate const* itemTemplate = ASSERT_NOTNULL(sObjectMgr->GetItemTemplate(bucket.first.ItemId)); + if (itemTemplate->GetRequiredExpansion() != sWorld->getIntConfig(CONFIG_EXPANSION)) + continue; + } + // TODO: this one needs to access loot history to know highest item level for every inventory type //if (filters.HasFlag(AuctionHouseFilterMask::UpgradesOnly)) //{ diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 1ac82af2e4d..2d84fa3f5e8 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -97,19 +97,20 @@ constexpr std::size_t MAX_FAVORITE_AUCTIONS = 100; enum class AuctionHouseFilterMask : uint32 { - None = 0x0, - UncollectedOnly = 0x1, - UsableOnly = 0x2, - UpgradesOnly = 0x4, - ExactMatch = 0x8, - PoorQuality = 0x10, - CommonQuality = 0x20, - UncommonQuality = 0x40, - RareQuality = 0x80, - EpicQuality = 0x100, - LegendaryQuality = 0x200, - ArtifactQuality = 0x400, - LegendaryCraftedItemOnly = 0x800, + None = 0x0000, + UncollectedOnly = 0x0002, + UsableOnly = 0x0004, + CurrentExpansionOnly = 0x0008, + UpgradesOnly = 0x0010, + ExactMatch = 0x0020, + PoorQuality = 0x0040, + CommonQuality = 0x0080, + UncommonQuality = 0x0100, + RareQuality = 0x0200, + EpicQuality = 0x0400, + LegendaryQuality = 0x0800, + ArtifactQuality = 0x1000, + LegendaryCraftedItemOnly = 0x2000, }; DEFINE_ENUM_FLAG(AuctionHouseFilterMask); -- cgit v1.2.3