fix: Replaces FindItem(s)ByType(s) implementation with BFS strategy (#1454)

This commit is contained in:
Stefano Merotta 2023-08-19 07:05:28 +02:00 • committed by GitHub
parent cd5fddd8d1
commit 52ca1fe686
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 135 additions and 160 deletions

View file

@ -143,7 +143,7 @@ namespace Server.Engines.Craft
{
var items = from.Backpack.FindItemsByType(resourceType);
for (var i = 0; i < items.Length; ++i)
for (var i = 0; i < items.Count; ++i)
{
resourceCount += items[i].Amount;
}
@ -187,7 +187,7 @@ namespace Server.Engines.Craft
{
var items = from.Backpack.FindItemsByType(resourceType);
for (var i = 0; i < items.Length; ++i)
for (var i = 0; i < items.Count; ++i)
{
resourceCount += items[i].Amount;
}
@ -265,7 +265,7 @@ namespace Server.Engines.Craft
{
var items = from.Backpack.FindItemsByType(subResource.ItemType);
for (var j = 0; j < items.Length; ++j)
for (var j = 0; j < items.Count; ++j)
{
resourceCount += items[j].Amount;
}

View file

@ -454,14 +454,14 @@ namespace Server.Engines.Craft
}
// TODO: Optimize allocation
var items = new Item[types.Length][];
var items = new List<Item>[types.Length];
var totals = new int[types.Length];
for (var i = 0; i < types.Length; ++i)
{
items[i] = cont.FindItemsByType(types[i]);
for (var j = 0; j < items[i].Length; ++j)
for (var j = 0; j < items[i].Count; ++j)
{
if (items[i][j] is not IHasQuantity hq)
{
@ -483,7 +483,7 @@ namespace Server.Engines.Craft
{
var need = amounts[i];
for (var j = 0; j < items[i].Length; ++j)
for (var j = 0; j < items[i].Count; ++j)
{
var item = items[i][j];
@ -534,7 +534,7 @@ namespace Server.Engines.Craft
var amount = 0;
for (var i = 0; i < items.Length; ++i)
for (var i = 0; i < items.Count; ++i)
{
if (items[i] is not IHasQuantity hq)
{

View file

@ -351,7 +351,7 @@ namespace Server.Gumps
var items = pack.FindItemsByType(TreasuresOfTokuno.LesserArtifactsTotal);
for (var i = 0; i < items.Length; i++)
for (var i = 0; i < items.Count; i++)
{
var item = items[i];
if (item is ChestOfHeirlooms heirlooms && (!heirlooms.Locked || heirlooms.TrapLevel != 10))