diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs
index d1612da8e5..e28183d4b3 100644
--- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs
+++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs
@@ -80,9 +80,18 @@ namespace Content.Server.GameObjects.Components.Disposal
[ViewVariables(VVAccess.ReadWrite)]
private TimeSpan _flushDelay;
+ ///
+ /// Delay from trying to enter disposals ourselves.
+ ///
[ViewVariables(VVAccess.ReadWrite)]
private float _entryDelay;
+ ///
+ /// Delay from trying to shove someone else into disposals.
+ ///
+ [ViewVariables(VVAccess.ReadWrite)]
+ private float _draggedEntryDelay;
+
///
/// Token used to cancel the automatic engage of a disposal unit
/// after an entity enters it.
@@ -192,11 +201,15 @@ namespace Content.Server.GameObjects.Components.Disposal
if (!CanInsert(entity))
return false;
- if (user != null && _entryDelay > 0f)
+ var delay = user == entity ? _entryDelay : _draggedEntryDelay;
+
+ if (user != null && delay > 0.0f)
{
var doAfterSystem = EntitySystem.Get();
- var doAfterArgs = new DoAfterEventArgs(user, _entryDelay, default, Owner)
+ // Can't check if our target AND disposals moves currently so we'll just check target.
+ // if you really want to check if disposals moves then add a predicate.
+ var doAfterArgs = new DoAfterEventArgs(user, delay, default, entity)
{
BreakOnDamage = true,
BreakOnStun = true,
@@ -209,7 +222,6 @@ namespace Content.Server.GameObjects.Components.Disposal
if (result == DoAfterStatus.Cancelled)
return false;
-
}
if (!_container.Insert(entity))
@@ -535,7 +547,8 @@ namespace Content.Server.GameObjects.Components.Disposal
() => (int) _flushDelay.TotalSeconds);
serializer.DataField(this, x => x.Air, "air", new GasMixture(Atmospherics.CellVolume));
- serializer.DataField(ref _entryDelay, "entryDelay", 0.5f);
+ serializer.DataField(ref _entryDelay, "entryDelay", 1.0f);
+ serializer.DataField(ref _draggedEntryDelay, "draggedEntryDelay", 3.0f);
}
public override void Initialize()