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