NEO-54: dedupe slot cloning on PlayerInventorySnapshot
parent
3f664261b7
commit
126d979939
|
|
@ -98,22 +98,10 @@ public sealed class InMemoryPlayerInventoryStore(IOptions<GamePositionOptions> o
|
|||
private static PlayerInventorySnapshot Clone(PlayerInventorySnapshot source) =>
|
||||
new()
|
||||
{
|
||||
BagSlots = CloneSlots(source.BagSlots),
|
||||
EquipmentSlots = CloneSlots(source.EquipmentSlots),
|
||||
BagSlots = PlayerInventorySnapshot.CloneSlots(source.BagSlots),
|
||||
EquipmentSlots = PlayerInventorySnapshot.CloneSlots(source.EquipmentSlots),
|
||||
};
|
||||
|
||||
private static InventorySlotState[] CloneSlots(InventorySlotState[] slots)
|
||||
{
|
||||
var copy = new InventorySlotState[slots.Length];
|
||||
for (var i = 0; i < slots.Length; i++)
|
||||
{
|
||||
var s = slots[i];
|
||||
copy[i] = new InventorySlotState(s.SlotIndex, s.ItemId, s.Quantity);
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
private static string NormalizePlayerId(string? playerId)
|
||||
{
|
||||
var t = playerId?.Trim();
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public static class PlayerInventoryOperations
|
|||
before =>
|
||||
{
|
||||
var container = PlayerInventorySnapshot.ContainerFromSlotKind(def.InventorySlotKind);
|
||||
var slots = CloneSlots(before.GetSlots(container));
|
||||
var slots = PlayerInventorySnapshot.CloneSlots(before.GetSlots(container));
|
||||
var remaining = quantity;
|
||||
remaining = MergeIntoExistingStacks(slots, def.Id, remaining, def.StackMax);
|
||||
remaining = FillEmptySlots(slots, def.Id, remaining, def.StackMax);
|
||||
|
|
@ -82,7 +82,7 @@ public static class PlayerInventoryOperations
|
|||
before =>
|
||||
{
|
||||
var container = PlayerInventorySnapshot.ContainerFromSlotKind(def.InventorySlotKind);
|
||||
var slots = CloneSlots(before.GetSlots(container));
|
||||
var slots = PlayerInventorySnapshot.CloneSlots(before.GetSlots(container));
|
||||
var available = CountQuantity(slots, def.Id);
|
||||
if (available < quantity)
|
||||
{
|
||||
|
|
@ -186,16 +186,4 @@ public static class PlayerInventoryOperations
|
|||
|
||||
return total;
|
||||
}
|
||||
|
||||
private static InventorySlotState[] CloneSlots(InventorySlotState[] slots)
|
||||
{
|
||||
var copy = new InventorySlotState[slots.Length];
|
||||
for (var i = 0; i < slots.Length; i++)
|
||||
{
|
||||
var s = slots[i];
|
||||
copy[i] = new InventorySlotState(s.SlotIndex, s.ItemId, s.Quantity);
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,18 @@ public sealed class PlayerInventorySnapshot
|
|||
return slots;
|
||||
}
|
||||
|
||||
public static InventorySlotState[] CloneSlots(InventorySlotState[] slots)
|
||||
{
|
||||
var copy = new InventorySlotState[slots.Length];
|
||||
for (var i = 0; i < slots.Length; i++)
|
||||
{
|
||||
var s = slots[i];
|
||||
copy[i] = new InventorySlotState(s.SlotIndex, s.ItemId, s.Quantity);
|
||||
}
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
public InventorySlotState[] GetSlots(InventoryContainerKind container) =>
|
||||
container == InventoryContainerKind.Equipment ? EquipmentSlots : BagSlots;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue