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) =>
|
private static PlayerInventorySnapshot Clone(PlayerInventorySnapshot source) =>
|
||||||
new()
|
new()
|
||||||
{
|
{
|
||||||
BagSlots = CloneSlots(source.BagSlots),
|
BagSlots = PlayerInventorySnapshot.CloneSlots(source.BagSlots),
|
||||||
EquipmentSlots = CloneSlots(source.EquipmentSlots),
|
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)
|
private static string NormalizePlayerId(string? playerId)
|
||||||
{
|
{
|
||||||
var t = playerId?.Trim();
|
var t = playerId?.Trim();
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ public static class PlayerInventoryOperations
|
||||||
before =>
|
before =>
|
||||||
{
|
{
|
||||||
var container = PlayerInventorySnapshot.ContainerFromSlotKind(def.InventorySlotKind);
|
var container = PlayerInventorySnapshot.ContainerFromSlotKind(def.InventorySlotKind);
|
||||||
var slots = CloneSlots(before.GetSlots(container));
|
var slots = PlayerInventorySnapshot.CloneSlots(before.GetSlots(container));
|
||||||
var remaining = quantity;
|
var remaining = quantity;
|
||||||
remaining = MergeIntoExistingStacks(slots, def.Id, remaining, def.StackMax);
|
remaining = MergeIntoExistingStacks(slots, def.Id, remaining, def.StackMax);
|
||||||
remaining = FillEmptySlots(slots, def.Id, remaining, def.StackMax);
|
remaining = FillEmptySlots(slots, def.Id, remaining, def.StackMax);
|
||||||
|
|
@ -82,7 +82,7 @@ public static class PlayerInventoryOperations
|
||||||
before =>
|
before =>
|
||||||
{
|
{
|
||||||
var container = PlayerInventorySnapshot.ContainerFromSlotKind(def.InventorySlotKind);
|
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);
|
var available = CountQuantity(slots, def.Id);
|
||||||
if (available < quantity)
|
if (available < quantity)
|
||||||
{
|
{
|
||||||
|
|
@ -186,16 +186,4 @@ public static class PlayerInventoryOperations
|
||||||
|
|
||||||
return total;
|
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;
|
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) =>
|
public InventorySlotState[] GetSlots(InventoryContainerKind container) =>
|
||||||
container == InventoryContainerKind.Equipment ? EquipmentSlots : BagSlots;
|
container == InventoryContainerKind.Equipment ? EquipmentSlots : BagSlots;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue