public override bool FillStacks(Item item, out List<Item> changed)
{
changed = new List<Item>();
if (item.Data.StackType != StackType.Stackable)
return false;
for (var y = 0; y < _height; ++y)
{
for (var x = 0; x < _width; ++x)
{
var invItem = _map[x, y];
if (invItem == null || changed.Contains(invItem))
continue;
// If same class or item is stack item of inventory item
if (item.Info.Id == invItem.Info.Id || invItem.Data.StackItemId == item.Info.Id)
{
// If item fits into stack 100%
if ((uint)invItem.Info.Amount + (uint)item.Info.Amount <= (uint)invItem.Data.StackMax)
{
invItem.Info.Amount += item.Info.Amount;
item.Info.Amount = 0;
changed.Add(invItem);
return true;
}
// If stack is not full
if (invItem.Info.Amount < invItem.Data.StackMax)
{
var diff = Math.Min(item.Info.Amount, (ushort)(invItem.Data.StackMax - invItem.Info.Amount));
item.Info.Amount -= diff;
invItem.Info.Amount += diff;
changed.Add(invItem);
}
}
}
}
return false;
}