DamageOnToolInteractSystem.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Content.Server.Administration.Logs;
  2. using Content.Server.Damage.Components;
  3. using Content.Shared.Damage;
  4. using Content.Shared.Database;
  5. using Content.Shared.Interaction;
  6. using Content.Shared.Tools.Components;
  7. using Content.Shared.Tools.Systems;
  8. using ItemToggleComponent = Content.Shared.Item.ItemToggle.Components.ItemToggleComponent;
  9. namespace Content.Server.Damage.Systems
  10. {
  11. public sealed class DamageOnToolInteractSystem : EntitySystem
  12. {
  13. [Dependency] private readonly DamageableSystem _damageableSystem = default!;
  14. [Dependency] private readonly IAdminLogManager _adminLogger = default!;
  15. [Dependency] private readonly SharedToolSystem _toolSystem = default!;
  16. public override void Initialize()
  17. {
  18. base.Initialize();
  19. SubscribeLocalEvent<DamageOnToolInteractComponent, InteractUsingEvent>(OnInteracted);
  20. }
  21. private void OnInteracted(EntityUid uid, DamageOnToolInteractComponent component, InteractUsingEvent args)
  22. {
  23. if (args.Handled)
  24. return;
  25. if (!TryComp<ItemToggleComponent>(args.Used, out var itemToggle))
  26. return;
  27. if (component.WeldingDamage is {} weldingDamage
  28. && EntityManager.TryGetComponent(args.Used, out WelderComponent? welder)
  29. && itemToggle.Activated
  30. && !welder.TankSafe)
  31. {
  32. var dmg = _damageableSystem.TryChangeDamage(args.Target, weldingDamage, origin: args.User);
  33. if (dmg != null)
  34. _adminLogger.Add(LogType.Damaged,
  35. $"{ToPrettyString(args.User):user} used {ToPrettyString(args.Used):used} as a welder to deal {dmg.GetTotal():damage} damage to {ToPrettyString(args.Target):target}");
  36. args.Handled = true;
  37. }
  38. else if (component.DefaultDamage is {} damage
  39. && _toolSystem.HasQuality(args.Used, component.Tools))
  40. {
  41. var dmg = _damageableSystem.TryChangeDamage(args.Target, damage, origin: args.User);
  42. if (dmg != null)
  43. _adminLogger.Add(LogType.Damaged,
  44. $"{ToPrettyString(args.User):user} used {ToPrettyString(args.Used):used} as a tool to deal {dmg.GetTotal():damage} damage to {ToPrettyString(args.Target):target}");
  45. args.Handled = true;
  46. }
  47. }
  48. }
  49. }