1
0

DelayedDeathSystem.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
  2. // SPDX-FileCopyrightText: 2025 Aiden <aiden@djkraz.com>
  3. // SPDX-FileCopyrightText: 2025 deltanedas <39013340+deltanedas@users.noreply.github.com>
  4. // SPDX-FileCopyrightText: 2025 deltanedas <@deltanedas:kde.org>
  5. // SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com>
  6. //
  7. // SPDX-License-Identifier: AGPL-3.0-or-later
  8. using Content.Server.Chat.Systems;
  9. using Content.Shared.Medical;
  10. using Content.Shared.Mobs;
  11. using Content.Shared.Mobs.Components;
  12. using Content.Shared.Mobs.Systems;
  13. namespace Content.Server._Shitmed.DelayedDeath;
  14. public partial class DelayedDeathSystem : EntitySystem
  15. {
  16. [Dependency] private readonly ChatSystem _chat = default!;
  17. [Dependency] private readonly MobStateSystem _mobState = default!;
  18. public override void Initialize()
  19. {
  20. base.Initialize();
  21. SubscribeLocalEvent<DelayedDeathComponent, TargetBeforeDefibrillatorZapsEvent>(OnDefibZap);
  22. }
  23. public override void Update(float frameTime)
  24. {
  25. base.Update(frameTime);
  26. using var query = EntityQueryEnumerator<DelayedDeathComponent, MobStateComponent>();
  27. while (query.MoveNext(out var ent, out var comp, out var mob))
  28. {
  29. comp.DeathTimer += frameTime;
  30. if (comp.DeathTimer >= comp.DeathTime && !_mobState.IsDead(ent, mob))
  31. {
  32. // go crit then dead so deathgasp can happen
  33. _mobState.ChangeMobState(ent, MobState.Critical, mob);
  34. _mobState.ChangeMobState(ent, MobState.Dead, mob);
  35. }
  36. }
  37. }
  38. private void OnDefibZap(Entity<DelayedDeathComponent> ent, ref TargetBeforeDefibrillatorZapsEvent args)
  39. {
  40. // can't defib someone without a heart or brain pal
  41. args.Cancel();
  42. _chat.TrySendInGameICMessage(args.Defib, Loc.GetString("defibrillator-missing-organs"),
  43. InGameICChatType.Speak, true);
  44. }
  45. }