diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index ffb8cbadba..ea4887bad6 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -1,4 +1,5 @@ using Content.Server._CP14.MeleeWeapon; +using Content.Server._CP14.MeleeWeapon.Components; using Content.Server.Administration.Logs; using Content.Server.Damage.Components; using Content.Server.Weapons.Ranged.Systems; diff --git a/Content.Server/_CP14/MeleeWeapon/Components/CP14MeleeSelfDamageComponent.cs b/Content.Server/_CP14/MeleeWeapon/Components/CP14MeleeSelfDamageComponent.cs new file mode 100644 index 0000000000..f5f199f6f8 --- /dev/null +++ b/Content.Server/_CP14/MeleeWeapon/Components/CP14MeleeSelfDamageComponent.cs @@ -0,0 +1,10 @@ +using Content.Shared.Damage; + +namespace Content.Server._CP14.MeleeWeapon.Components; + +[RegisterComponent] +public sealed partial class CP14MeleeSelfDamageComponent : Component +{ + [DataField(required: true)] + public DamageSpecifier DamageToSelf; +} diff --git a/Content.Server/_CP14/MeleeWeapon/CP14SharpenedComponent.cs b/Content.Server/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs similarity index 75% rename from Content.Server/_CP14/MeleeWeapon/CP14SharpenedComponent.cs rename to Content.Server/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs index 09ec1f000d..abf9ce6311 100644 --- a/Content.Server/_CP14/MeleeWeapon/CP14SharpenedComponent.cs +++ b/Content.Server/_CP14/MeleeWeapon/Components/CP14SharpenedComponent.cs @@ -1,5 +1,7 @@ -namespace Content.Server._CP14.MeleeWeapon; +using Content.Server._CP14.MeleeWeapon.EntitySystems; + +namespace Content.Server._CP14.MeleeWeapon.Components; /// /// allows the object to become blunt with use diff --git a/Content.Server/_CP14/MeleeWeapon/CP14SharpeningStoneComponent.cs b/Content.Server/_CP14/MeleeWeapon/Components/CP14SharpeningStoneComponent.cs similarity index 89% rename from Content.Server/_CP14/MeleeWeapon/CP14SharpeningStoneComponent.cs rename to Content.Server/_CP14/MeleeWeapon/Components/CP14SharpeningStoneComponent.cs index 82de85302e..31a639bad6 100644 --- a/Content.Server/_CP14/MeleeWeapon/CP14SharpeningStoneComponent.cs +++ b/Content.Server/_CP14/MeleeWeapon/Components/CP14SharpeningStoneComponent.cs @@ -1,7 +1,8 @@ -using Content.Shared.Damage; +using Content.Server._CP14.MeleeWeapon.EntitySystems; +using Content.Shared.Damage; using Robust.Shared.Audio; -namespace Content.Server._CP14.MeleeWeapon; +namespace Content.Server._CP14.MeleeWeapon.Components; /// /// component allows you to sharpen objects by restoring their damage. diff --git a/Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14MeleeSelfDamageSystem.cs b/Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14MeleeSelfDamageSystem.cs new file mode 100644 index 0000000000..ef818729b0 --- /dev/null +++ b/Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14MeleeSelfDamageSystem.cs @@ -0,0 +1,24 @@ +using Content.Server._CP14.MeleeWeapon.Components; +using Content.Shared.Damage; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server._CP14.MeleeWeapon.EntitySystems; + +public sealed class CP14MeleeSelfDamageSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnMeleeHit); + } + + private void OnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (!args.IsHit) + return; + if (args.HitEntities.Count == 0) + return; + _damageable.TryChangeDamage(ent, ent.Comp.DamageToSelf); + } +} diff --git a/Content.Server/_CP14/MeleeWeapon/CP14SharpeningSystem.cs b/Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs similarity index 97% rename from Content.Server/_CP14/MeleeWeapon/CP14SharpeningSystem.cs rename to Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs index 8723b6bbb3..ca48977ddf 100644 --- a/Content.Server/_CP14/MeleeWeapon/CP14SharpeningSystem.cs +++ b/Content.Server/_CP14/MeleeWeapon/EntitySystems/CP14SharpeningSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Server._CP14.MeleeWeapon.Components; using Content.Shared.Damage; using Content.Shared.Examine; using Content.Shared.Interaction; @@ -8,7 +9,7 @@ using Content.Shared.Weapons.Melee.Events; using Content.Shared.Wieldable; using Robust.Shared.Audio.Systems; -namespace Content.Server._CP14.MeleeWeapon; +namespace Content.Server._CP14.MeleeWeapon.EntitySystems; public sealed class CP14SharpeningSystem : EntitySystem { diff --git a/Content.Server/_CP14/Skills/CP14SkillSystem.cs b/Content.Server/_CP14/Skills/CP14SkillSystem.cs index f07487cd60..bf2266848b 100644 --- a/Content.Server/_CP14/Skills/CP14SkillSystem.cs +++ b/Content.Server/_CP14/Skills/CP14SkillSystem.cs @@ -1,6 +1,7 @@ using System.Numerics; using Content.Server._CP14.Alchemy; using Content.Server._CP14.MeleeWeapon; +using Content.Server._CP14.MeleeWeapon.EntitySystems; using Content.Server.Popups; using Content.Shared._CP14.Skills; using Content.Shared._CP14.Skills.Components; diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml index e568f74a5c..a3c776ce12 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/base.yml @@ -21,7 +21,7 @@ - type: entity id: CP14BaseWeaponThrowable abstract: true - components: + components: - type: LandAtCursor - type: DamageOtherOnHit damage: @@ -56,7 +56,7 @@ - type: entity id: CP14BaseWeaponShort abstract: true - components: + components: - type: MeleeWeapon range: 1.0 # 1.5 standart cPAnimationOffset: -0.75 @@ -88,4 +88,13 @@ sound: collection: MetalBreak - !type:DoActsBehavior - acts: ["Destruction"] \ No newline at end of file + acts: ["Destruction"] + +- type: entity + id: CP14BaseWeaponSelfDamage + abstract: true + components: + - type: CP14MeleeSelfDamage + damageToSelf: + types: + Blunt: 0.5 # 100 hits diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/battleHammer.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/battleHammer.yml index 0c0b276a04..2ebfe1a26c 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/battleHammer.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/battleHammer.yml @@ -3,6 +3,7 @@ parent: - BaseItem - CP14BaseWeaponDestructible + - CP14BaseWeaponSelfDamage name: battle hammer description: A big heavy hammer! Bruh! #TODO components: @@ -55,4 +56,4 @@ path: /Audio/_CP14/Effects/thud.ogg params: variation: 0.03 - volume: 2 \ No newline at end of file + volume: 2 diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/lightHammer.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/lightHammer.yml index 1064d72174..f234652f3e 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/lightHammer.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/lightHammer.yml @@ -1,11 +1,12 @@ - type: entity id: CP14BaseLightHammer - parent: + parent: - BaseItem - CP14BaseWeaponDestructible - CP14BaseWeaponThrowable - CP14BaseWeaponLight - CP14BaseWeaponShort + - CP14BaseWeaponSelfDamage name: light hammer description: A small hammer. Good for carpentry work as well as for cracking skulls. components: @@ -40,4 +41,4 @@ collection: CP14Hammering params: variation: 0.03 - volume: 2 \ No newline at end of file + volume: 2 diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml index ec4402b706..268d0168c8 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/Melee/mace.yml @@ -1,9 +1,10 @@ - type: entity id: CP14BaseMace - parent: + parent: - BaseItem - CP14BaseWeaponDestructible - CP14BaseWeaponThrowable + - CP14BaseWeaponSelfDamage name: mace description: A heavy piece of metal on a long stick. What could be simpler than that? components: @@ -32,4 +33,4 @@ - type: DamageOnLand damage: types: - Blunt: 10 \ No newline at end of file + Blunt: 10