]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix storage fill giving no reason for failing (#27122)
authorDrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com>
Fri, 19 Apr 2024 03:24:13 +0000 (20:24 -0700)
committerGitHub <noreply@github.com>
Fri, 19 Apr 2024 03:24:13 +0000 (23:24 -0400)
Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs
Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs

index 10278cc8051d53f650fa093c9405ee4ab461900e..768491f9876b764825ce0318367575eb7eb7f799 100644 (file)
@@ -65,12 +65,23 @@ public sealed partial class StorageSystem
         var sortedItems = items
             .OrderByDescending(x => ItemSystem.GetItemShape(x.Comp).GetArea());
 
+        ClearCantFillReasons();
         foreach (var ent in sortedItems)
         {
             if (Insert(uid, ent, out _, out var reason, storageComp: storage, playSound: false))
                 continue;
 
+            if (CantFillReasons.Count > 0)
+            {
+                var reasons = string.Join(", ", CantFillReasons.Select(s => Loc.GetString(s)));
+                if (reason == null)
+                    reason = reasons;
+                else
+                    reason += $", {reasons}";
+            }
+
             Log.Error($"Tried to StorageFill {ToPrettyString(ent)} inside {ToPrettyString(uid)} but can't. reason: {reason}");
+            ClearCantFillReasons();
             Del(ent);
         }
     }
index 9d364dded01ebd0c13d5533bffab807bdb5c6373..194ea985fb89bf4ac1a6781a1c26cdf84b57b0c1 100644 (file)
@@ -3,7 +3,6 @@ using System.Diagnostics.CodeAnalysis;
 using System.Linq;
 using Content.Shared.ActionBlocker;
 using Content.Shared.Containers.ItemSlots;
-using Content.Shared.Coordinates;
 using Content.Shared.Destructible;
 using Content.Shared.DoAfter;
 using Content.Shared.Hands.Components;
@@ -65,6 +64,8 @@ public abstract class SharedStorageSystem : EntitySystem
     private readonly List<ItemSizePrototype> _sortedSizes = new();
     private FrozenDictionary<string, ItemSizePrototype> _nextSmallest = FrozenDictionary<string, ItemSizePrototype>.Empty;
 
+    protected readonly List<string> CantFillReasons = [];
+
     /// <inheritdoc />
     public override void Initialize()
     {
@@ -628,8 +629,15 @@ public abstract class SharedStorageSystem : EntitySystem
         if (CheckingCanInsert)
             return;
 
-        if (!CanInsert(uid, args.EntityUid, out _, component, ignoreStacks: true))
+        if (!CanInsert(uid, args.EntityUid, out var reason, component, ignoreStacks: true))
+        {
+#if DEBUG
+            if (reason != null)
+                CantFillReasons.Add(reason);
+#endif
+
             args.Cancel();
+        }
     }
 
     public void UpdateAppearance(Entity<StorageComponent?, AppearanceComponent?> entity)
@@ -1072,7 +1080,7 @@ public abstract class SharedStorageSystem : EntitySystem
             for (int i = 0; i < list.Count; i++)
             {
                 var saved = list[i];
-                
+
                 if (saved == location)
                 {
                     list.Remove(location);
@@ -1259,6 +1267,13 @@ public abstract class SharedStorageSystem : EntitySystem
         }
     }
 
+    protected void ClearCantFillReasons()
+    {
+#if DEBUG
+        CantFillReasons.Clear();
+#endif
+    }
+
     /// <summary>
     /// Plays a clientside pickup animation for the specified uid.
     /// </summary>