| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using Content.Server.Explosion.Components;
- using Content.Shared.Explosion.Components;
- using Content.Shared.Implants;
- using Content.Shared.Interaction.Events;
- using Content.Shared.Mobs;
- namespace Content.Server.Explosion.EntitySystems;
- public sealed partial class TriggerSystem
- {
- private void InitializeMobstate()
- {
- SubscribeLocalEvent<TriggerOnMobstateChangeComponent, MobStateChangedEvent>(OnMobStateChanged);
- SubscribeLocalEvent<TriggerOnMobstateChangeComponent, SuicideEvent>(OnSuicide);
- SubscribeLocalEvent<TriggerOnMobstateChangeComponent, ImplantRelayEvent<SuicideEvent>>(OnSuicideRelay);
- SubscribeLocalEvent<TriggerOnMobstateChangeComponent, ImplantRelayEvent<MobStateChangedEvent>>(OnMobStateRelay);
- }
- private void OnMobStateChanged(EntityUid uid, TriggerOnMobstateChangeComponent component, MobStateChangedEvent args)
- {
- if (!component.MobState.Contains(args.NewMobState))
- return;
- //This chains Mobstate Changed triggers with OnUseTimerTrigger if they have it
- //Very useful for things that require a mobstate change and a timer
- if (TryComp<OnUseTimerTriggerComponent>(uid, out var timerTrigger))
- {
- HandleTimerTrigger(
- uid,
- args.Origin,
- timerTrigger.Delay,
- timerTrigger.BeepInterval,
- timerTrigger.InitialBeepDelay,
- timerTrigger.BeepSound);
- }
- else
- Trigger(uid);
- }
- /// <summary>
- /// Checks if the user has any implants that prevent suicide to avoid some cheesy strategies
- /// Prevents suicide by handling the event without killing the user
- /// </summary>
- private void OnSuicide(EntityUid uid, TriggerOnMobstateChangeComponent component, SuicideEvent args)
- {
- if (args.Handled)
- return;
- if (!component.PreventSuicide)
- return;
- _popupSystem.PopupEntity(Loc.GetString("suicide-prevented"), args.Victim, args.Victim);
- args.Handled = true;
- }
- private void OnSuicideRelay(EntityUid uid, TriggerOnMobstateChangeComponent component, ImplantRelayEvent<SuicideEvent> args)
- {
- OnSuicide(uid, component, args.Event);
- }
- private void OnMobStateRelay(EntityUid uid, TriggerOnMobstateChangeComponent component, ImplantRelayEvent<MobStateChangedEvent> args)
- {
- OnMobStateChanged(uid, component, args.Event);
- }
- }
|