CatStation/Content.Server/Mobs/DeathgaspSystem.cs
Pok b38e363d41
Muted StatusEffects (#43668)
* MutedStatusEffects

* Update species_base.yml

* System

* refactor

* yml fix

* fix component

* review

* fix yml

* Update disabilities.yml

* StatusEffectMuted -> TraitStatusEffectMuted

* Update misc.yml

* merge

* RemoveStatusEffect

* more review

* cleanup

* merge

* oops

* Send it

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Co-authored-by: AJCM-git <ajcm_mail@disroot.org>
2026-07-30 03:52:56 +00:00

42 lines
1.3 KiB
C#

using Content.Server.Chat.Systems;
using Content.Shared.Mobs;
using Content.Shared.Speech.Muting;
using Content.Shared.StatusEffectNew;
namespace Content.Server.Mobs;
/// <summary>
/// A system that handles death gasps, an emote a character makes when they die.
/// </summary>
/// <seealso cref="DeathgaspComponent"/>
public sealed partial class DeathgaspSystem : EntitySystem
{
[Dependency] private ChatSystem _chat = default!;
[Dependency] private StatusEffectsSystem _statusEffects = default!;
[SubscribeLocalEvent]
private void OnMobStateChanged(Entity<DeathgaspComponent> ent, ref MobStateChangedEvent args)
{
// don't deathgasp if they arent going straight from crit to dead
if (args.NewMobState != MobState.Dead || args.OldMobState != MobState.Critical)
return;
Deathgasp(ent, ent.Comp);
}
/// <summary>
/// Causes an entity to perform their deathgasp emote, if they have one.
/// </summary>
public bool Deathgasp(EntityUid uid, DeathgaspComponent? component = null)
{
if (!Resolve(uid, ref component, false))
return false;
if (_statusEffects.HasEffectComp<MutedStatusEffectComponent>(uid))
return false;
_chat.TryEmoteWithChat(uid, component.Prototype, ignoreActionBlocker: true);
return true;
}
}