aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp38
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h1
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 = { };