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}.