From 684cf3ce0975214ed0ed55422ea6ef0d2a3005e8 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 28 Jun 2023 12:04:39 +1000 Subject: [PATCH] Add leech to crusher (#17683) --- .../Weapons/Marker/LeechOnMarkerComponent.cs | 16 ++++++++++++++++ .../Weapons/Marker/SharedDamageMarkerSystem.cs | 6 ++++++ .../Entities/Objects/Weapons/Melee/mining.yml | 8 ++++++++ 3 files changed, 30 insertions(+) create mode 100644 Content.Shared/Weapons/Marker/LeechOnMarkerComponent.cs diff --git a/Content.Shared/Weapons/Marker/LeechOnMarkerComponent.cs b/Content.Shared/Weapons/Marker/LeechOnMarkerComponent.cs new file mode 100644 index 0000000000..aca15ce796 --- /dev/null +++ b/Content.Shared/Weapons/Marker/LeechOnMarkerComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; + +namespace Content.Shared.Weapons.Marker; + +/// +/// Applies leech upon hitting a damage marker target. +/// +[RegisterComponent, NetworkedComponent] +public sealed class LeechOnMarkerComponent : Component +{ + // TODO: Can't network damagespecifiers yet last I checked. + [ViewVariables(VVAccess.ReadWrite)] + [DataField("leech", required: true)] + public DamageSpecifier Leech = new(); +} diff --git a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs index 16e0a9a1d7..4c8ed2f8a7 100644 --- a/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs +++ b/Content.Shared/Weapons/Marker/SharedDamageMarkerSystem.cs @@ -12,6 +12,7 @@ public abstract class SharedDamageMarkerSystem : EntitySystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; public override void Initialize() { @@ -29,6 +30,11 @@ public abstract class SharedDamageMarkerSystem : EntitySystem args.BonusDamage += component.Damage; RemCompDeferred(uid); _audio.PlayPredicted(component.Sound, uid, args.User); + + if (TryComp(args.Used, out var leech)) + { + _damageable.TryChangeDamage(args.User, leech.Leech, true, false, origin: args.Used); + } } public override void Update(float frameTime) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index fa0e8b2010..68303d9152 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -30,6 +30,10 @@ - type: UseDelayOnShoot - type: UseDelay delay: 1.9 + - type: LeechOnMarker + leech: + groups: + Brute: -10 - type: Gun soundGunshot: /Audio/Weapons/plasma_cutter.ogg fireRate: 0.5 @@ -89,6 +93,10 @@ fireRate: 1 - type: RechargeBasicEntityAmmo rechargeCooldown: 0.5 + - type: LeechOnMarker + leech: + groups: + Brute: -15 - type: Sprite sprite: Objects/Weapons/Melee/crusher_glaive.rsi - type: MeleeWeapon