using System.Threading; using Content.Shared.GameTicking; using Timer = Robust.Shared.Timing.Timer; namespace Content.Server._Sunrise.Misc.TimedRemoveComponents; public sealed class TimedRemoveComponentsSystem : EntitySystem { private static CancellationTokenSource _timerDespawnToken = new (); public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnInit); SubscribeLocalEvent(_ => Clear()); } private void OnInit(Entity ent, ref ComponentInit args) { Timer.Spawn(ent.Comp.RemoveAfter, () => RemoveComponents(ent), _timerDespawnToken.Token); } private void RemoveComponents(Entity ent) { if (TerminatingOrDeleted(ent)) return; EntityManager.RemoveComponents(ent, ent.Comp.Components); // блять, я себя захуярил RemComp(ent); } private static void Clear() { _timerDespawnToken.Cancel(); _timerDespawnToken = new(); } }