diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index 19f6ff0b5e..e3812465c4 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Administration.Logs; using Content.Server.Damage.Components; using Content.Server.Weapons.Ranged.Systems; using Content.Shared._CP14.MeleeWeapon.Components; +using Content.Shared._CP14.MeleeWeapon.EntitySystems; using Content.Shared.CombatMode.Pacification; using Content.Shared.Camera; using Content.Shared.Damage; @@ -44,6 +45,7 @@ namespace Content.Server.Damage.Systems if (TryComp(uid, out var sharp)) { + CP14SharpeningSystem.ReduceSharpness((uid, sharp), damage); damage.DamageDict["Slash"] = slashDamage * sharp.Sharpness; damage.DamageDict["Piercing"] = piercingDamage * sharp.Sharpness; damage.DamageDict["Blunt"] = (slashDamage + piercingDamage) / 2 * (1f - sharp.Sharpness); diff --git a/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs b/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs index 29f896e615..f0bf8a7d4a 100644 --- a/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs +++ b/Content.Shared/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs @@ -12,6 +12,15 @@ public sealed partial class CP14SharpenedComponent : Component [DataField, AutoNetworkedField] public float Sharpness = 1f; + [DataField] + public Dictionary SharpnessExamineThresholds { get; private set; } = new() + { + { 0.95f, "sharpening-examined-95" }, + { 0.75f, "sharpening-examined-75" }, + { 0.5f, "sharpening-examined-50" }, + { 0, "sharpening-examined-25" }, + }; + [DataField] public float SharpnessDamageBy1Damage = 0.001f; //1000 damage } diff --git a/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs b/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs index e5d58aeca3..7ef9117dcd 100644 --- a/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs +++ b/Content.Shared/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs @@ -25,7 +25,8 @@ public sealed class CP14SharpeningSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnGetMeleeDamage, after: new[] { typeof(SharedWieldableSystem) }); + SubscribeLocalEvent(OnGetMeleeDamage, + after: [typeof(SharedWieldableSystem)]); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnMeleeHit); @@ -33,12 +34,18 @@ public sealed class CP14SharpeningSystem : EntitySystem SubscribeLocalEvent(OnInteract); } - private void OnMeleeHit(Entity sharpened, ref MeleeHitEvent args) + public static void ReduceSharpness(Entity ent, DamageSpecifier dmg) + { + ent.Comp.Sharpness = + MathHelper.Clamp(ent.Comp.Sharpness - dmg.GetTotal().Float() * ent.Comp.SharpnessDamageBy1Damage, 0.1f, 1f); + } + + private static void OnMeleeHit(Entity sharpened, ref MeleeHitEvent args) { if (!args.HitEntities.Any()) return; - sharpened.Comp.Sharpness = MathHelper.Clamp(sharpened.Comp.Sharpness - args.BaseDamage.GetTotal().Float() * sharpened.Comp.SharpnessDamageBy1Damage, 0.1f, 1f); + ReduceSharpness(sharpened, args.BaseDamage); } private void OnInteract(Entity stone, ref ActivateInWorldEvent args) @@ -73,9 +80,12 @@ public sealed class CP14SharpeningSystem : EntitySystem SharpThing(stone, args.Target.Value, sharpened, args.User); } - private void SharpThing(Entity stone, EntityUid target, CP14SharpenedComponent component, EntityUid user) + private void SharpThing(Entity stone, + EntityUid target, + CP14SharpenedComponent component, + EntityUid user) { - var ev = new SharpingEvent() + var ev = new SharpingEvent { User = user, Target = target, @@ -104,28 +114,16 @@ public sealed class CP14SharpeningSystem : EntitySystem private void OnExamined(Entity sharpened, ref ExaminedEvent args) { - - if (sharpened.Comp.Sharpness > 0.95f) + foreach (var (threshold, locString) in sharpened.Comp.SharpnessExamineThresholds.OrderByDescending(x => x.Key)) { - args.PushMarkup(Loc.GetString("sharpening-examined-95")); + if (!(sharpened.Comp.Sharpness > threshold) && threshold != 0) + continue; + args.PushMarkup(Loc.GetString(locString)); return; } - - if (sharpened.Comp.Sharpness > 0.75f) - { - args.PushMarkup(Loc.GetString("sharpening-examined-75")); - return; - } - - if (sharpened.Comp.Sharpness > 0.5f) - { - args.PushMarkup(Loc.GetString("sharpening-examined-50")); - return; - } - args.PushMarkup(Loc.GetString("sharpening-examined-25")); } - private void OnGetMeleeDamage(Entity sharpened, ref GetMeleeDamageEvent args) + private static void OnGetMeleeDamage(Entity sharpened, ref GetMeleeDamageEvent args) { var slashDamage = args.Damage.DamageDict.GetValueOrDefault("Slash"); var piercingDamage = args.Damage.DamageDict.GetValueOrDefault("Piercing"); @@ -134,7 +132,6 @@ public sealed class CP14SharpeningSystem : EntitySystem args.Damage.DamageDict["Piercing"] = piercingDamage * sharpened.Comp.Sharpness; args.Damage.DamageDict["Blunt"] = (slashDamage + piercingDamage) / 2 * (1f - sharpened.Comp.Sharpness); } - } ///