Skip to content

Instantly share code, notes, and snippets.

@Quenty
Created July 14, 2019 19:24
Show Gist options
  • Select an option

  • Save Quenty/c98da9a592c7c1e3583ea18793808aa3 to your computer and use it in GitHub Desktop.

Select an option

Save Quenty/c98da9a592c7c1e3583ea18793808aa3 to your computer and use it in GitHub Desktop.
--[[
SoftShutdown 1.2
URL: https://github.com/MerelyRBLX/ROBLOX-Lua/blob/master/SoftShutdown.lua
Author: Merely
This system lets you shut down servers without losing a bunch of players.
When game.OnClose is called, the script teleports everyone in the server
into a reserved server.
When the reserved servers start up, they wait a few seconds, and then
send everyone back into the main place.
I added wait() in a couple of places because if you don't, everyone will spawn into
their own servers with only 1 player.
--]]
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TeleportService = game:GetService("TeleportService")
local Workspace = game:GetService("Workspace")
if RunService:IsStudio() then
return
end
if (game.PrivateServerId ~= "" and game.PrivateServerOwnerId == 0) then
-- this is a reserved server without a VIP server owner
local message = Instance.new("Message")
message.Text = "This is a temporary lobby. Teleporting back in a moment."
message.Parent = Workspace
local waitTime = 5
Players.PlayerAdded:Connect(function(player)
wait(waitTime)
waitTime = waitTime / 2
TeleportService:Teleport(game.PlaceId, player)
end)
for _, player in pairs(Players:GetPlayers()) do
TeleportService:Teleport(game.PlaceId, player)
wait(waitTime)
waitTime = waitTime / 2
end
else
game:BindToClose(function()
if (#Players:GetPlayers() == 0) then
return
end
if RunService:IsStudio() then
return
end
if (game.JobId == "") then
-- Offline
return
end
local message = Instance.new("Message")
message.Text = "Rebooting servers for update. Please wait"
message.Parent = Workspace
wait(2)
local reservedServerCode = TeleportService:ReserveServer(game.PlaceId)
for _, player in pairs(Players:GetPlayers()) do
TeleportService:TeleportToPrivateServer(game.PlaceId, reservedServerCode, { player })
end
Players.PlayerAdded:Connect(function(player)
TeleportService:TeleportToPrivateServer(game.PlaceId, reservedServerCode, { player })
end)
while (#Players:GetPlayers() > 0) do
wait(1)
end
end)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment