using Content.Server.GameTicking.Rules.Components; using Content.Server.StationEvents.Components; using Content.Server.Traits.Assorted; using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.Mind.Components; using Content.Shared.Traits.Assorted; namespace Content.Server.StationEvents.Events; public sealed class MassHallucinationsRule : StationEventSystem { [Dependency] private readonly ParacusiaSystem _paracusia = default!; protected override void Started(EntityUid uid, MassHallucinationsRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); var query = EntityQueryEnumerator(); while (query.MoveNext(out var ent, out _, out _)) { if (!EnsureComp(ent, out var paracusia)) { _paracusia.SetSounds(ent, component.Sounds, paracusia); _paracusia.SetTime(ent, component.MinTimeBetweenIncidents, component.MaxTimeBetweenIncidents, paracusia); _paracusia.SetDistance(ent, component.MaxSoundDistance); component.AffectedEntities.Add(ent); } } } protected override void Ended(EntityUid uid, MassHallucinationsRuleComponent component, GameRuleComponent gameRule, GameRuleEndedEvent args) { base.Ended(uid, component, gameRule, args); foreach (var ent in component.AffectedEntities) { RemComp(ent); } component.AffectedEntities.Clear(); } }