diff --git a/server/NeonSprawl.Server/Game/Items/InMemoryPlayerInventoryStore.cs b/server/NeonSprawl.Server/Game/Items/InMemoryPlayerInventoryStore.cs index 6a67d79..e240a96 100644 --- a/server/NeonSprawl.Server/Game/Items/InMemoryPlayerInventoryStore.cs +++ b/server/NeonSprawl.Server/Game/Items/InMemoryPlayerInventoryStore.cs @@ -98,22 +98,10 @@ public sealed class InMemoryPlayerInventoryStore(IOptions 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(); diff --git a/server/NeonSprawl.Server/Game/Items/PlayerInventoryOperations.cs b/server/NeonSprawl.Server/Game/Items/PlayerInventoryOperations.cs index d6b1b97..8accf06 100644 --- a/server/NeonSprawl.Server/Game/Items/PlayerInventoryOperations.cs +++ b/server/NeonSprawl.Server/Game/Items/PlayerInventoryOperations.cs @@ -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; - } } diff --git a/server/NeonSprawl.Server/Game/Items/PlayerInventorySnapshot.cs b/server/NeonSprawl.Server/Game/Items/PlayerInventorySnapshot.cs index 23a2858..089c9e3 100644 --- a/server/NeonSprawl.Server/Game/Items/PlayerInventorySnapshot.cs +++ b/server/NeonSprawl.Server/Game/Items/PlayerInventorySnapshot.cs @@ -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;