diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs index c5660cad..8552eb05 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ContainerExtensions.cs @@ -84,16 +84,20 @@ public static class ContainerExtensions /// Items width /// Items height /// is item rotated - /// bool = true when successful, string = error message if failed - public static (bool, string) FillContainerMapWithItem( + /// Error message if failed + /// bool = true when successful + public static bool TryFillContainerMapWithItem( this int[,] container2D, int columnStartPositionX, int rowStartPositionY, int? itemXWidth, int? itemYHeight, - bool isRotated + bool isRotated, + out string errorMessage ) { + errorMessage = string.Empty; + var containerY = container2D.GetLength(0); // rows var containerX = container2D.GetLength(1); // columns @@ -109,7 +113,7 @@ public static class ContainerExtensions { container2D[rowStartPositionY, columnStartPositionX] = 1; - return (true, string.Empty); + return true; } // Loop over rows and columns and flag each as taken by item @@ -124,15 +128,14 @@ public static class ContainerExtensions } else { - return ( - false, - $"Slot at: ({containerX}, {containerY}) is already filled. Cannot fit: {itemXWidth} by {itemYHeight} item" - ); + errorMessage = + $"Slot at: ({containerX}, {containerY}) is already filled. Cannot fit: {itemXWidth} by {itemYHeight} item"; + return false; } } } - return (true, string.Empty); + return true; } /// diff --git a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs index 0f9539de..bc922280 100644 --- a/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs +++ b/Libraries/SPTarkov.Server.Core/Generators/LocationLootGenerator.cs @@ -503,12 +503,13 @@ public class LocationLootGenerator( } // Find somewhere for item inside container - containerMap.FillContainerMapWithItem( + containerMap.TryFillContainerMapWithItem( result.X.Value, result.Y.Value, chosenItemWithChildren.Width, chosenItemWithChildren.Height, - result.Rotation.GetValueOrDefault(false) + result.Rotation.GetValueOrDefault(false), + out _ ); // Update root item properties with result of position finder diff --git a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs index 8db557c9..870b1e33 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/InventoryHelper.cs @@ -240,12 +240,13 @@ public class InventoryHelper( { try { - containerFS2D.FillContainerMapWithItem( + containerFS2D.TryFillContainerMapWithItem( findSlotResult.X.Value, findSlotResult.Y.Value, sizeX, sizeY, - findSlotResult.Rotation.Value + findSlotResult.Rotation.Value, + out _ ); } catch (Exception ex) @@ -286,12 +287,13 @@ public class InventoryHelper( { try { - containerFS2D.FillContainerMapWithItem( + containerFS2D.TryFillContainerMapWithItem( findSlotResult.X.Value, findSlotResult.Y.Value, sizeX, sizeY, - findSlotResult.Rotation.Value + findSlotResult.Rotation.Value, + out _ ); } catch (Exception ex) @@ -346,12 +348,13 @@ public class InventoryHelper( { try { - stashFS2D.FillContainerMapWithItem( + stashFS2D.TryFillContainerMapWithItem( findSlotResult.X.Value, findSlotResult.Y.Value, sizeX, sizeY, - findSlotResult.Rotation.Value + findSlotResult.Rotation.Value, + out _ ); } catch (Exception ex) @@ -383,12 +386,13 @@ public class InventoryHelper( try { - sortingTableFS2D.FillContainerMapWithItem( + sortingTableFS2D.TryFillContainerMapWithItem( findSortingSlotResult.X.Value, findSortingSlotResult.Y.Value, sizeX, sizeY, - findSortingSlotResult.Rotation.Value + findSortingSlotResult.Rotation.Value, + out _ ); } catch (Exception ex) diff --git a/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs b/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs index ef4d1720..83743ef8 100644 --- a/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/AirdropService.cs @@ -122,12 +122,13 @@ public class AirdropService( lootResult.AddRange(itemAndChildren); // Update container with item we just added - containerMap.FillContainerMapWithItem( + containerMap.TryFillContainerMapWithItem( result.X.Value, result.Y.Value, itemSize.Width, itemSize.Height, - result.Rotation.GetValueOrDefault(false) + result.Rotation.GetValueOrDefault(false), + out _ ); continue; diff --git a/Libraries/SPTarkov.Server.Core/Services/BotInventoryContainerService.cs b/Libraries/SPTarkov.Server.Core/Services/BotInventoryContainerService.cs index 889be21e..2f9eafcc 100644 --- a/Libraries/SPTarkov.Server.Core/Services/BotInventoryContainerService.cs +++ b/Libraries/SPTarkov.Server.Core/Services/BotInventoryContainerService.cs @@ -217,14 +217,15 @@ public class BotInventoryContainerService(ISptLogger logger, } // Look for a slot in the grid to place item - var result = gridDetails.GridMap.FillContainerMapWithItem( + var result = gridDetails.GridMap.TryFillContainerMapWithItem( fixedLocation.X.Value, fixedLocation.Y.Value, itemWidth, itemHeight, - fixedLocation.R == ItemRotation.Vertical + fixedLocation.R == ItemRotation.Vertical, + out _ ); - if (result.Item1) + if (result) { // It Fits! diff --git a/Testing/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs b/Testing/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs index 6527d7d7..02da152f 100644 --- a/Testing/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs +++ b/Testing/UnitTests/Tests/Extensions/ContainerExtensionsTests.cs @@ -226,7 +226,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); + container.TryFillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated, out _); Assert.AreEqual(container[0, 0], 1); } @@ -243,7 +243,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); + container.TryFillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated, out _); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[1, 0], 1); @@ -261,7 +261,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = false; - container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); + container.TryFillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated, out _); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[1, 1], 1); @@ -279,7 +279,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 0; var isRotated = true; - container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); + container.TryFillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated, out _); Assert.AreEqual(container[0, 0], 1); Assert.AreEqual(container[0, 1], 1); @@ -298,7 +298,7 @@ public partial class ContainerExtensionsTests var destinationPosY = 1; var isRotated = true; - container.FillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated); + container.TryFillContainerMapWithItem(destinationPosX, destinationPosY, itemWidth, itemHeight, isRotated, out _); Assert.AreEqual(container[1, 0], 1); Assert.AreEqual(container[1, 1], 1);