From 351c5185827b65daa1c5cad6e7d3e1c498ba4ef5 Mon Sep 17 00:00:00 2001 From: SplinterGP Date: Wed, 23 Feb 2022 21:00:39 -0300 Subject: [PATCH] Makes repairable component able to heal a set amount of damage (#6852) --- Content.Server/Repairable/RepairableComponent.cs | 11 +++++++++++ Content.Server/Repairable/RepairableSystem.cs | 15 ++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Content.Server/Repairable/RepairableComponent.cs b/Content.Server/Repairable/RepairableComponent.cs index d47fa64155..7fffe47f63 100644 --- a/Content.Server/Repairable/RepairableComponent.cs +++ b/Content.Server/Repairable/RepairableComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Damage; using Content.Shared.Tools; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; @@ -9,6 +10,16 @@ namespace Content.Server.Repairable [RegisterComponent] public sealed class RepairableComponent : Component { + /// + /// All the damage to change information is stored in this . + /// + /// + /// If this data-field is specified, it will change damage by this amount instead of setting all damage to 0. + /// in order to heal/repair the damage values have to be negative. + /// + [ViewVariables(VVAccess.ReadWrite)] [DataField("damage")] + public DamageSpecifier? Damage; + [ViewVariables(VVAccess.ReadWrite)] [DataField("fuelCost")] public int FuelCost = 5; diff --git a/Content.Server/Repairable/RepairableSystem.cs b/Content.Server/Repairable/RepairableSystem.cs index eded66f5da..bb627487ff 100644 --- a/Content.Server/Repairable/RepairableSystem.cs +++ b/Content.Server/Repairable/RepairableSystem.cs @@ -34,9 +34,18 @@ namespace Content.Server.Repairable if (!await _toolSystem.UseTool(args.Used, args.User, uid, component.FuelCost, component.DoAfterDelay, component.QualityNeeded)) return; - // Repair all damage - _damageableSystem.SetAllDamage(damageable, 0); - _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired ${ToPrettyString(uid):target} back to full health"); + if (component.Damage != null) + { + var damageChanged = _damageableSystem.TryChangeDamage(uid, component.Damage, true, false); + _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} by {damageChanged?.Total}"); + } + else + { + // Repair all damage + _damageableSystem.SetAllDamage(damageable, 0); + _logSystem.Add(LogType.Healed, $"{ToPrettyString(args.User):user} repaired {ToPrettyString(uid):target} back to full health"); + } + component.Owner.PopupMessage(args.User, Loc.GetString("comp-repairable-repair",