add reflect logs (#17006)
This commit is contained in:
@@ -206,7 +206,7 @@ public sealed partial class GunSystem : SharedGunSystem
|
|||||||
|
|
||||||
FireEffects(fromEffect, result.Distance, dir.Normalized.ToAngle(), hitscan, hit);
|
FireEffects(fromEffect, result.Distance, dir.Normalized.ToAngle(), hitscan, hit);
|
||||||
|
|
||||||
var ev = new HitScanReflectAttemptEvent(hitscan.Reflective, dir, false);
|
var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false);
|
||||||
RaiseLocalEvent(hit, ref ev);
|
RaiseLocalEvent(hit, ref ev);
|
||||||
|
|
||||||
if (!ev.Reflected)
|
if (!ev.Reflected)
|
||||||
|
|||||||
@@ -7,4 +7,4 @@ namespace Content.Shared.Weapons.Ranged.Events;
|
|||||||
/// and changing <see cref="Direction"/> where shot will go next
|
/// and changing <see cref="Direction"/> where shot will go next
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ByRefEvent]
|
[ByRefEvent]
|
||||||
public record struct HitScanReflectAttemptEvent(ReflectType Reflective, Vector2 Direction, bool Reflected);
|
public record struct HitScanReflectAttemptEvent(EntityUid? Shooter, EntityUid SourceItem, ReflectType Reflective, Vector2 Direction, bool Reflected);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using Content.Shared.Administration.Logs;
|
||||||
using Content.Shared.Audio;
|
using Content.Shared.Audio;
|
||||||
|
using Content.Shared.Database;
|
||||||
using Content.Shared.Hands.Components;
|
using Content.Shared.Hands.Components;
|
||||||
using Content.Shared.Weapons.Ranged.Events;
|
using Content.Shared.Weapons.Ranged.Events;
|
||||||
using Robust.Shared.Physics.Components;
|
using Robust.Shared.Physics.Components;
|
||||||
@@ -19,6 +21,7 @@ public abstract class SharedReflectSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly INetManager _netManager = default!;
|
[Dependency] private readonly INetManager _netManager = default!;
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
[Dependency] private readonly ISharedAdminLogManager _adminLogger = default!;
|
||||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
||||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
@@ -88,10 +91,16 @@ public abstract class SharedReflectSystem : EntitySystem
|
|||||||
|
|
||||||
if (Resolve(projectile, ref projectileComp, false))
|
if (Resolve(projectile, ref projectileComp, false))
|
||||||
{
|
{
|
||||||
|
_adminLogger.Add(LogType.BulletHit, LogImpact.Medium, $"{ToPrettyString(reflector)} reflected {ToPrettyString(projectile)} from {ToPrettyString(projectileComp.Weapon)} shot by {projectileComp.Shooter}");
|
||||||
|
|
||||||
projectileComp.Shooter = reflector;
|
projectileComp.Shooter = reflector;
|
||||||
projectileComp.Weapon = reflector;
|
projectileComp.Weapon = reflector;
|
||||||
Dirty(projectileComp);
|
Dirty(projectileComp);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_adminLogger.Add(LogType.BulletHit, LogImpact.Medium, $"{ToPrettyString(reflector)} reflected {ToPrettyString(projectile)}");
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -101,7 +110,7 @@ public abstract class SharedReflectSystem : EntitySystem
|
|||||||
if (args.Reflected || hands.ActiveHandEntity == null)
|
if (args.Reflected || hands.ActiveHandEntity == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (TryReflectHitscan(hands.ActiveHandEntity.Value, args.Direction, out var dir))
|
if (TryReflectHitscan(hands.ActiveHandEntity.Value, args.Shooter, args.SourceItem, args.Direction, out var dir))
|
||||||
{
|
{
|
||||||
args.Direction = dir.Value;
|
args.Direction = dir.Value;
|
||||||
args.Reflected = true;
|
args.Reflected = true;
|
||||||
@@ -116,14 +125,14 @@ public abstract class SharedReflectSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryReflectHitscan(uid, args.Direction, out var dir))
|
if (TryReflectHitscan(uid, args.Shooter, args.SourceItem, args.Direction, out var dir))
|
||||||
{
|
{
|
||||||
args.Direction = dir.Value;
|
args.Direction = dir.Value;
|
||||||
args.Reflected = true;
|
args.Reflected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryReflectHitscan(EntityUid reflector, Vector2 direction,
|
private bool TryReflectHitscan(EntityUid reflector, EntityUid? shooter, EntityUid shotSource, Vector2 direction,
|
||||||
[NotNullWhen(true)] out Vector2? newDirection)
|
[NotNullWhen(true)] out Vector2? newDirection)
|
||||||
{
|
{
|
||||||
if (!TryComp<ReflectComponent>(reflector, out var reflect) ||
|
if (!TryComp<ReflectComponent>(reflector, out var reflect) ||
|
||||||
@@ -142,6 +151,12 @@ public abstract class SharedReflectSystem : EntitySystem
|
|||||||
|
|
||||||
var spread = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2);
|
var spread = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2);
|
||||||
newDirection = -spread.RotateVec(direction);
|
newDirection = -spread.RotateVec(direction);
|
||||||
|
|
||||||
|
if (shooter != null)
|
||||||
|
_adminLogger.Add(LogType.HitScanHit, LogImpact.Medium, $"{ToPrettyString(reflector)} reflected hitscan from {ToPrettyString(shotSource)} shot by {ToPrettyString(shooter.Value)}");
|
||||||
|
else
|
||||||
|
_adminLogger.Add(LogType.HitScanHit, LogImpact.Medium, $"{ToPrettyString(reflector)} reflected hitscan from {ToPrettyString(shotSource)}");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user