Core/Auction House: Fixed sorting items with itemlevel greater than 255
Port From (https://github.com/TrinityCore/TrinityCore/commit/b98df50addfdf3e55b1deb5ae2c68aa593548287)
This commit is contained in:
@@ -261,9 +261,9 @@ namespace Game
|
||||
_itemsByGuid[item.GetGUID()] = item;
|
||||
}
|
||||
|
||||
public bool RemoveAItem(ObjectGuid guid, bool deleteItem = false, SQLTransaction trans = null)
|
||||
public bool RemoveAItem(ObjectGuid itemGuid, bool deleteItem = false, SQLTransaction trans = null)
|
||||
{
|
||||
var item = _itemsByGuid.LookupByKey(guid);
|
||||
var item = _itemsByGuid.LookupByKey(itemGuid);
|
||||
if (item == null)
|
||||
return false;
|
||||
|
||||
@@ -273,7 +273,7 @@ namespace Game
|
||||
item.SaveToDB(trans);
|
||||
}
|
||||
|
||||
_itemsByGuid.Remove(guid);
|
||||
_itemsByGuid.Remove(itemGuid);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -663,7 +663,7 @@ namespace Game
|
||||
|
||||
_itemsByAuctionId[auction.Id] = auction;
|
||||
|
||||
AuctionPosting.Sorter insertSorter = new(Locale.enUS, new AuctionSortDef[] { new AuctionSortDef(AuctionHouseSortOrder.Price, false) }, 1);
|
||||
AuctionPosting.Sorter insertSorter = new(Locale.enUS, [new AuctionSortDef(AuctionHouseSortOrder.Price, false)]);
|
||||
var auctionIndex = bucket.Auctions.BinarySearch(auction, insertSorter);
|
||||
if (auctionIndex < 0)
|
||||
auctionIndex = ~auctionIndex;
|
||||
@@ -811,7 +811,7 @@ namespace Game
|
||||
}
|
||||
|
||||
public void BuildListBuckets(AuctionListBucketsResult listBucketsResult, Player player, string name, byte minLevel, byte maxLevel, AuctionHouseFilterMask filters, AuctionSearchClassFilters classFilters,
|
||||
byte[] knownPetBits, int knownPetBitsCount, byte maxKnownPetLevel, uint offset, AuctionSortDef[] sorts, int sortCount)
|
||||
byte[] knownPetBits, byte maxKnownPetLevel, uint offset, AuctionSortDef[] sorts)
|
||||
{
|
||||
List<uint> knownAppearanceIds = new();
|
||||
BitArray knownPetSpecies = new(knownPetBits);
|
||||
@@ -819,12 +819,11 @@ namespace Game
|
||||
if (filters.HasFlag(AuctionHouseFilterMask.UncollectedOnly))
|
||||
{
|
||||
knownAppearanceIds = player.GetSession().GetCollectionMgr().GetAppearanceIds();
|
||||
//todo fix me
|
||||
//if (knownPetSpecies.Length < CliDB.BattlePetSpeciesStorage.GetNumRows())
|
||||
//knownPetSpecies.resize(CliDB.BattlePetSpeciesStorage.GetNumRows());
|
||||
if (knownPetSpecies.Length < CliDB.BattlePetSpeciesStorage.GetNumRows())
|
||||
knownPetSpecies.Length = (int)CliDB.BattlePetSpeciesStorage.GetNumRows();
|
||||
}
|
||||
|
||||
var sorter = new AuctionsBucketData.Sorter(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
var sorter = new AuctionsBucketData.Sorter(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
var builder = new AuctionsResultBuilder<AuctionsBucketData>(offset, sorter, AuctionHouseResultLimits.Browse);
|
||||
|
||||
foreach (var bucket in _buckets)
|
||||
@@ -956,17 +955,17 @@ namespace Game
|
||||
listBucketsResult.HasMoreResults = builder.HasMoreResults();
|
||||
}
|
||||
|
||||
public void BuildListBuckets(AuctionListBucketsResult listBucketsResult, Player player, AuctionBucketKey[] keys, int keysCount, AuctionSortDef[] sorts, int sortCount)
|
||||
public void BuildListBuckets(AuctionListBucketsResult listBucketsResult, Player player, AuctionBucketKey[] keys, AuctionSortDef[] sorts)
|
||||
{
|
||||
List<AuctionsBucketData> buckets = new();
|
||||
for (int i = 0; i < keysCount; ++i)
|
||||
foreach (AuctionBucketKey key in keys)
|
||||
{
|
||||
var bucketData = _buckets.LookupByKey(new AuctionsBucketKey(keys[i]));
|
||||
var bucketData = _buckets.LookupByKey(new AuctionsBucketKey(key));
|
||||
if (bucketData != null)
|
||||
buckets.Add(bucketData);
|
||||
}
|
||||
|
||||
AuctionsBucketData.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionsBucketData.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
buckets.Sort(sorter);
|
||||
|
||||
foreach (AuctionsBucketData resultBucket in buckets)
|
||||
@@ -979,7 +978,7 @@ namespace Game
|
||||
listBucketsResult.HasMoreResults = false;
|
||||
}
|
||||
|
||||
public void BuildListBiddedItems(AuctionListBiddedItemsResult listBidderItemsResult, Player player, uint offset, AuctionSortDef[] sorts, int sortCount)
|
||||
public void BuildListBiddedItems(AuctionListBiddedItemsResult listBidderItemsResult, Player player, uint offset, AuctionSortDef[] sorts)
|
||||
{
|
||||
// always full list
|
||||
List<AuctionPosting> auctions = new();
|
||||
@@ -990,7 +989,7 @@ namespace Game
|
||||
auctions.Add(auction);
|
||||
}
|
||||
|
||||
AuctionPosting.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionPosting.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
auctions.Sort(sorter);
|
||||
|
||||
foreach (var resultAuction in auctions)
|
||||
@@ -1003,13 +1002,13 @@ namespace Game
|
||||
listBidderItemsResult.HasMoreResults = false;
|
||||
}
|
||||
|
||||
public void BuildListAuctionItems(AuctionListItemsResult listItemsResult, Player player, AuctionsBucketKey bucketKey, uint offset, AuctionSortDef[] sorts, int sortCount)
|
||||
public void BuildListAuctionItems(AuctionListItemsResult listItemsResult, Player player, AuctionsBucketKey bucketKey, uint offset, AuctionSortDef[] sorts)
|
||||
{
|
||||
listItemsResult.TotalCount = 0;
|
||||
AuctionsBucketData bucket = _buckets.LookupByKey(bucketKey);
|
||||
if (bucket != null)
|
||||
{
|
||||
var sorter = new AuctionPosting.Sorter(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
var sorter = new AuctionPosting.Sorter(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
var builder = new AuctionsResultBuilder<AuctionPosting>(offset, sorter, AuctionHouseResultLimits.Items);
|
||||
|
||||
foreach (var auction in bucket.Auctions)
|
||||
@@ -1030,9 +1029,9 @@ namespace Game
|
||||
}
|
||||
}
|
||||
|
||||
public void BuildListAuctionItems(AuctionListItemsResult listItemsResult, Player player, uint itemId, uint offset, AuctionSortDef[] sorts, int sortCount)
|
||||
public void BuildListAuctionItems(AuctionListItemsResult listItemsResult, Player player, uint itemId, uint offset, AuctionSortDef[] sorts)
|
||||
{
|
||||
var sorter = new AuctionPosting.Sorter(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
var sorter = new AuctionPosting.Sorter(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
var builder = new AuctionsResultBuilder<AuctionPosting>(offset, sorter, AuctionHouseResultLimits.Items);
|
||||
|
||||
listItemsResult.TotalCount = 0;
|
||||
@@ -1059,7 +1058,7 @@ namespace Game
|
||||
listItemsResult.HasMoreResults = builder.HasMoreResults();
|
||||
}
|
||||
|
||||
public void BuildListOwnedItems(AuctionListOwnedItemsResult listOwnerItemsResult, Player player, uint offset, AuctionSortDef[] sorts, int sortCount)
|
||||
public void BuildListOwnedItems(AuctionListOwnedItemsResult listOwnerItemsResult, Player player, uint offset, AuctionSortDef[] sorts)
|
||||
{
|
||||
// always full list
|
||||
List<AuctionPosting> auctions = new();
|
||||
@@ -1070,7 +1069,7 @@ namespace Game
|
||||
auctions.Add(auction);
|
||||
}
|
||||
|
||||
AuctionPosting.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts, sortCount);
|
||||
AuctionPosting.Sorter sorter = new(player.GetSession().GetSessionDbcLocale(), sorts);
|
||||
auctions.Sort(sorter);
|
||||
|
||||
foreach (var resultAuction in auctions)
|
||||
@@ -1726,20 +1725,19 @@ namespace Game
|
||||
|
||||
public class Sorter : IComparer<AuctionPosting>
|
||||
{
|
||||
public Sorter(Locale locale, AuctionSortDef[] sorts, int sortCount)
|
||||
public Sorter(Locale locale, AuctionSortDef[] sorts)
|
||||
{
|
||||
_locale = locale;
|
||||
_sorts = sorts;
|
||||
_sortCount = sortCount;
|
||||
}
|
||||
|
||||
public int Compare(AuctionPosting left, AuctionPosting right)
|
||||
{
|
||||
for (var i = 0; i < _sortCount; ++i)
|
||||
foreach (AuctionSortDef sort in _sorts)
|
||||
{
|
||||
long ordering = CompareColumns(_sorts[i].SortOrder, left, right);
|
||||
long ordering = CompareColumns(sort.SortOrder, left, right);
|
||||
if (ordering != 0)
|
||||
return (ordering < 0).CompareTo(!_sorts[i].ReverseSort);
|
||||
return (ordering < 0).CompareTo(!sort.ReverseSort);
|
||||
}
|
||||
|
||||
// Auctions are processed in LIFO order
|
||||
@@ -1782,7 +1780,6 @@ namespace Game
|
||||
|
||||
Locale _locale;
|
||||
AuctionSortDef[] _sorts;
|
||||
int _sortCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1800,10 +1797,10 @@ namespace Game
|
||||
public uint[] QualityCounts = new uint[(int)ItemQuality.Max];
|
||||
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 byte RequiredLevel; // for usable search
|
||||
public ushort SortLevel;
|
||||
public byte MinBattlePetLevel;
|
||||
public byte MaxBattlePetLevel;
|
||||
public string[] FullName = new string[(int)Locale.Total];
|
||||
|
||||
public List<AuctionPosting> Auctions = new();
|
||||
@@ -1855,20 +1852,19 @@ namespace Game
|
||||
|
||||
public class Sorter : IComparer<AuctionsBucketData>
|
||||
{
|
||||
public Sorter(Locale locale, AuctionSortDef[] sorts, int sortCount)
|
||||
public Sorter(Locale locale, AuctionSortDef[] sorts)
|
||||
{
|
||||
_locale = locale;
|
||||
_sorts = sorts;
|
||||
_sortCount = sortCount;
|
||||
}
|
||||
|
||||
public int Compare(AuctionsBucketData left, AuctionsBucketData right)
|
||||
{
|
||||
for (var i = 0; i < _sortCount; ++i)
|
||||
foreach (AuctionSortDef sort in _sorts)
|
||||
{
|
||||
long ordering = CompareColumns(_sorts[i].SortOrder, left, right);
|
||||
long ordering = CompareColumns(sort.SortOrder, left, right);
|
||||
if (ordering != 0)
|
||||
return (ordering < 0).CompareTo(!_sorts[i].ReverseSort);
|
||||
return (ordering < 0).CompareTo(!sort.ReverseSort);
|
||||
}
|
||||
|
||||
return left.Key != right.Key ? 1 : 0;
|
||||
@@ -1895,7 +1891,6 @@ namespace Game
|
||||
|
||||
Locale _locale;
|
||||
AuctionSortDef[] _sorts;
|
||||
int _sortCount;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace Game
|
||||
}
|
||||
|
||||
auctionHouse.BuildListBuckets(listBucketsResult, _player, browseQuery.Name, browseQuery.MinLevel, browseQuery.MaxLevel, browseQuery.Filters, classFilters,
|
||||
browseQuery.KnownPets, browseQuery.KnownPets.Length, (byte)browseQuery.MaxPetLevel, browseQuery.Offset, browseQuery.Sorts, browseQuery.Sorts.Count);
|
||||
browseQuery.KnownPets, (byte)browseQuery.MaxPetLevel, browseQuery.Offset, browseQuery.Sorts);
|
||||
|
||||
listBucketsResult.BrowseMode = AuctionHouseBrowseMode.Search;
|
||||
listBucketsResult.DesiredDelay = (uint)throttle.DelayUntilNext.TotalSeconds;
|
||||
@@ -174,7 +174,7 @@ namespace Game
|
||||
AuctionListBiddedItemsResult result = new();
|
||||
|
||||
Player player = GetPlayer();
|
||||
auctionHouse.BuildListBiddedItems(result, player, listBiddedItems.Offset, listBiddedItems.Sorts, listBiddedItems.Sorts.Count);
|
||||
auctionHouse.BuildListBiddedItems(result, player, listBiddedItems.Offset, listBiddedItems.Sorts);
|
||||
result.DesiredDelay = (uint)throttle.DelayUntilNext.TotalSeconds;
|
||||
SendPacket(result);
|
||||
}
|
||||
@@ -201,9 +201,7 @@ namespace Game
|
||||
|
||||
AuctionListBucketsResult listBucketsResult = new();
|
||||
|
||||
auctionHouse.BuildListBuckets(listBucketsResult, _player,
|
||||
listBucketsByBucketKeys.BucketKeys, listBucketsByBucketKeys.BucketKeys.Count,
|
||||
listBucketsByBucketKeys.Sorts, listBucketsByBucketKeys.Sorts.Count);
|
||||
auctionHouse.BuildListBuckets(listBucketsResult, _player, listBucketsByBucketKeys.BucketKeys, listBucketsByBucketKeys.Sorts);
|
||||
|
||||
listBucketsResult.BrowseMode = AuctionHouseBrowseMode.SpecificKeys;
|
||||
listBucketsResult.DesiredDelay = (uint)throttle.DelayUntilNext.TotalSeconds;
|
||||
@@ -236,8 +234,7 @@ namespace Game
|
||||
ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(listItemsByBucketKey.BucketKey.ItemID);
|
||||
listItemsResult.ListType = itemTemplate != null && itemTemplate.GetMaxStackSize() > 1 ? AuctionHouseListType.Commodities : AuctionHouseListType.Items;
|
||||
|
||||
auctionHouse.BuildListAuctionItems(listItemsResult, _player, new AuctionsBucketKey(listItemsByBucketKey.BucketKey), listItemsByBucketKey.Offset,
|
||||
listItemsByBucketKey.Sorts, listItemsByBucketKey.Sorts.Count);
|
||||
auctionHouse.BuildListAuctionItems(listItemsResult, _player, new AuctionsBucketKey(listItemsByBucketKey.BucketKey), listItemsByBucketKey.Offset, listItemsByBucketKey.Sorts);
|
||||
|
||||
SendPacket(listItemsResult);
|
||||
}
|
||||
@@ -268,8 +265,7 @@ namespace Game
|
||||
ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(listItemsByItemID.ItemID);
|
||||
listItemsResult.ListType = itemTemplate != null && itemTemplate.GetMaxStackSize() > 1 ? AuctionHouseListType.Commodities : AuctionHouseListType.Items;
|
||||
|
||||
auctionHouse.BuildListAuctionItems(listItemsResult, _player, listItemsByItemID.ItemID, listItemsByItemID.Offset,
|
||||
listItemsByItemID.Sorts, listItemsByItemID.Sorts.Count);
|
||||
auctionHouse.BuildListAuctionItems(listItemsResult, _player, listItemsByItemID.ItemID, listItemsByItemID.Offset, listItemsByItemID.Sorts);
|
||||
|
||||
SendPacket(listItemsResult);
|
||||
}
|
||||
@@ -296,7 +292,7 @@ namespace Game
|
||||
|
||||
AuctionListOwnedItemsResult result = new();
|
||||
|
||||
auctionHouse.BuildListOwnedItems(result, _player, listOwnedItems.Offset, listOwnedItems.Sorts, listOwnedItems.Sorts.Count);
|
||||
auctionHouse.BuildListOwnedItems(result, _player, listOwnedItems.Offset, listOwnedItems.Sorts);
|
||||
result.DesiredDelay = (uint)throttle.DelayUntilNext.TotalSeconds;
|
||||
SendPacket(result);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user