diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs index b5c364a847b..833c2c365f7 100644 --- a/Content.Server/RoundEnd/RoundEndSystem.cs +++ b/Content.Server/RoundEnd/RoundEndSystem.cs @@ -381,7 +381,8 @@ public override void Update(float frameTime) { if (!_shuttle.EmergencyShuttleArrived && ExpectedCountdownEnd is null) { - RequestRoundEnd(checkCooldown: false, text: "round-end-system-shuttle-auto-called-announcement"); + CallEvacuationVote(); // DeltaV - call OOC vote for ending round + // RequestRoundEnd(checkCooldown: false, text: "round-end-system-shuttle-auto-called-announcement"); _autoCalledBefore = true; } diff --git a/Content.Server/_DVA/RoundEnd/RoundEndSystem.EvacVote.cs b/Content.Server/_DVA/RoundEnd/RoundEndSystem.EvacVote.cs new file mode 100644 index 00000000000..96cac5d4a59 --- /dev/null +++ b/Content.Server/_DVA/RoundEnd/RoundEndSystem.EvacVote.cs @@ -0,0 +1,31 @@ +using Content.Server.Voting.Managers; +using Content.Server.Voting; +using Content.Shared._DVA.CCVars; + +namespace Content.Server.RoundEnd; + +public sealed partial class RoundEndSystem : EntitySystem +{ + [Dependency] IVoteManager _vote = default!; + + public void CallEvacuationVote() + { + var options = new VoteOptions + { + Title = Loc.GetString("round-end-system-vote-title"), + Duration = _cfg.GetCVar(DCCVars.EmergencyShuttleVoteTime), + InitiatorText = Loc.GetString("vote-options-server-initiator-text") + }; + + options.Options.Add((Loc.GetString("round-end-system-vote-end"), true)); + options.Options.Add((Loc.GetString("round-end-system-vote-continue"), false)); + + var vote = _vote.CreateVote(options); + + vote.OnFinished += (_, args) => + { + if (args.Winner == null || (bool)args.Winner) + RequestRoundEnd(checkCooldown: false, text: "round-end-system-vote-shuttle-called-announcement"); + }; + } +} diff --git a/Content.Shared/_DVA/CCVars/DCCVars.cs b/Content.Shared/_DVA/CCVars/DCCVars.cs index d5d0774e7a3..ec3685cc9ea 100644 --- a/Content.Shared/_DVA/CCVars/DCCVars.cs +++ b/Content.Shared/_DVA/CCVars/DCCVars.cs @@ -35,6 +35,14 @@ public sealed partial class DCCVars * Misc. */ + /* OOC shuttle vote */ + + /// + /// How long players should have to vote on the round end shuttle being sent + /// + public static readonly CVarDef EmergencyShuttleVoteTime = + CVarDef.Create("shuttle.vote_time", TimeSpan.FromMinutes(1), CVar.SERVER); + /// /// The total time a player has to be SSD to be considered cryoable (stage 3). /// Default is 20 minutes. Value should be bigger than . diff --git a/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl b/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl new file mode 100644 index 00000000000..c1b9c18149e --- /dev/null +++ b/Resources/Locale/en-US/_DVA/roundend/round-end-system.ftl @@ -0,0 +1,4 @@ +round-end-system-vote-title = Should the shift end? +round-end-system-vote-end = Initiate Crew Transfer +round-end-system-vote-continue = Continue Round +round-end-system-vote-shuttle-called-announcement = An automatic crew shift change shuttle has been sent. ETA: {$time} {$units}.