diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 13 | ||||
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.h | 27 |
2 files changed, 24 insertions, 16 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 83c99e96feb..3aa347b7457 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<AuctionHouseFilterMask>(1 << (quality + 4)); + bucket->QualityMask |= static_cast<AuctionHouseFilterMask>(AsUnderlyingType(AuctionHouseFilterMask::PoorQuality) << quality); ++bucket->QualityCounts[quality]; if (trans) @@ -1063,7 +1063,7 @@ std::map<uint32, AuctionPosting>::node_type AuctionHouseObject::RemoveAuction(Ch } if (!--bucket->QualityCounts[quality]) - bucket->QualityMask &= static_cast<AuctionHouseFilterMask>(~(1 << (quality + 4))); + bucket->QualityMask &= static_cast<AuctionHouseFilterMask>(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); |