diff options
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 = { }; |