From ee10581e88e6cec354b7c40997f9d45fde173e41 Mon Sep 17 00:00:00 2001 From: Rane <60792108+Elijahrane@users.noreply.github.com> Date: Sun, 9 Oct 2022 15:40:49 -0400 Subject: [PATCH] scale reagent damage when under metabolism rate (#11578) --- Content.Server/Body/Systems/MetabolizerSystem.cs | 2 +- Content.Server/Chemistry/ReagentEffects/HealthChange.cs | 2 ++ .../Chemistry/Reaction/SharedChemicalReactionSystem.cs | 2 +- Content.Shared/Chemistry/ReactiveSystem.cs | 2 +- Content.Shared/Chemistry/Reagent/ReagentEffect.cs | 3 ++- Content.Shared/Chemistry/Reagent/ReagentPrototype.cs | 2 +- 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Content.Server/Body/Systems/MetabolizerSystem.cs b/Content.Server/Body/Systems/MetabolizerSystem.cs index a438a4a549..6dc07dd7cb 100644 --- a/Content.Server/Body/Systems/MetabolizerSystem.cs +++ b/Content.Server/Body/Systems/MetabolizerSystem.cs @@ -172,7 +172,7 @@ namespace Content.Server.Body.Systems var actualEntity = bodyEntityUid != null ? bodyEntityUid.Value : solutionEntityUid.Value; var args = new ReagentEffectArgs(actualEntity, (meta).Owner, solution, proto, mostToRemove, - EntityManager, null); + EntityManager, null, entry); // do all effects, if conditions apply foreach (var effect in entry.Effects) diff --git a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs index 5421aff454..b18ecdefde 100644 --- a/Content.Server/Chemistry/ReagentEffects/HealthChange.cs +++ b/Content.Server/Chemistry/ReagentEffects/HealthChange.cs @@ -34,6 +34,8 @@ namespace Content.Server.Chemistry.ReagentEffects public override void Effect(ReagentEffectArgs args) { var scale = ScaleByQuantity ? args.Quantity : FixedPoint2.New(1); + if (args.MetabolismEffects != null) + scale *= (args.Quantity / args.MetabolismEffects.MetabolismRate); EntitySystem.Get().TryChangeDamage(args.SolutionEntity, Damage * scale, IgnoreResistances); } } diff --git a/Content.Shared/Chemistry/Reaction/SharedChemicalReactionSystem.cs b/Content.Shared/Chemistry/Reaction/SharedChemicalReactionSystem.cs index 691b65ebe7..c0c224ab36 100644 --- a/Content.Shared/Chemistry/Reaction/SharedChemicalReactionSystem.cs +++ b/Content.Shared/Chemistry/Reaction/SharedChemicalReactionSystem.cs @@ -192,7 +192,7 @@ namespace Content.Shared.Chemistry.Reaction { var args = new ReagentEffectArgs(owner, null, solution, randomReagent, - unitReactions, EntityManager, null); + unitReactions, EntityManager, null, null); foreach (var effect in reaction.Effects) { diff --git a/Content.Shared/Chemistry/ReactiveSystem.cs b/Content.Shared/Chemistry/ReactiveSystem.cs index 81c9078f3c..3232ed161b 100644 --- a/Content.Shared/Chemistry/ReactiveSystem.cs +++ b/Content.Shared/Chemistry/ReactiveSystem.cs @@ -47,7 +47,7 @@ namespace Content.Shared.Chemistry // If we have a source solution, use the reagent quantity we have left. Otherwise, use the reaction volume specified. var args = new ReagentEffectArgs(uid, null, source, reagent, - source?.GetReagentQuantity(reagent.ID) ?? reactVolume, EntityManager, method); + source?.GetReagentQuantity(reagent.ID) ?? reactVolume, EntityManager, method, null); // First, check if the reagent wants to apply any effects. if (reagent.ReactiveEffects != null && reactive.ReactiveGroups != null) diff --git a/Content.Shared/Chemistry/Reagent/ReagentEffect.cs b/Content.Shared/Chemistry/Reagent/ReagentEffect.cs index a04119be3f..9b2aa19c7b 100644 --- a/Content.Shared/Chemistry/Reagent/ReagentEffect.cs +++ b/Content.Shared/Chemistry/Reagent/ReagentEffect.cs @@ -82,6 +82,7 @@ namespace Content.Shared.Chemistry.Reagent ReagentPrototype Reagent, FixedPoint2 Quantity, IEntityManager EntityManager, - ReactionMethod? Method + ReactionMethod? Method, + ReagentEffectsEntry? MetabolismEffects ); } diff --git a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs index a22cf26a3a..fabb4e11eb 100644 --- a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs @@ -130,7 +130,7 @@ namespace Content.Shared.Chemistry.Reagent var entMan = IoCManager.Resolve(); var random = IoCManager.Resolve(); - var args = new ReagentEffectArgs(plantHolder.Value, null, solution, this, amount.Quantity, entMan, null); + var args = new ReagentEffectArgs(plantHolder.Value, null, solution, this, amount.Quantity, entMan, null, null); foreach (var plantMetabolizable in PlantMetabolisms) { if (!plantMetabolizable.ShouldApply(args, random))