Created
July 14, 2019 19:24
-
-
Save Quenty/c98da9a592c7c1e3583ea18793808aa3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --[[ | |
| 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