From daa47ff0d16d824092f2a8c3f2195bae9010c585 Mon Sep 17 00:00:00 2001 From: Ilya Babunov Date: Thu, 25 May 2023 13:12:08 +0400 Subject: [PATCH] Fixed target container overflow (Infinite beaker fill from mop) (#16804) --- .run/Content Server+Client.run.xml | 2 +- .../Fluids/EntitySystems/AbsorbentSystem.cs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.run/Content Server+Client.run.xml b/.run/Content Server+Client.run.xml index 4ba50d81900..0ec9bf16a75 100644 --- a/.run/Content Server+Client.run.xml +++ b/.run/Content Server+Client.run.xml @@ -4,4 +4,4 @@ - \ No newline at end of file + diff --git a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs index 6ed8af59ec2..167b1954430 100644 --- a/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs +++ b/Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs @@ -25,6 +25,7 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!; + [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; public override void Initialize() { @@ -158,11 +159,18 @@ private bool TryTransferAbsorber(EntityUid user, EntityUid used, EntityUid targe return false; } - absorberSoln.AddReagent(PuddleSystem.EvaporationReagent, water); - refillableSolution.AddSolution(nonWater, _prototype); - _solutionSystem.UpdateChemicals(used, absorberSoln); - _solutionSystem.UpdateChemicals(target, refillableSolution); + if (water > 0 && !_solutionContainerSystem.TryAddReagent(used, absorberSoln, PuddleSystem.EvaporationReagent, water, + out _)) + { + _popups.PopupEntity(Loc.GetString("mopping-system-full", ("used", used)), used, user); + } + + if (nonWater.Volume > 0 && !_solutionContainerSystem.TryAddSolution(target, refillableSolution, nonWater)) + { + absorberSoln.AddSolution(nonWater, _prototype); + _popups.PopupEntity(Loc.GetString("mopping-system-full", ("used", target)), user, user); + } _audio.PlayPvs(component.TransferSound, target); _useDelay.BeginDelay(used); return true;