diff --git a/Content.Shared/Weapons/Melee/EntityEffectMeleeComponent.cs b/Content.Shared/Weapons/Melee/EntityEffectMeleeComponent.cs new file mode 100644 index 0000000000..c927bfaedd --- /dev/null +++ b/Content.Shared/Weapons/Melee/EntityEffectMeleeComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.EntityEffects; +using Robust.Shared.GameStates; + +namespace Content.Shared.Weapons.Melee; + +/// +/// Applies an entity effect on hit entities +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedMeleeWeaponSystem))] +public sealed partial class EntityEffectMeleeComponent : Component +{ + /// + /// List of entity effects to apply to hit entities. + /// + [DataField(required: true)] + public EntityEffect[] Effects; +} diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 24fe9c4570..946f32f1c0 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -1,3 +1,4 @@ +using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Numerics; @@ -11,6 +12,7 @@ using Content.Shared.Damage.Components; using Content.Shared.Damage.Events; using Content.Shared.Damage.Systems; using Content.Shared.Database; +using Content.Shared.EntityEffects; using Content.Shared.FixedPoint; using Content.Shared.Hands; using Content.Shared.Hands.Components; @@ -65,6 +67,7 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem [Dependency] protected SharedTransformSystem TransformSystem = default!; [Dependency] private SharedStaminaSystem _stamina = default!; [Dependency] private DamageExamineSystem _damageExamine = default!; + [Dependency] private SharedEntityEffectsSystem _effects = default!; [Dependency] private EntityQuery _damageQuery = default!; @@ -91,7 +94,6 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem SubscribeLocalEvent(OnGetBonusMeleeDamage); SubscribeLocalEvent(OnGetBonusHeavyDamageModifier); SubscribeLocalEvent(OnGetBonusMeleeAttackRate); - SubscribeLocalEvent(OnItemToggle); SubscribeAllEvent(OnHeavyAttack); @@ -110,6 +112,15 @@ public abstract partial class SharedMeleeWeaponSystem : EntitySystem #endif } + [SubscribeLocalEvent] + private void EntityEffectMeleeHit(Entity ent, ref MeleeHitEvent args) + { + foreach (var entity in args.HitEntities) + { + _effects.ApplyEffects(entity, ent.Comp.Effects, 1f, args.User); + } + } + private void OnMeleeShotAttempted(EntityUid uid, MeleeWeaponComponent comp, ref ShotAttemptedEvent args) { if (comp.NextAttack > Timing.CurTime) diff --git a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml index 557a36646f..20b07952b7 100644 --- a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml +++ b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml @@ -145,3 +145,29 @@ damage: types: Blunt: 200 + +- type: entity + name: unbang stick + parent: BaseItem + id: MeleeDebugUnbang + description: hit soft ye + suffix: DEBUG + components: + - type: Sprite + sprite: Objects/Weapons/Melee/debug.rsi + state: icon + - type: MeleeWeapon + damage: + types: + Blunt: 0 + - type: Item + size: Tiny + sprite: Objects/Weapons/Melee/debug.rsi + - type: EntityEffectMelee + effects: + - !type:EvenHealthChange + damage: + Burn: -200 + Toxin: -200 + Airloss: -200 + Brute: -200