using Content.Server.Ghost.Roles.UI;
using Content.Server.Mind.Commands;
using Content.Shared.Administration;
+using Content.Shared.CCVar;
using Content.Shared.Database;
using Content.Shared.Follower;
using Content.Shared.GameTicking;
using JetBrains.Annotations;
using Robust.Server.GameObjects;
using Robust.Server.Player;
+using Robust.Shared.Configuration;
using Robust.Shared.Console;
using Robust.Shared.Enums;
using Robust.Shared.Player;
[UsedImplicitly]
public sealed class GhostRoleSystem : EntitySystem
{
+ [Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly EuiManager _euiManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
var raffle = ent.Comp;
raffle.Identifier = ghostRole.Identifier;
- raffle.Countdown = TimeSpan.FromSeconds(settings.InitialDuration);
+ var countdown = _cfg.GetCVar(CCVars.GhostQuickLottery)? 1 : settings.InitialDuration;
+ raffle.Countdown = TimeSpan.FromSeconds(countdown);
raffle.CumulativeTime = TimeSpan.FromSeconds(settings.InitialDuration);
// we copy these settings into the component because they would be cumbersome to access otherwise
raffle.JoinExtendsDurationBy = TimeSpan.FromSeconds(settings.JoinExtendsDurationBy);
public static readonly CVarDef<float> GhostRoleTime =
CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED | CVar.SERVER);
+ /// <summary>
+ /// If ghost role lotteries should be made near-instanteous.
+ /// </summary>
+ public static readonly CVarDef<bool> GhostQuickLottery =
+ CVarDef.Create("ghost.quick_lottery", false, CVar.SERVERONLY);
+
/// <summary>
/// Whether or not to kill the player's mob on ghosting, when it is in a critical health state.
/// </summary>