diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 6701b83cd..f61866af4 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -49,7 +49,6 @@ namespace Framework.Constants /// /// BattlePets Const /// - public const int MaxBattlePetSpeciesId = 3159; public const int DefaultMaxBattlePetsPerSpecies = 3; public const int BattlePetCageItemId = 82800; public const int SpellVisualUncagePet = 222; diff --git a/Source/Game/Handlers/AuctionHandler.cs b/Source/Game/Handlers/AuctionHandler.cs index 653b77555..765105bd2 100644 --- a/Source/Game/Handlers/AuctionHandler.cs +++ b/Source/Game/Handlers/AuctionHandler.cs @@ -79,7 +79,7 @@ namespace Game } auctionHouse.BuildListBuckets(listBucketsResult, _player, browseQuery.Name, browseQuery.MinLevel, browseQuery.MaxLevel, browseQuery.Filters, classFilters, - browseQuery.KnownPets, browseQuery.KnownPets.Count, (byte)browseQuery.MaxPetLevel, browseQuery.Offset, browseQuery.Sorts, browseQuery.Sorts.Count); + browseQuery.KnownPets, browseQuery.KnownPets.Length, (byte)browseQuery.MaxPetLevel, browseQuery.Offset, browseQuery.Sorts, browseQuery.Sorts.Count); listBucketsResult.BrowseMode = AuctionHouseBrowseMode.Search; listBucketsResult.DesiredDelay = (uint)throttle.DelayUntilNext.TotalSeconds; diff --git a/Source/Game/Networking/Packets/AuctionHousePackets.cs b/Source/Game/Networking/Packets/AuctionHousePackets.cs index 121302b64..7444dc636 100644 --- a/Source/Game/Networking/Packets/AuctionHousePackets.cs +++ b/Source/Game/Networking/Packets/AuctionHousePackets.cs @@ -16,9 +16,9 @@ */ using Framework.Constants; +using Game.DataStorage; using Game.Entities; using System.Collections.Generic; -using Framework.Dynamic; namespace Game.Networking.Packets { @@ -29,7 +29,7 @@ namespace Game.Networking.Packets public byte MinLevel = 1; public byte MaxLevel = SharedConst.MaxLevel; public AuctionHouseFilterMask Filters; - public Array KnownPets = new(SharedConst.MaxBattlePetSpeciesId / 8 + 1); + public byte[] KnownPets; public sbyte MaxPetLevel; public AddOnInfo? TaintedBy; public string Name; @@ -47,6 +47,12 @@ namespace Game.Networking.Packets Filters = (AuctionHouseFilterMask)_worldPacket.ReadUInt32(); uint knownPetSize = _worldPacket.ReadUInt32(); MaxPetLevel = _worldPacket.ReadInt8(); + + int sizeLimit = CliDB.BattlePetSpeciesStorage.Count / 8 +1; + if (knownPetSize >= sizeLimit) + throw new System.Exception($"Attempted to read more array elements from packet {knownPetSize} than allowed {sizeLimit}"); + + KnownPets = new byte[knownPetSize]; for (var i = 0; i < knownPetSize; ++i) KnownPets[i] = _worldPacket.ReadUInt8();