diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-06-18 10:57:26 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-06-18 10:57:26 +0200 |
| commit | 22a3cb4432ae6c2dcd2e38d92d03468a90224b78 (patch) | |
| tree | dbad8182fce0c2f796225565e8921f6019be2f3b /src | |
| parent | 6e62bf5a1eebb8e8fc9f59eab7ee590025fc3f31 (diff) | |
Core/Auction House: Fixed sorting in non-equipment categories
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 38 | ||||
| -rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.h | 1 |
2 files changed, 32 insertions, 7 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 29bc98be5e0..a42b0ea43c1 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -280,11 +280,7 @@ private: case AuctionHouseSortOrder::Name: return left->FullName[_locale].compare(right->FullName[_locale]); case AuctionHouseSortOrder::Level: - { - int32 leftLevel = !left->MaxBattlePetLevel ? left->RequiredLevel : left->MaxBattlePetLevel; - int32 rightLevel = !right->MaxBattlePetLevel ? right->RequiredLevel : right->MaxBattlePetLevel; - return leftLevel - rightLevel; - } + return int32(left->SortLevel) - int32(right->SortLevel); default: break; } @@ -335,10 +331,10 @@ private: case AuctionHouseSortOrder::Level: { int32 leftLevel = !left->Items[0]->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID) - ? left->Items[0]->GetRequiredLevel() + ? left->Bucket->SortLevel : left->Items[0]->GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL); int32 rightLevel = !right->Items[0]->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID) - ? right->Items[0]->GetRequiredLevel() + ? right->Bucket->SortLevel : right->Items[0]->GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL); return leftLevel - rightLevel; } @@ -902,6 +898,33 @@ void AuctionHouseObject::AddAuction(CharacterDatabaseTransaction trans, AuctionP bucket->ItemSubClass = itemTemplate->GetSubClass(); bucket->InventoryType = itemTemplate->GetInventoryType(); bucket->RequiredLevel = auction.Items[0]->GetRequiredLevel(); + switch (itemTemplate->GetClass()) + { + case ITEM_CLASS_WEAPON: + case ITEM_CLASS_ARMOR: + bucket->SortLevel = key.ItemLevel; + break; + case ITEM_CLASS_CONTAINER: + bucket->SortLevel = itemTemplate->GetContainerSlots(); + break; + case ITEM_CLASS_GEM: + case ITEM_CLASS_ITEM_ENHANCEMENT: + bucket->SortLevel = itemTemplate->GetBaseItemLevel(); + break; + case ITEM_CLASS_CONSUMABLE: + bucket->SortLevel = std::max<uint8>(1, bucket->RequiredLevel); + break; + case ITEM_CLASS_MISCELLANEOUS: + case ITEM_CLASS_BATTLE_PETS: + bucket->SortLevel = 1; + break; + case ITEM_CLASS_RECIPE: + bucket->SortLevel = itemTemplate->GetSubClass() != ITEM_SUBCLASS_BOOK ? itemTemplate->GetRequiredSkillRank() : itemTemplate->GetBaseRequiredLevel(); + break; + default: + break; + } + for (LocaleConstant locale = LOCALE_enUS; locale < TOTAL_LOCALES; locale = LocaleConstant(locale + 1)) { if (locale == LOCALE_none) @@ -956,6 +979,7 @@ void AuctionHouseObject::AddAuction(CharacterDatabaseTransaction trans, AuctionP bucket->MinBattlePetLevel = battlePetLevel; bucket->MaxBattlePetLevel = std::max<uint8>(bucket->MaxBattlePetLevel, battlePetLevel); + bucket->SortLevel = bucket->MaxBattlePetLevel; } } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index 33a902b6d32..a55772e1611 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -211,6 +211,7 @@ 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; uint8 MinBattlePetLevel = 0; uint8 MaxBattlePetLevel = 0; std::array<std::wstring, TOTAL_LOCALES> FullName = { }; |
