DamageUserOnTriggerSystem.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Server.Damage.Components;
  2. using Content.Server.Explosion.EntitySystems;
  3. using Content.Shared.Damage;
  4. using Content.Shared.StepTrigger;
  5. using Content.Shared.StepTrigger.Systems;
  6. namespace Content.Server.Damage.Systems;
  7. // System for damage that occurs on specific trigger, towards the user..
  8. public sealed class DamageUserOnTriggerSystem : EntitySystem
  9. {
  10. [Dependency] private readonly DamageableSystem _damageableSystem = default!;
  11. public override void Initialize()
  12. {
  13. SubscribeLocalEvent<DamageUserOnTriggerComponent, TriggerEvent>(OnTrigger);
  14. }
  15. private void OnTrigger(EntityUid uid, DamageUserOnTriggerComponent component, TriggerEvent args)
  16. {
  17. if (args.User is null)
  18. return;
  19. args.Handled |= OnDamageTrigger(uid, args.User.Value, component);
  20. }
  21. private bool OnDamageTrigger(EntityUid source, EntityUid target, DamageUserOnTriggerComponent? component = null)
  22. {
  23. if (!Resolve(source, ref component))
  24. {
  25. return false;
  26. }
  27. var damage = new DamageSpecifier(component.Damage);
  28. var ev = new BeforeDamageUserOnTriggerEvent(damage, target);
  29. RaiseLocalEvent(source, ev);
  30. return _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances, origin: source, targetPart: component.TargetPart) is not null; // Shitmed Change
  31. }
  32. }
  33. public sealed class BeforeDamageUserOnTriggerEvent : EntityEventArgs
  34. {
  35. public DamageSpecifier Damage { get; set; }
  36. public EntityUid Tripper { get; }
  37. public BeforeDamageUserOnTriggerEvent(DamageSpecifier damage, EntityUid target)
  38. {
  39. Damage = damage;
  40. Tripper = target;
  41. }
  42. }