fix: Replaces FindItem(s)ByType(s) implementation with BFS strategy (#1454)
This commit is contained in:
parent
cd5fddd8d1
commit
52ca1fe686
8 changed files with 135 additions and 160 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@ public partial class SalvageBag : Bag
|
|||
|
||||
var items = FindItemsByType(_clothTypes);
|
||||
|
||||
for (var i = 0; i < items.Length; i++)
|
||||
for (var i = 0; i < items.Count; i++)
|
||||
{
|
||||
from.AddToBackpack(items[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -667,7 +667,7 @@ public abstract partial class BaseBeverage : Item, IHasQuantity
|
|||
// First pass, compute total
|
||||
var total = 0;
|
||||
|
||||
for (var i = 0; i < items.Length; ++i)
|
||||
for (var i = 0; i < items.Count; ++i)
|
||||
{
|
||||
if (items[i] is BaseBeverage bev && bev.Content == content && !bev.IsEmpty)
|
||||
{
|
||||
|
|
@ -681,7 +681,7 @@ public abstract partial class BaseBeverage : Item, IHasQuantity
|
|||
|
||||
var need = quantity;
|
||||
|
||||
for (var i = 0; i < items.Length; ++i)
|
||||
for (var i = 0; i < items.Count; ++i)
|
||||
{
|
||||
if (items[i] is not BaseBeverage bev || bev.Content != content || bev.IsEmpty)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ namespace Server.Mobiles
|
|||
return Math.Max(0, (int)Math.Min(int.MaxValue, balance));
|
||||
}
|
||||
|
||||
public static int GetBalance(Mobile m, out Item[] gold, out Item[] checks)
|
||||
public static int GetBalance(Mobile m, out List<Item> gold, out List<Item> checks)
|
||||
{
|
||||
long balance = 0;
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ namespace Server.Mobiles
|
|||
|
||||
if (balance > int.MaxValue)
|
||||
{
|
||||
gold = checks = Array.Empty<Item>();
|
||||
gold = checks = new List<Item>();
|
||||
return int.MaxValue;
|
||||
}
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ namespace Server.Mobiles
|
|||
}
|
||||
else
|
||||
{
|
||||
gold = checks = Array.Empty<Item>();
|
||||
gold = checks = new List<Item>();
|
||||
}
|
||||
|
||||
return Math.Max(0, (int)Math.Min(int.MaxValue, balance));
|
||||
|
|
@ -115,7 +115,7 @@ namespace Server.Mobiles
|
|||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; amount > 0 && i < gold.Length; ++i)
|
||||
for (var i = 0; amount > 0 && i < gold.Count; ++i)
|
||||
{
|
||||
if (gold[i].Amount <= amount)
|
||||
{
|
||||
|
|
@ -129,7 +129,7 @@ namespace Server.Mobiles
|
|||
}
|
||||
}
|
||||
|
||||
for (var i = 0; amount > 0 && i < checks.Length; ++i)
|
||||
for (var i = 0; amount > 0 && i < checks.Count; ++i)
|
||||
{
|
||||
var check = (BankCheck)checks[i];
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue