1
0

PlacementLoggerSystem.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Content.Server.Administration.Logs;
  2. using Content.Shared.Database;
  3. using Robust.Shared.Map;
  4. using Robust.Shared.Placement;
  5. using Robust.Shared.Player;
  6. namespace Content.Server.Placement;
  7. public sealed class PlacementLoggerSystem : EntitySystem
  8. {
  9. [Dependency] private readonly IAdminLogManager _adminLogger = default!;
  10. [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!;
  11. [Dependency] private readonly ISharedPlayerManager _player = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<PlacementEntityEvent>(OnEntityPlacement);
  16. SubscribeLocalEvent<PlacementTileEvent>(OnTilePlacement);
  17. }
  18. private void OnEntityPlacement(PlacementEntityEvent ev)
  19. {
  20. _player.TryGetSessionById(ev.PlacerNetUserId, out var actor);
  21. var actorEntity = actor?.AttachedEntity;
  22. var logType = ev.PlacementEventAction switch
  23. {
  24. PlacementEventAction.Create => LogType.EntitySpawn,
  25. PlacementEventAction.Erase => LogType.EntityDelete,
  26. _ => LogType.Action
  27. };
  28. if (actorEntity != null)
  29. _adminLogger.Add(logType, LogImpact.High,
  30. $"{ToPrettyString(actorEntity.Value):actor} used placement system to {ev.PlacementEventAction.ToString().ToLower()} {ToPrettyString(ev.EditedEntity):subject} at {ev.Coordinates}");
  31. else if (actor != null)
  32. _adminLogger.Add(logType, LogImpact.High,
  33. $"{actor:actor} used placement system to {ev.PlacementEventAction.ToString().ToLower()} {ToPrettyString(ev.EditedEntity):subject} at {ev.Coordinates}");
  34. else
  35. _adminLogger.Add(logType, LogImpact.High,
  36. $"Placement system {ev.PlacementEventAction.ToString().ToLower()}ed {ToPrettyString(ev.EditedEntity):subject} at {ev.Coordinates}");
  37. }
  38. private void OnTilePlacement(PlacementTileEvent ev)
  39. {
  40. _player.TryGetSessionById(ev.PlacerNetUserId, out var actor);
  41. var actorEntity = actor?.AttachedEntity;
  42. if (actorEntity != null)
  43. _adminLogger.Add(LogType.Tile, LogImpact.High,
  44. $"{ToPrettyString(actorEntity.Value):actor} used placement system to set tile {_tileDefinitionManager[ev.TileType].Name} at {ev.Coordinates}");
  45. else if (actor != null)
  46. _adminLogger.Add(LogType.Tile, LogImpact.High,
  47. $"{actor} used placement system to set tile {_tileDefinitionManager[ev.TileType].Name} at {ev.Coordinates}");
  48. else
  49. _adminLogger.Add(LogType.Tile, LogImpact.High,
  50. $"Placement system set tile {_tileDefinitionManager[ev.TileType].Name} at {ev.Coordinates}");
  51. }
  52. }