From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Mon, 6 Nov 2023 04:08:33 +0000 (+0000) Subject: ninja stun change (#20503) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=38904904d0d06538d0ab3e76a0cafb84436b002b;p=space-station-14.git ninja stun change (#20503) * tagless fields * add damage and paralyze instead of electrocuting * add disable bool to RevealNinja * raise MeleeAttackEvent on the user after swinging * uncloak ninja after attacking * revert RevealNinja bool * revert meleeattack event * revert uncloak * validate shock prototype * damagespecifier no validation * ; * :trollface: --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- diff --git a/Content.Server/Ninja/Systems/StunProviderSystem.cs b/Content.Server/Ninja/Systems/StunProviderSystem.cs index 70182e0e36..097058f4d3 100644 --- a/Content.Server/Ninja/Systems/StunProviderSystem.cs +++ b/Content.Server/Ninja/Systems/StunProviderSystem.cs @@ -1,12 +1,15 @@ using Content.Server.Ninja.Events; using Content.Server.Power.EntitySystems; -using Content.Shared.Electrocution; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; using Content.Shared.Interaction; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; using Content.Shared.Popups; +using Content.Shared.Stunnable; using Content.Shared.Whitelist; using Robust.Shared.Audio; +using Robust.Shared.Prototypes; using Robust.Shared.Timing; namespace Content.Server.Ninja.Systems; @@ -17,11 +20,13 @@ namespace Content.Server.Ninja.Systems; public sealed class StunProviderSystem : SharedStunProviderSystem { [Dependency] private readonly BatterySystem _battery = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedElectrocutionSystem _electrocution = default!; [Dependency] private readonly SharedNinjaGlovesSystem _gloves = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; public override void Initialize() { @@ -55,8 +60,9 @@ public sealed class StunProviderSystem : SharedStunProviderSystem _audio.PlayPvs(comp.Sound, target); - // not holding hands with target so insuls don't matter - _electrocution.TryDoElectrocution(target, uid, comp.StunDamage, comp.StunTime, false, ignoreInsulation: true); + _damageable.TryChangeDamage(target, comp.StunDamage, false, true, null, origin: uid); + _stun.TryParalyze(target, comp.StunTime, refresh: false); + // short cooldown to prevent instant stunlocking comp.NextStun = _timing.CurTime + comp.Cooldown; diff --git a/Content.Shared/Ninja/Components/StunProviderComponent.cs b/Content.Shared/Ninja/Components/StunProviderComponent.cs index e8eb25a1b6..37a27074a4 100644 --- a/Content.Shared/Ninja/Components/StunProviderComponent.cs +++ b/Content.Shared/Ninja/Components/StunProviderComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Damage; using Content.Shared.Ninja.Systems; using Content.Shared.Whitelist; using Robust.Shared.Audio; @@ -17,49 +18,55 @@ public sealed partial class StunProviderComponent : Component /// The powercell entity to take power from. /// Determines whether stunning is possible. /// - [DataField("batteryUid"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public EntityUid? BatteryUid; /// /// Sound played when stunning someone. /// - [DataField("sound"), ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier Sound = new SoundCollectionSpecifier("sparks"); /// /// Joules required in the battery to stun someone. Defaults to 10 uses on a small battery. /// - [DataField("stunCharge"), ViewVariables(VVAccess.ReadWrite)] - public float StunCharge = 36.0f; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float StunCharge = 36f; /// - /// Shock damage dealt when stunning someone + /// Damage dealt when stunning someone /// - [DataField("stunDamage"), ViewVariables(VVAccess.ReadWrite)] - public int StunDamage = 5; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public DamageSpecifier StunDamage = new() + { + DamageDict = new() + { + { "Shock", 5 } + } + }; /// /// Time that someone is stunned for, stacks if done multiple times. /// - [DataField("stunTime"), ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public TimeSpan StunTime = TimeSpan.FromSeconds(5); /// /// How long stunning is disabled after stunning something. /// - [DataField("cooldown"), ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public TimeSpan Cooldown = TimeSpan.FromSeconds(2); /// /// Locale string to popup when there is no power /// - [DataField("noPowerPopup", required: true), ViewVariables(VVAccess.ReadWrite)] + [DataField(required: true), ViewVariables(VVAccess.ReadWrite)] public string NoPowerPopup = string.Empty; /// /// Whitelist for what counts as a mob. /// - [DataField("whitelist")] + [DataField] public EntityWhitelist Whitelist = new() { Components = new[] {"Stamina"} @@ -69,6 +76,6 @@ public sealed partial class StunProviderComponent : Component /// When someone can next be stunned. /// Essentially a UseDelay unique to this component. /// - [DataField("nextStun", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] public TimeSpan NextStun = TimeSpan.Zero; } diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index ddecf376e7..8fcc62dcb0 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -213,8 +213,6 @@ stripTimeReduction: 1 stealthy: true - type: NinjaGloves - # not actually electrified, just used to make stun ability work - - type: Electrified - type: entity parent: ClothingHandsGlovesColorBlack