using Content.Shared.Roles; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.GameTicking.Rules.Components; [RegisterComponent, Access(typeof(ZombieRuleSystem))] public sealed partial class ZombieRuleComponent : Component { [DataField] public Dictionary InitialInfectedNames = new(); [DataField] public ProtoId PatientZeroPrototypeId = "InitialInfected"; /// /// When the round will next check for round end. /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan? NextRoundEndCheck; /// /// The amount of time between each check for the end of the round. /// [DataField] public TimeSpan EndCheckDelay = TimeSpan.FromSeconds(30); /// /// The time at which the initial infected will be chosen. /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] public TimeSpan? StartTime; /// /// The minimum amount of time after the round starts that the initial infected will be chosen. /// [DataField] public TimeSpan MinStartDelay = TimeSpan.FromMinutes(10); /// /// The maximum amount of time after the round starts that the initial infected will be chosen. /// [DataField] public TimeSpan MaxStartDelay = TimeSpan.FromMinutes(15); /// /// The sound that plays when someone becomes an initial infected. /// todo: this should have a unique sound instead of reusing the zombie one. /// [DataField] public SoundSpecifier InitialInfectedSound = new SoundPathSpecifier("/Audio/Ambience/Antag/zombie_start.ogg"); /// /// The minimum amount of time initial infected have before they start taking infection damage. /// [DataField] public TimeSpan MinInitialInfectedGrace = TimeSpan.FromMinutes(12.5f); /// /// The maximum amount of time initial infected have before they start taking damage. /// [DataField] public TimeSpan MaxInitialInfectedGrace = TimeSpan.FromMinutes(15f); /// /// How many players for each initial infected. /// [DataField] public int PlayersPerInfected = 10; /// /// The maximum number of initial infected. /// [DataField] public int MaxInitialInfected = 6; /// /// After this amount of the crew become zombies, the shuttle will be automatically called. /// [DataField] public float ZombieShuttleCallPercentage = 0.7f; [DataField] public EntProtoId ZombifySelfActionPrototype = "ActionTurnUndead"; }