]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix drinking and eating with a mask on (#15468)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Mon, 17 Apr 2023 07:56:42 +0000 (19:56 +1200)
committerGitHub <noreply@github.com>
Mon, 17 Apr 2023 07:56:42 +0000 (17:56 +1000)
Content.Server/Nutrition/EntitySystems/DrinkSystem.cs
Content.Server/Nutrition/EntitySystems/FoodSystem.cs

index fc7f78a71dd652f70a9e7d48f0c41c142da71a7f..e4ce6784af0d8951447a60bf0844a5daedcb488e 100644 (file)
@@ -297,12 +297,20 @@ namespace Content.Server.Nutrition.EntitySystems
             if (args.Handled || args.Cancelled || component.Deleted)
                 return;
 
-            if (!TryComp<BodyComponent>(args.Args.Target, out var body))
+            if (!TryComp<BodyComponent>(args.Target, out var body))
                 return;
 
             if (!_solutionContainerSystem.TryGetSolution(args.Used, args.Solution, out var solution))
                 return;
 
+            // TODO this should really be checked every tick.
+            if (_foodSystem.IsMouthBlocked(args.Target.Value))
+                return;
+
+            // TODO this should really be checked every tick.
+            if (!_interactionSystem.InRangeUnobstructed(args.User, args.Target.Value))
+                return;
+
             var transferAmount = FixedPoint2.Min(component.TransferAmount, solution.Volume);
             var drained = _solutionContainerSystem.Drain(uid, solution, transferAmount);
             var forceDrink = args.User != args.Target;
@@ -311,17 +319,17 @@ namespace Content.Server.Nutrition.EntitySystems
             if (transferAmount <= 0)
                 return;
 
-            if (!_bodySystem.TryGetBodyOrganComponents<StomachComponent>(args.Args.Target.Value, out var stomachs, body))
+            if (!_bodySystem.TryGetBodyOrganComponents<StomachComponent>(args.Target.Value, out var stomachs, body))
             {
-                _popupSystem.PopupEntity(forceDrink ? Loc.GetString("drink-component-try-use-drink-cannot-drink-other") : Loc.GetString("drink-component-try-use-drink-had-enough"), args.Args.Target.Value, args.Args.User);
+                _popupSystem.PopupEntity(forceDrink ? Loc.GetString("drink-component-try-use-drink-cannot-drink-other") : Loc.GetString("drink-component-try-use-drink-had-enough"), args.Target.Value, args.User);
 
-                if (HasComp<RefillableSolutionComponent>(args.Args.Target.Value))
+                if (HasComp<RefillableSolutionComponent>(args.Target.Value))
                 {
-                    _puddleSystem.TrySpillAt(args.Args.User, drained, out _);
+                    _puddleSystem.TrySpillAt(args.User, drained, out _);
                     return;
                 }
 
-                _solutionContainerSystem.Refill(args.Args.Target.Value, solution, drained);
+                _solutionContainerSystem.Refill(args.Target.Value, solution, drained);
                 return;
             }
 
@@ -330,12 +338,12 @@ namespace Content.Server.Nutrition.EntitySystems
             //All stomachs are full or can't handle whatever solution we have.
             if (firstStomach == null)
             {
-                _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-had-enough"), args.Args.Target.Value, args.Args.Target.Value);
+                _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-had-enough"), args.Target.Value, args.Target.Value);
 
                 if (forceDrink)
                 {
-                    _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-had-enough-other"), args.Args.Target.Value, args.Args.User);
-                    _puddleSystem.TrySpillAt(args.Args.Target.Value, drained, out _);
+                    _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-had-enough-other"), args.Target.Value, args.User);
+                    _puddleSystem.TrySpillAt(args.Target.Value, drained, out _);
                 }
                 else
                     _solutionContainerSystem.TryAddSolution(uid, solution, drained);
@@ -347,38 +355,38 @@ namespace Content.Server.Nutrition.EntitySystems
 
             if (forceDrink)
             {
-                var targetName = Identity.Entity(args.Args.Target.Value, EntityManager);
-                var userName = Identity.Entity(args.Args.User, EntityManager);
+                var targetName = Identity.Entity(args.Target.Value, EntityManager);
+                var userName = Identity.Entity(args.User, EntityManager);
 
-                _popupSystem.PopupEntity(Loc.GetString("drink-component-force-feed-success", ("user", userName), ("flavors", flavors)), args.Args.Target.Value, args.Args.Target.Value);
+                _popupSystem.PopupEntity(Loc.GetString("drink-component-force-feed-success", ("user", userName), ("flavors", flavors)), args.Target.Value, args.Target.Value);
 
                 _popupSystem.PopupEntity(
                     Loc.GetString("drink-component-force-feed-success-user", ("target", targetName)),
-                    args.Args.User, args.Args.User);
+                    args.User, args.User);
 
                 // log successful forced drinking
-                _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(uid):user} forced {ToPrettyString(args.Args.User):target} to drink {ToPrettyString(component.Owner):drink}");
+                _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(uid):user} forced {ToPrettyString(args.User):target} to drink {ToPrettyString(component.Owner):drink}");
             }
             else
             {
                 _popupSystem.PopupEntity(
-                    Loc.GetString("drink-component-try-use-drink-success-slurp-taste", ("flavors", flavors)), args.Args.User,
-                    args.Args.User);
+                    Loc.GetString("drink-component-try-use-drink-success-slurp-taste", ("flavors", flavors)), args.User,
+                    args.User);
                 _popupSystem.PopupEntity(
-                    Loc.GetString("drink-component-try-use-drink-success-slurp"), args.Args.User, Filter.PvsExcept(args.Args.User), true);
+                    Loc.GetString("drink-component-try-use-drink-success-slurp"), args.User, Filter.PvsExcept(args.User), true);
 
                 // log successful voluntary drinking
-                _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.Args.User):target} drank {ToPrettyString(uid):drink}");
+                _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} drank {ToPrettyString(uid):drink}");
             }
 
-            _audio.PlayPvs(_audio.GetSound(component.UseSound), args.Args.Target.Value, AudioParams.Default.WithVolume(-2f));
+            _audio.PlayPvs(_audio.GetSound(component.UseSound), args.Target.Value, AudioParams.Default.WithVolume(-2f));
 
-            _reaction.DoEntityReaction(args.Args.Target.Value, solution, ReactionMethod.Ingestion);
+            _reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion);
             //TODO: Grab the stomach UIDs somehow without using Owner
             _stomachSystem.TryTransferSolution(firstStomach.Value.Comp.Owner, drained, firstStomach.Value.Comp);
 
             var comp = EnsureComp<ForensicsComponent>(uid);
-            if (TryComp<DnaComponent>(args.Args.Target, out var dna))
+            if (TryComp<DnaComponent>(args.Target, out var dna))
                 comp.DNAs.Add(dna.DNA);
 
             if (!forceDrink && solution.Volume > 0)
index 7874f35dce92ce428fefa5565f023401308bb42a..7975f8898cf27463e03f8aa106f11229236d696d 100644 (file)
@@ -156,13 +156,13 @@ namespace Content.Server.Nutrition.EntitySystems
 
         private void OnDoAfter(EntityUid uid, FoodComponent component, ConsumeDoAfterEvent args)
         {
-            if (args.Cancelled || args.Handled || component.Deleted || args.Args.Target == null)
+            if (args.Cancelled || args.Handled || component.Deleted || args.Target == null)
                 return;
 
-            if (!TryComp<BodyComponent>(args.Args.Target.Value, out var body))
+            if (!TryComp<BodyComponent>(args.Target.Value, out var body))
                 return;
 
-            if (!_bodySystem.TryGetBodyOrganComponents<StomachComponent>(args.Args.Target.Value, out var stomachs, body))
+            if (!_bodySystem.TryGetBodyOrganComponents<StomachComponent>(args.Target.Value, out var stomachs, body))
                 return;
 
             if (!_solutionContainerSystem.TryGetSolution(args.Used, args.Solution, out var solution))
@@ -171,6 +171,14 @@ namespace Content.Server.Nutrition.EntitySystems
             if (!TryGetRequiredUtensils(args.User, component, out var utensils))
                 return;
 
+            // TODO this should really be checked every tick.
+            if (IsMouthBlocked(args.Target.Value))
+                return;
+
+            // TODO this should really be checked every tick.
+            if (!_interactionSystem.InRangeUnobstructed(args.User, args.Target.Value))
+                return;
+            
             var forceFeed = args.User != args.Target;
 
             args.Handled = true;
@@ -184,41 +192,41 @@ namespace Content.Server.Nutrition.EntitySystems
             if (firstStomach == null)
             {
                 _solutionContainerSystem.TryAddSolution(uid, solution, split);
-                _popupSystem.PopupEntity(forceFeed ? Loc.GetString("food-system-you-cannot-eat-any-more-other") : Loc.GetString("food-system-you-cannot-eat-any-more"), args.Args.Target.Value, args.Args.User);
+                _popupSystem.PopupEntity(forceFeed ? Loc.GetString("food-system-you-cannot-eat-any-more-other") : Loc.GetString("food-system-you-cannot-eat-any-more"), args.Target.Value, args.User);
                 return;
             }
 
-            _reaction.DoEntityReaction(args.Args.Target.Value, solution, ReactionMethod.Ingestion);
+            _reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion);
             _stomachSystem.TryTransferSolution(firstStomach.Value.Comp.Owner, split, firstStomach.Value.Comp);
 
             var flavors = args.FlavorMessage;
 
             if (forceFeed)
             {
-                var targetName = Identity.Entity(args.Args.Target.Value, EntityManager);
-                var userName = Identity.Entity(args.Args.User, EntityManager);
+                var targetName = Identity.Entity(args.Target.Value, EntityManager);
+                var userName = Identity.Entity(args.User, EntityManager);
                 _popupSystem.PopupEntity(Loc.GetString("food-system-force-feed-success", ("user", userName), ("flavors", flavors)),
                     uid, uid);
 
-                _popupSystem.PopupEntity(Loc.GetString("food-system-force-feed-success-user", ("target", targetName)), args.Args.User, args.Args.User);
+                _popupSystem.PopupEntity(Loc.GetString("food-system-force-feed-success-user", ("target", targetName)), args.User, args.User);
 
                 // log successful force feed
-                _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(uid):user} forced {ToPrettyString(args.Args.User):target} to eat {ToPrettyString(uid):food}");
+                _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(uid):user} forced {ToPrettyString(args.User):target} to eat {ToPrettyString(uid):food}");
             }
             else
             {
-                _popupSystem.PopupEntity(Loc.GetString(component.EatMessage, ("food", uid), ("flavors", flavors)), args.Args.User, args.Args.User);
+                _popupSystem.PopupEntity(Loc.GetString(component.EatMessage, ("food", uid), ("flavors", flavors)), args.User, args.User);
 
                 // log successful voluntary eating
-                _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.Args.User):target} ate {ToPrettyString(uid):food}");
+                _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(uid):food}");
             }
 
-            _audio.Play(component.UseSound, Filter.Pvs(args.Args.Target.Value), args.Args.Target.Value, true, AudioParams.Default.WithVolume(-1f));
+            _audio.Play(component.UseSound, Filter.Pvs(args.Target.Value), args.Target.Value, true, AudioParams.Default.WithVolume(-1f));
 
             // Try to break all used utensils
             foreach (var utensil in utensils)
             {
-                _utensilSystem.TryBreak(utensil, args.Args.User);
+                _utensilSystem.TryBreak(utensil, args.User);
             }
 
             if (component.UsesRemaining > 0)
@@ -233,7 +241,7 @@ namespace Content.Server.Nutrition.EntitySystems
                 EntityManager.QueueDeleteEntity(uid);
 
             else
-                DeleteAndSpawnTrash(component, uid, args.Args.User);
+                DeleteAndSpawnTrash(component, uid, args.User);
         }
 
         private void DeleteAndSpawnTrash(FoodComponent component, EntityUid food, EntityUid? user = null)