From ae65418c52c7a41fe742aeaba9e1b3b39ae286bd Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 5 Dec 2021 15:34:32 +1300 Subject: [PATCH] Remove radiation & explosion damage logs. Add better explosion-trigger logs (#5689) --- Content.Server/AME/AMENodeGroup.cs | 2 +- .../Administration/AdminVerbSystem.cs | 2 +- .../Components/ClusterFlashComponent.cs | 2 +- .../Components/OnUseTimerTriggerComponent.cs | 4 +- .../EntitySystems/ExplosionSystem.cs | 27 +++++++-- .../Explosion/EntitySystems/TriggerSystem.cs | 34 ++++++++--- Content.Shared.Database/LogType.cs | 2 +- .../Damage/Components/DamageableComponent.cs | 15 +---- .../Damage/Systems/DamageableSystem.cs | 57 +++---------------- 9 files changed, 62 insertions(+), 83 deletions(-) diff --git a/Content.Server/AME/AMENodeGroup.cs b/Content.Server/AME/AMENodeGroup.cs index b430b66a59..aedf0d33b5 100644 --- a/Content.Server/AME/AMENodeGroup.cs +++ b/Content.Server/AME/AMENodeGroup.cs @@ -177,7 +177,7 @@ namespace Content.Server.AME intensity = Math.Min(intensity, 8); - EntitySystem.Get().SpawnExplosion(epicenter.Owner.Uid, intensity / 2, intensity, intensity * 2, intensity * 3); + EntitySystem.Get().SpawnExplosion(epicenter.OwnerUid, intensity / 2, intensity, intensity * 2, intensity * 3); } } } diff --git a/Content.Server/Administration/AdminVerbSystem.cs b/Content.Server/Administration/AdminVerbSystem.cs index 1d3d16569c..9c2d6ad9e5 100644 --- a/Content.Server/Administration/AdminVerbSystem.cs +++ b/Content.Server/Administration/AdminVerbSystem.cs @@ -126,7 +126,7 @@ namespace Content.Server.Administration verb.Act = () => { var coords = args.Target.Transform.Coordinates; - Timer.Spawn(_gameTiming.TickPeriod, () => _explosions.SpawnExplosion(coords, 0, 1, 2, 1), CancellationToken.None); + Timer.Spawn(_gameTiming.TickPeriod, () => _explosions.SpawnExplosion(coords, 0, 1, 2, 1, args.TargetUid), CancellationToken.None); if (args.Target.TryGetComponent(out SharedBodyComponent? body)) { body.Gib(); diff --git a/Content.Server/Explosion/Components/ClusterFlashComponent.cs b/Content.Server/Explosion/Components/ClusterFlashComponent.cs index e458726def..7cd50c5e12 100644 --- a/Content.Server/Explosion/Components/ClusterFlashComponent.cs +++ b/Content.Server/Explosion/Components/ClusterFlashComponent.cs @@ -119,7 +119,7 @@ namespace Content.Server.Explosion.Components if (grenade.Deleted) return; - EntitySystem.Get().Trigger(grenade, eventArgs.User); + EntitySystem.Get().Trigger(grenade, eventArgs.User.Uid); }); } diff --git a/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs b/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs index 4268139833..ede6e6fbd2 100644 --- a/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs +++ b/Content.Server/Explosion/Components/OnUseTimerTriggerComponent.cs @@ -16,7 +16,7 @@ namespace Content.Server.Explosion.Components private float _delay = 0f; // TODO: Need to split this out so it's a generic "OnUseTimerTrigger" component. - public void Trigger(IEntity user) + public void Trigger(EntityUid user) { if (Owner.TryGetComponent(out AppearanceComponent? appearance)) appearance.SetData(TriggerVisuals.VisualState, TriggerVisualState.Primed); @@ -26,7 +26,7 @@ namespace Content.Server.Explosion.Components bool IUse.UseEntity(UseEntityEventArgs eventArgs) { - Trigger(eventArgs.User); + Trigger(eventArgs.User.Uid); return true; } } diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index 4192f10c48..d3f021ab44 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -294,6 +294,7 @@ namespace Content.Server.Explosion.EntitySystems int heavyImpactRange = 0, int lightImpactRange = 0, int flashRange = 0, + EntityUid? user = null, ExplosiveComponent? explosive = null, TransformComponent? transform = null) { @@ -306,7 +307,7 @@ namespace Content.Server.Explosion.EntitySystems if (explosive is { Exploding: false }) { - _triggers.Explode(entity, explosive); + _triggers.Explode(entity, explosive, user); } else { @@ -322,7 +323,7 @@ namespace Content.Server.Explosion.EntitySystems var epicenter = transform.Coordinates; - SpawnExplosion(epicenter, devastationRange, heavyImpactRange, lightImpactRange, flashRange); + SpawnExplosion(epicenter, devastationRange, heavyImpactRange, lightImpactRange, flashRange, entity, user); } } @@ -331,7 +332,9 @@ namespace Content.Server.Explosion.EntitySystems int devastationRange = 0, int heavyImpactRange = 0, int lightImpactRange = 0, - int flashRange = 0) + int flashRange = 0, + EntityUid? entity = null, + EntityUid? user = null) { var mapId = epicenter.GetMapId(EntityManager); if (mapId == MapId.Nullspace) @@ -339,8 +342,22 @@ namespace Content.Server.Explosion.EntitySystems return; } - _logSystem.Add(LogType.Damaged, LogImpact.High , - $"Spawned explosion at {epicenter} with range {devastationRange}/{heavyImpactRange}/{lightImpactRange}/{flashRange}"); + // logging + var text = $"{epicenter} with range {devastationRange}/{heavyImpactRange}/{lightImpactRange}/{flashRange}"; + if (entity == null) + { + _logSystem.Add(LogType.Explosion, LogImpact.High, $"Explosion spawned at {text}"); + } + else if (user == null) + { + _logSystem.Add(LogType.Explosion, LogImpact.High, + $"{EntityManager.GetEntity(entity.Value)} exploded at {text}"); + } + else + { + _logSystem.Add(LogType.Explosion, LogImpact.High, + $"{EntityManager.GetEntity(user.Value)} caused {EntityManager.GetEntity(entity.Value)} to explode at {text}"); + } var maxRange = MathHelper.Max(devastationRange, heavyImpactRange, lightImpactRange, 0); var epicenterMapPos = epicenter.ToMapPos(EntityManager); diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index d7e21de886..39f41b6d47 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -1,10 +1,14 @@ using System; +using Content.Server.Administration.Logs; using Content.Server.Doors.Components; using Content.Server.Explosion.Components; using Content.Server.Flash; using Content.Server.Flash.Components; +using Content.Server.Projectiles.Components; using Content.Shared.Audio; +using Content.Shared.Database; using Content.Shared.Doors; +using Content.Shared.Throwing; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.GameObjects; @@ -21,9 +25,9 @@ namespace Content.Server.Explosion.EntitySystems public class TriggerEvent : HandledEntityEventArgs { public IEntity Triggered { get; } - public IEntity? User { get; } + public EntityUid? User { get; } - public TriggerEvent(IEntity triggered, IEntity? user = null) + public TriggerEvent(IEntity triggered, EntityUid? user = null) { Triggered = triggered; User = user; @@ -35,6 +39,7 @@ namespace Content.Server.Explosion.EntitySystems { [Dependency] private readonly ExplosionSystem _explosions = default!; [Dependency] private readonly FlashSystem _flashSystem = default!; + [Dependency] private readonly AdminLogSystem _logSystem = default!; public override void Initialize() { @@ -53,11 +58,11 @@ namespace Content.Server.Explosion.EntitySystems { if (!EntityManager.TryGetComponent(uid, out ExplosiveComponent? explosiveComponent)) return; - Explode(uid, explosiveComponent); + Explode(uid, explosiveComponent, args.User); } // You really shouldn't call this directly (TODO Change that when ExplosionHelper gets changed). - public void Explode(EntityUid uid, ExplosiveComponent component) + public void Explode(EntityUid uid, ExplosiveComponent component, EntityUid? user = null) { if (component.Exploding) { @@ -65,7 +70,12 @@ namespace Content.Server.Explosion.EntitySystems } component.Exploding = true; - _explosions.SpawnExplosion(uid, component.DevastationRange, component.HeavyImpactRange, component.LightImpactRange, component.FlashRange); + _explosions.SpawnExplosion(uid, + component.DevastationRange, + component.HeavyImpactRange, + component.LightImpactRange, + component.FlashRange, + user); EntityManager.QueueDeleteEntity(uid); } #endregion @@ -76,7 +86,7 @@ namespace Content.Server.Explosion.EntitySystems if (component.Flashed) return; // TODO Make flash durations sane ffs. - _flashSystem.FlashArea(uid, args.User?.Uid, component.Range, component.Duration * 1000f); + _flashSystem.FlashArea(uid, args.User, component.Range, component.Duration * 1000f); component.Flashed = true; } #endregion @@ -113,16 +123,22 @@ namespace Content.Server.Explosion.EntitySystems private void HandleCollide(EntityUid uid, TriggerOnCollideComponent component, StartCollideEvent args) { - Trigger(component.Owner); + EntityUid? user = null; + if (EntityManager.TryGetComponent(uid, out ProjectileComponent projectile)) + user = projectile.Shooter; + else if (EntityManager.TryGetComponent(uid, out ThrownItemComponent thrown)) + user = thrown.Thrower?.Uid; + + Trigger(component.Owner, user); } - public void Trigger(IEntity trigger, IEntity? user = null) + public void Trigger(IEntity trigger, EntityUid? user = null) { var triggerEvent = new TriggerEvent(trigger, user); EntityManager.EventBus.RaiseLocalEvent(trigger.Uid, triggerEvent); } - public void HandleTimerTrigger(TimeSpan delay, IEntity triggered, IEntity? user = null) + public void HandleTimerTrigger(TimeSpan delay, IEntity triggered, EntityUid? user = null) { if (delay.TotalSeconds <= 0) { diff --git a/Content.Shared.Database/LogType.cs b/Content.Shared.Database/LogType.cs index 154c0ea3d6..a86db2afcd 100644 --- a/Content.Shared.Database/LogType.cs +++ b/Content.Shared.Database/LogType.cs @@ -46,7 +46,7 @@ public enum LogType HitScanHit = 42, Suicide = 43, Explosion = 44, - Radiation = 45, + Radiation = 45, // Unused Barotrauma = 46, Flammable = 47, Asphyxiation = 48, diff --git a/Content.Shared/Damage/Components/DamageableComponent.cs b/Content.Shared/Damage/Components/DamageableComponent.cs index 74388a6253..39b9dd787b 100644 --- a/Content.Shared/Damage/Components/DamageableComponent.cs +++ b/Content.Shared/Damage/Components/DamageableComponent.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using Content.Shared.Acts; using Content.Shared.Damage.Prototypes; -using Content.Shared.Damage; using Content.Shared.FixedPoint; using Content.Shared.Radiation; using Robust.Shared.Analyzers; @@ -13,8 +12,6 @@ using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; using Robust.Shared.ViewVariables; -using Content.Shared.Administration.Logs; -using Content.Shared.Database; namespace Content.Shared.Damage { @@ -95,11 +92,7 @@ namespace Content.Shared.Damage damage.DamageDict.Add(typeID, damageValue); } - var actual = EntitySystem.Get().TryChangeDamage(OwnerUid, damage); - - // should logging be disabled during rad storms? a lot of entities are going to be damaged. - if (actual != null && !actual.Empty) - EntitySystem.Get().Add(LogType.Radiation, $"{Owner} took {actual.Total} radiation damage"); + EntitySystem.Get().TryChangeDamage(OwnerUid, damage); } // TODO EXPLOSION Remove this. @@ -120,11 +113,7 @@ namespace Content.Shared.Damage damage.DamageDict.Add(typeID, damageValue); } - var actual = EntitySystem.Get().TryChangeDamage(OwnerUid, damage); - - // will logging handle nukes? - if (actual != null && !actual.Empty) - EntitySystem.Get().Add(LogType.Explosion, $"{Owner} took {actual.Total} explosion damage"); + EntitySystem.Get().TryChangeDamage(OwnerUid, damage); } } diff --git a/Content.Shared/Damage/Systems/DamageableSystem.cs b/Content.Shared/Damage/Systems/DamageableSystem.cs index 9b21ad702f..aa2d453042 100644 --- a/Content.Shared/Damage/Systems/DamageableSystem.cs +++ b/Content.Shared/Damage/Systems/DamageableSystem.cs @@ -1,7 +1,5 @@ using System.Linq; -using Content.Shared.Administration.Logs; using Content.Shared.Damage.Prototypes; -using Content.Shared.Database; using Content.Shared.FixedPoint; using Robust.Shared.GameObjects; using Robust.Shared.GameStates; @@ -15,8 +13,6 @@ namespace Content.Shared.Damage { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedAdminLogSystem _logs = default!; - public override void Initialize() { SubscribeLocalEvent(DamageableInit); @@ -24,45 +20,6 @@ namespace Content.Shared.Damage SubscribeLocalEvent(DamageableGetState); } - /// - /// Update the total damage value and optionally add to admin logs - /// - protected virtual void SetTotalDamage(DamageableComponent damageable, FixedPoint2 @new, bool logChange) - { - var owner = damageable.Owner; - var old = damageable.TotalDamage; - - if (@new == old) - { - return; - } - - damageable.TotalDamage = @new; - - if (!logChange) - return; - - LogType logType; - string type; - FixedPoint2 change; - - if (@new > old) - { - logType = LogType.Damaged; - type = "received"; - change = @new - old; - } - else - { - logType = LogType.Healed; - type = "healed"; - change = old - @new; - } - - _logs.Add(logType, $"{owner} {type} {change} damage. Old: {old} | New: {@new}"); - - } - /// /// Initialize a damageable component /// @@ -111,7 +68,7 @@ namespace Content.Shared.Damage public void SetDamage(DamageableComponent damageable, DamageSpecifier damage) { damageable.Damage = damage; - DamageChanged(damageable, false); + DamageChanged(damageable); } /// @@ -121,11 +78,11 @@ namespace Content.Shared.Damage /// This updates cached damage information, flags the component as dirty, and raises a damage changed event. /// The damage changed event is used by other systems, such as damage thresholds. /// - public void DamageChanged(DamageableComponent component, bool logChange, DamageSpecifier? damageDelta = null, + public void DamageChanged(DamageableComponent component, DamageSpecifier? damageDelta = null, bool interruptsDoAfters = true) { component.DamagePerGroup = component.Damage.GetDamagePerGroup(); - SetTotalDamage(component, component.Damage.Total, logChange); + component.TotalDamage = component.Damage.Total; component.Dirty(); if (EntityManager.TryGetComponent(component.OwnerUid, out var appearance) && damageDelta != null) @@ -146,7 +103,7 @@ namespace Content.Shared.Damage /// null if the user had no applicable components that can take damage. /// public DamageSpecifier? TryChangeDamage(EntityUid uid, DamageSpecifier damage, bool ignoreResistances = false, - bool interruptsDoAfters = true, bool logChange = false) + bool interruptsDoAfters = true) { if (!EntityManager.TryGetComponent(uid, out var damageable)) { @@ -195,7 +152,7 @@ namespace Content.Shared.Damage if (!delta.Empty) { - DamageChanged(damageable, logChange, delta, interruptsDoAfters); + DamageChanged(damageable, delta, interruptsDoAfters); } return delta; @@ -222,7 +179,7 @@ namespace Content.Shared.Damage // Setting damage does not count as 'dealing' damage, even if it is set to a larger value, so we pass an // empty damage delta. - DamageChanged(component, false, new DamageSpecifier()); + DamageChanged(component, new DamageSpecifier()); } private void DamageableGetState(EntityUid uid, DamageableComponent component, ref ComponentGetState args) @@ -247,7 +204,7 @@ namespace Content.Shared.Damage if (!delta.Empty) { component.Damage = newDamage; - DamageChanged(component, false, delta); + DamageChanged(component, delta); } } }