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