diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs index 8edb2d7ba5..41c7a04dc2 100644 --- a/Content.Server/Projectiles/ProjectileSystem.cs +++ b/Content.Server/Projectiles/ProjectileSystem.cs @@ -43,12 +43,12 @@ public sealed class ProjectileSystem : SharedProjectileSystem return; } - var ev = new ProjectileHitEvent(target); + var ev = new ProjectileHitEvent(component.Damage, target, component.Shooter); RaiseLocalEvent(uid, ref ev); var otherName = ToPrettyString(target); var direction = args.OurBody.LinearVelocity.Normalized(); - var modifiedDamage = _damageableSystem.TryChangeDamage(target, component.Damage, component.IgnoreResistances, origin: component.Shooter); + var modifiedDamage = _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances, origin: component.Shooter); var deleted = Deleted(target); if (modifiedDamage is not null && EntityManager.EntityExists(component.Shooter)) diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 2e25d66586..51d6e89d0f 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -134,7 +134,7 @@ namespace Content.Shared.Damage return damage; } - var before = new BeforeDamageChangedEvent(damage); + var before = new BeforeDamageChangedEvent(damage, origin); RaiseLocalEvent(uid.Value, ref before); if (before.Cancelled) @@ -149,7 +149,7 @@ namespace Content.Shared.Damage damage = DamageSpecifier.ApplyModifierSet(damage, modifierSet); } - var ev = new DamageModifyEvent(damage); + var ev = new DamageModifyEvent(damage, origin); RaiseLocalEvent(uid.Value, ev); damage = ev.Damage; @@ -271,7 +271,7 @@ namespace Content.Shared.Damage /// Raised before damage is done, so stuff can cancel it if necessary. /// [ByRefEvent] - public record struct BeforeDamageChangedEvent(DamageSpecifier Delta, bool Cancelled=false); + public record struct BeforeDamageChangedEvent(DamageSpecifier Delta, EntityUid? Origin = null, bool Cancelled = false); /// /// Raised on an entity when damage is about to be dealt, @@ -287,11 +287,13 @@ namespace Content.Shared.Damage public readonly DamageSpecifier OriginalDamage; public DamageSpecifier Damage; + public EntityUid? Origin; - public DamageModifyEvent(DamageSpecifier damage) + public DamageModifyEvent(DamageSpecifier damage, EntityUid? origin = null) { OriginalDamage = damage; Damage = damage; + Origin = origin; } } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 020288ad86..f835a7f1c4 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Damage; using Content.Shared.DoAfter; using Content.Shared.Interaction; using Content.Shared.Projectiles; @@ -152,13 +153,13 @@ public sealed class ImpactEffectEvent : EntityEventArgs } /// -/// Raised when entity is just about to be hit with projectile but can reflect it +/// Raised when an entity is just about to be hit with a projectile but can reflect it /// [ByRefEvent] public record struct ProjectileReflectAttemptEvent(EntityUid ProjUid, ProjectileComponent Component, bool Cancelled); /// -/// Raised when projectile hits other entity +/// Raised when a projectile hits an entity /// [ByRefEvent] -public readonly record struct ProjectileHitEvent(EntityUid Target); +public record struct ProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, EntityUid? Shooter = null);