Core/Auction House: Fixed sorting in non-equipment categories

Port From (https://github.com/TrinityCore/TrinityCore/commit/22a3cb4432ae6c2dcd2e38d92d03468a90224b78)
This commit is contained in:
hondacrx
2020-06-21 14:15:00 -04:00
parent b600c21ac2
commit dc68794b32
+32 -7
View File
@@ -561,6 +561,33 @@ namespace Game
bucket.ItemSubClass = (byte)itemTemplate.GetSubClass();
bucket.InventoryType = (byte)itemTemplate.GetInventoryType();
bucket.RequiredLevel = (byte)auction.Items[0].GetRequiredLevel();
switch (itemTemplate.GetClass())
{
case ItemClass.Weapon:
case ItemClass.Armor:
bucket.SortLevel = (byte)key.ItemLevel;
break;
case ItemClass.Container:
bucket.SortLevel = (byte)itemTemplate.GetContainerSlots();
break;
case ItemClass.Gem:
case ItemClass.ItemEnhancement:
bucket.SortLevel = (byte)itemTemplate.GetBaseItemLevel();
break;
case ItemClass.Consumable:
bucket.SortLevel = Math.Max((byte)1, bucket.RequiredLevel);
break;
case ItemClass.Miscellaneous:
case ItemClass.BattlePets:
bucket.SortLevel = 1;
break;
case ItemClass.Recipe:
bucket.SortLevel = (byte)((ItemSubClassRecipe)itemTemplate.GetSubClass() != ItemSubClassRecipe.Book ? itemTemplate.GetRequiredSkillRank() : (uint)itemTemplate.GetBaseRequiredLevel());
break;
default:
break;
}
for (LocaleConstant locale = LocaleConstant.enUS; locale < LocaleConstant.Total; ++locale)
{
if (locale == LocaleConstant.None)
@@ -609,6 +636,7 @@ namespace Game
bucket.MinBattlePetLevel = battlePetLevel;
bucket.MaxBattlePetLevel = Math.Max(bucket.MaxBattlePetLevel, battlePetLevel);
bucket.SortLevel = bucket.MaxBattlePetLevel;
}
}
@@ -1733,8 +1761,8 @@ namespace Game
return left.Bucket.FullName[(int)_locale].CompareTo(right.Bucket.FullName[(int)_locale]);
case AuctionHouseSortOrder.Level:
{
int leftLevel = left.Items[0].GetModifier(ItemModifier.BattlePetSpeciesId) == 0 ? left.Items[0].GetRequiredLevel() : (int)left.Items[0].GetModifier(ItemModifier.BattlePetLevel);
int rightLevel = right.Items[0].GetModifier(ItemModifier.BattlePetSpeciesId) == 0 ? right.Items[0].GetRequiredLevel() : (int)right.Items[0].GetModifier(ItemModifier.BattlePetLevel);
int leftLevel = left.Items[0].GetModifier(ItemModifier.BattlePetSpeciesId) == 0 ? left.Bucket.SortLevel : (int)left.Items[0].GetModifier(ItemModifier.BattlePetLevel);
int rightLevel = right.Items[0].GetModifier(ItemModifier.BattlePetSpeciesId) == 0 ? right.Bucket.SortLevel : (int)right.Items[0].GetModifier(ItemModifier.BattlePetLevel);
return leftLevel - rightLevel;
}
case AuctionHouseSortOrder.Bid:
@@ -1769,6 +1797,7 @@ namespace Game
public ulong MinPrice; // for sort
public (uint Id, uint Count)[] ItemModifiedAppearanceId = new (uint Id, uint Count)[4]; // for uncollected search
public byte RequiredLevel = 0; // for usable search
public byte SortLevel = 0;
public byte MinBattlePetLevel = 0;
public byte MaxBattlePetLevel = 0;
public string[] FullName = new string[(int)LocaleConstant.Total];
@@ -1847,11 +1876,7 @@ namespace Game
case AuctionHouseSortOrder.Name:
return left.FullName[(int)_locale].CompareTo(right.FullName[(int)_locale]);
case AuctionHouseSortOrder.Level:
{
int leftLevel = left.MaxBattlePetLevel == 0 ? left.RequiredLevel : left.MaxBattlePetLevel;
int rightLevel = right.MaxBattlePetLevel == 0 ? right.RequiredLevel : right.MaxBattlePetLevel;
return leftLevel - rightLevel;
}
return left.SortLevel - right.SortLevel;
default:
break;
}