]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix handheld grinder and reaction mixer audio stacking (#42498)
authorScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Tue, 20 Jan 2026 21:11:40 +0000 (22:11 +0100)
committerGitHub <noreply@github.com>
Tue, 20 Jan 2026 21:11:40 +0000 (21:11 +0000)
* yeah

AAAAAAAAAAAAAAAAAAAAAAA

---------

Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
Content.Shared/Chemistry/Reaction/ReactionMixerSystem.cs
Content.Shared/Kitchen/Components/EntitySystems/HandheldGrinderSystem.cs

index 030c8b890cc3ed5846f760f2a8d880f6ae0f9373..bd5b481517ffc62f3c30bbe44f0237fce4a5e621 100644 (file)
@@ -42,9 +42,6 @@ public sealed partial class ReactionMixerSystem : EntitySystem
         if (!CanMix(ent.AsNullable(), ent))
             return;
 
-        if (_net.IsServer) // Cannot cancel predicted audio.
-            ent.Comp.AudioStream = _audio.PlayPvs(ent.Comp.MixingSound, ent)?.Entity;
-
         var doAfterArgs = new DoAfterArgs(EntityManager,
             args.User,
             ent.Comp.TimeToMix,
@@ -60,7 +57,8 @@ public sealed partial class ReactionMixerSystem : EntitySystem
             BreakOnMove = true
         };
 
-        _doAfter.TryStartDoAfter(doAfterArgs);
+        if (_doAfter.TryStartDoAfter(doAfterArgs))
+            ent.Comp.AudioStream = _audio.PlayPredicted(ent.Comp.MixingSound, ent, args.User)?.Entity ?? ent.Comp.AudioStream;
     }
 
     private void OnAfterInteract(Entity<ReactionMixerComponent> ent, ref AfterInteractEvent args)
@@ -71,12 +69,11 @@ public sealed partial class ReactionMixerSystem : EntitySystem
         if (!CanMix(ent.AsNullable(), args.Target.Value))
             return;
 
-        if (_net.IsServer) // Cannot cancel predicted audio.
-            ent.Comp.AudioStream = _audio.PlayPvs(ent.Comp.MixingSound, ent)?.Entity;
-
         var doAfterArgs = new DoAfterArgs(EntityManager, args.User, ent.Comp.TimeToMix, new ReactionMixDoAfterEvent(), ent, args.Target.Value, ent);
 
-        _doAfter.TryStartDoAfter(doAfterArgs);
+        if (_doAfter.TryStartDoAfter(doAfterArgs))
+            ent.Comp.AudioStream = _audio.PlayPredicted(ent.Comp.MixingSound, ent, args.User)?.Entity ?? ent.Comp.AudioStream;
+
         args.Handled = true;
     }
 
index 30e61c8501624af001fd1a06119924fe84ef3578..26130d6d30cdc71990add3f2b256aa0813084607 100644 (file)
@@ -67,9 +67,6 @@ internal sealed class HandheldGrinderSystem : EntitySystem
         if (!_solution.ResolveSolution(ent.Owner, ent.Comp.SolutionName, ref ent.Comp.GrinderSolution))
             return;
 
-        if (_net.IsServer) // Cannot cancel predicted audio.
-            ent.Comp.AudioStream = _audio.PlayPvs(ent.Comp.Sound, ent)?.Entity;
-
         var doAfter = new DoAfterArgs(EntityManager, args.User, ent.Comp.DoAfterDuration, new HandheldGrinderDoAfterEvent(), ent, ent, item)
         {
             NeedHand = true,
@@ -79,7 +76,8 @@ internal sealed class HandheldGrinderSystem : EntitySystem
             BreakOnMove = true
         };
 
-        _doAfter.TryStartDoAfter(doAfter);
+        if (_doAfter.TryStartDoAfter(doAfter))
+            ent.Comp.AudioStream = _audio.PlayPredicted(ent.Comp.Sound, ent, args.User)?.Entity ?? ent.Comp.AudioStream;
     }
 
     private void OnHandheldDoAfter(Entity<HandheldGrinderComponent> ent, ref HandheldGrinderDoAfterEvent args)