@quenty/softshutdown 9.23.4-canary.559.9f38947.0 → 9.24.0-canary.559.b31717d.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [9.23.4-canary.559.9f38947.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/softshutdown@9.23.3...@quenty/softshutdown@9.23.4-canary.559.9f38947.0) (2025-05-10)
6
+ # [9.24.0-canary.559.b31717d.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/softshutdown@9.23.3...@quenty/softshutdown@9.24.0-canary.559.b31717d.0) (2025-05-10)
7
7
 
8
8
 
9
9
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/softshutdown",
3
- "version": "9.23.4-canary.559.9f38947.0",
3
+ "version": "9.24.0-canary.559.b31717d.0",
4
4
  "description": "This service 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.",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -29,25 +29,25 @@
29
29
  "access": "public"
30
30
  },
31
31
  "dependencies": {
32
- "@quenty/attributeutils": "14.17.4-canary.559.9f38947.0",
33
- "@quenty/baseobject": "10.8.4-canary.559.9f38947.0",
34
- "@quenty/basicpane": "13.17.4-canary.559.9f38947.0",
35
- "@quenty/bindtocloseservice": "8.17.4-canary.559.9f38947.0",
36
- "@quenty/blend": "12.18.4-canary.559.9f38947.0",
37
- "@quenty/clienttranslator": "14.19.4-canary.559.9f38947.0",
38
- "@quenty/coreguienabler": "12.18.4-canary.559.9f38947.0",
39
- "@quenty/datastore": "13.20.4-canary.559.9f38947.0",
40
- "@quenty/loader": "10.8.4-canary.559.9f38947.0",
41
- "@quenty/maid": "3.4.4-canary.559.9f38947.0",
32
+ "@quenty/attributeutils": "14.18.0-canary.559.b31717d.0",
33
+ "@quenty/baseobject": "10.8.3",
34
+ "@quenty/basicpane": "13.18.0-canary.559.b31717d.0",
35
+ "@quenty/bindtocloseservice": "8.18.0-canary.559.b31717d.0",
36
+ "@quenty/blend": "12.19.0-canary.559.b31717d.0",
37
+ "@quenty/clienttranslator": "14.20.0-canary.559.b31717d.0",
38
+ "@quenty/coreguienabler": "12.19.0-canary.559.b31717d.0",
39
+ "@quenty/datastore": "13.21.0-canary.559.b31717d.0",
40
+ "@quenty/loader": "10.8.3",
41
+ "@quenty/maid": "3.4.3",
42
42
  "@quenty/math": "2.7.3",
43
- "@quenty/promise": "10.10.5-canary.559.9f38947.0",
44
- "@quenty/rx": "13.17.4-canary.559.9f38947.0",
45
- "@quenty/servicebag": "11.11.5-canary.559.9f38947.0",
46
- "@quenty/table": "3.7.5-canary.559.9f38947.0",
47
- "@quenty/teleportserviceutils": "9.17.4-canary.559.9f38947.0",
48
- "@quenty/uiobjectutils": "6.16.4-canary.559.9f38947.0",
49
- "@quenty/valuebaseutils": "13.17.4-canary.559.9f38947.0",
50
- "@quenty/valueobject": "13.17.4-canary.559.9f38947.0"
43
+ "@quenty/promise": "10.11.0-canary.559.b31717d.0",
44
+ "@quenty/rx": "13.18.0-canary.559.b31717d.0",
45
+ "@quenty/servicebag": "11.12.0-canary.559.b31717d.0",
46
+ "@quenty/table": "3.7.4",
47
+ "@quenty/teleportserviceutils": "9.18.0-canary.559.b31717d.0",
48
+ "@quenty/uiobjectutils": "6.17.0-canary.559.b31717d.0",
49
+ "@quenty/valuebaseutils": "13.18.0-canary.559.b31717d.0",
50
+ "@quenty/valueobject": "13.18.0-canary.559.b31717d.0"
51
51
  },
52
- "gitHead": "9f38947767d202411936a5c98898033df5865da0"
52
+ "gitHead": "b31717d8c9f7620c457f5018a2affa760a65334a"
53
53
  }
@@ -4,19 +4,19 @@
4
4
 
5
5
  local require = require(script.Parent.loader).load(script)
6
6
 
7
- local TeleportService = game:GetService("TeleportService")
8
7
  local Workspace = game:GetService("Workspace")
8
+ local TeleportService = game:GetService("TeleportService")
9
9
 
10
10
  local AttributeValue = require("AttributeValue")
11
- local CoreGuiEnabler = require("CoreGuiEnabler")
12
11
  local Maid = require("Maid")
13
12
  local PlayerGuiUtils = require("PlayerGuiUtils")
14
13
  local Rx = require("Rx")
15
- local ServiceBag = require("ServiceBag")
16
14
  local SoftShutdownConstants = require("SoftShutdownConstants")
17
15
  local SoftShutdownTranslator = require("SoftShutdownTranslator")
18
16
  local SoftShutdownUI = require("SoftShutdownUI")
19
17
  local ValueObject = require("ValueObject")
18
+ local CoreGuiEnabler = require("CoreGuiEnabler")
19
+ local ServiceBag = require("ServiceBag")
20
20
 
21
21
  local SoftShutdownServiceClient = {}
22
22
  SoftShutdownServiceClient.ServiceName = "SoftShutdownServiceClient"
@@ -53,24 +53,22 @@ function SoftShutdownServiceClient:Init(serviceBag: ServiceBag.ServiceBag)
53
53
  end)
54
54
 
55
55
  self._maid:GiveTask(Rx.combineLatest({
56
- isLobby = self._isLobby:Observe(),
57
- isShuttingDown = self._isUpdating:Observe(),
58
- localTeleportDataSaysIsLobby = self._localTeleportDataSaysIsLobby:Observe(),
59
- isArrivingAfterShutdown = self._isArrivingAfterShutdown:Observe(),
56
+ isLobby = self._isLobby:Observe();
57
+ isShuttingDown = self._isUpdating:Observe();
58
+ localTeleportDataSaysIsLobby = self._localTeleportDataSaysIsLobby:Observe();
59
+ isArrivingAfterShutdown = self._isArrivingAfterShutdown:Observe();
60
60
  }):Subscribe(function(state)
61
61
  if state.isLobby or state.localTeleportDataSaysIsLobby then
62
62
  self._maid._shutdownUI = nil
63
63
  if not self._maid._lobbyUI then
64
64
  local screenGui
65
- self._maid._lobbyUI, screenGui =
66
- self:_showSoftShutdownUI("shutdown.lobby.title", "shutdown.lobby.subtitle", true)
65
+ self._maid._lobbyUI, screenGui = self:_showSoftShutdownUI("shutdown.lobby.title", "shutdown.lobby.subtitle", true)
67
66
 
68
67
  TeleportService:SetTeleportGui(screenGui)
69
68
  end
70
69
  elseif state.isShuttingDown then
71
70
  local screenGui
72
- self._maid._shutdownUI, screenGui =
73
- self:_showSoftShutdownUI("shutdown.restart.title", "shutdown.restart.subtitle")
71
+ self._maid._shutdownUI, screenGui = self:_showSoftShutdownUI("shutdown.restart.title", "shutdown.restart.subtitle")
74
72
 
75
73
  TeleportService:SetTeleportGui(screenGui)
76
74
 
@@ -197,4 +195,4 @@ function SoftShutdownServiceClient:Destroy()
197
195
  self._maid:DoCleaning()
198
196
  end
199
197
 
200
- return SoftShutdownServiceClient
198
+ return SoftShutdownServiceClient
@@ -9,9 +9,9 @@ local Workspace = game:GetService("Workspace")
9
9
 
10
10
  local BasicPane = require("BasicPane")
11
11
  local Blend = require("Blend")
12
- local Math = require("Math")
13
- local Rx = require("Rx")
14
12
  local SpringObject = require("SpringObject")
13
+ local Rx = require("Rx")
14
+ local Math = require("Math")
15
15
 
16
16
  local SoftShutdownUI = setmetatable({}, BasicPane)
17
17
  SoftShutdownUI.ClassName = "SoftShutdownUI"
@@ -69,178 +69,178 @@ function SoftShutdownUI:_render()
69
69
  local foregroundColor = Color3.new(0.9, 0.9, 0.9)
70
70
 
71
71
  self._maid:GiveTask(percentVisible:Subscribe(function(percent)
72
- self._blur.Size = percent * 30
72
+ self._blur.Size = percent*30
73
73
  self._blur.Enabled = percent > 0
74
74
  end))
75
75
 
76
76
  return Blend.New "Frame" {
77
- Name = "SoftShutdownUI",
78
- Size = UDim2.new(1, 0, 1, 0),
79
- AnchorPoint = Vector2.new(0.5, 0.5),
80
- Position = UDim2.fromScale(0.5, 0.5),
77
+ Name = "SoftShutdownUI";
78
+ Size = UDim2.new(1, 0, 1, 0);
79
+ AnchorPoint = Vector2.new(0.5, 0.5);
80
+ Position = UDim2.fromScale(0.5, 0.5);
81
81
  Active = Blend.Computed(percentVisible, function(visible)
82
82
  return visible > 0
83
- end),
83
+ end);
84
84
  Visible = Blend.Computed(percentVisible, function(visible)
85
85
  return visible > 0
86
- end),
87
- BackgroundColor3 = backgroundColor,
86
+ end);
87
+ BackgroundColor3 = backgroundColor;
88
88
  BackgroundTransparency = Blend.Computed(percentVisible, function(visible)
89
89
  return Math.map(visible, 0, 1, 1, 0.4)
90
- end),
90
+ end);
91
91
 
92
92
  [Blend.Children] = {
93
93
  Blend.New "UIPadding" {
94
- PaddingLeft = UDim.new(0, 20),
95
- PaddingRight = UDim.new(0, 20),
96
- PaddingTop = UDim.new(0, 20),
97
- PaddingBottom = UDim.new(0, 20),
98
- },
94
+ PaddingLeft = UDim.new(0, 20);
95
+ PaddingRight = UDim.new(0, 20);
96
+ PaddingTop = UDim.new(0, 20);
97
+ PaddingBottom = UDim.new(0, 20);
98
+ };
99
99
 
100
100
  Blend.New "Frame" {
101
- Name = "ContentContainer",
102
- Size = UDim2.new(1, 0, 1, 0),
103
- AnchorPoint = Vector2.new(0.5, 0.5),
104
- Position = UDim2.fromScale(0.5, 0.5),
105
- BackgroundTransparency = 1,
101
+ Name = "ContentContainer";
102
+ Size = UDim2.new(1, 0, 1, 0);
103
+ AnchorPoint = Vector2.new(0.5, 0.5);
104
+ Position = UDim2.fromScale(0.5, 0.5);
105
+ BackgroundTransparency = 1;
106
106
 
107
107
  [Blend.Children] = {
108
108
  Blend.New "UIScale" {
109
109
  Scale = Blend.Computed(percentVisible, function(visible)
110
- return 0.7 + 0.3 * visible
111
- end),
112
- },
110
+ return 0.7 + 0.3*visible
111
+ end);
112
+ };
113
113
 
114
114
  Blend.New "Frame" {
115
- Name = "ImageLabelContainer",
116
- Size = UDim2.new(0, 80, 0, 80),
117
- BackgroundTransparency = 1,
118
- LayoutOrder = 1,
115
+ Name = "ImageLabelContainer";
116
+ Size = UDim2.new(0, 80, 0, 80);
117
+ BackgroundTransparency = 1;
118
+ LayoutOrder = 1;
119
119
 
120
120
  [Blend.Children] = {
121
121
  Blend.New "ImageLabel" {
122
- Size = UDim2.new(1, 0, 1, 0),
123
- ImageTransparency = transparency,
124
- BackgroundTransparency = 1,
125
- Image = "rbxassetid://6031302916",
126
- },
127
- },
128
- },
122
+ Size = UDim2.new(1, 0, 1, 0);
123
+ ImageTransparency = transparency;
124
+ BackgroundTransparency = 1;
125
+ Image = "rbxassetid://6031302916";
126
+ };
127
+ };
128
+ };
129
129
 
130
130
  Blend.New "Frame" {
131
- Name = "LabelContainer",
132
- Size = UDim2.new(1, 0, 0, 80),
133
- Position = UDim2.new(0.5, 0, 0.5, 0),
134
- AnchorPoint = Vector2.new(0.5, 0.5),
135
- BackgroundTransparency = 1,
136
- LayoutOrder = 2,
131
+ Name = "LabelContainer";
132
+ Size = UDim2.new(1, 0, 0, 80);
133
+ Position = UDim2.new(0.5, 0, 0.5,0);
134
+ AnchorPoint = Vector2.new(0.5, 0.5);
135
+ BackgroundTransparency = 1;
136
+ LayoutOrder = 2;
137
137
 
138
138
  [Blend.Children] = {
139
139
  Blend.New "TextLabel" {
140
- Name = "TitleLabel",
141
- BackgroundTransparency = 1,
142
- Position = UDim2.fromScale(0.5, 0),
143
- Size = UDim2.new(1, 0, 0.6, 0),
144
- AnchorPoint = Vector2.new(0.5, 0),
145
- Text = self._title,
146
- Font = Enum.Font.SourceSansBold,
147
- TextTransparency = transparency,
148
- TextColor3 = foregroundColor,
149
- LayoutOrder = 1,
150
- TextScaled = true,
151
- },
140
+ Name = "TitleLabel";
141
+ BackgroundTransparency = 1;
142
+ Position = UDim2.fromScale(0.5, 0);
143
+ Size = UDim2.new(1, 0, 0.6, 0);
144
+ AnchorPoint = Vector2.new(0.5, 0);
145
+ Text = self._title;
146
+ Font = Enum.Font.SourceSansBold;
147
+ TextTransparency = transparency;
148
+ TextColor3 = foregroundColor;
149
+ LayoutOrder = 1;
150
+ TextScaled = true;
151
+ };
152
152
 
153
153
  Blend.New "TextLabel" {
154
- Name = "SubtitleLabel",
155
- BackgroundTransparency = 1,
156
- Position = UDim2.fromScale(0.5, 1),
157
- Size = UDim2.new(1, 0, 0.3, 0),
158
- AnchorPoint = Vector2.new(0.5, 1),
159
- Text = self._subtitle,
160
- Font = Enum.Font.SourceSansLight,
161
- TextTransparency = transparency,
162
- TextColor3 = foregroundColor,
163
- LayoutOrder = 2,
164
- TextScaled = true,
165
- },
154
+ Name = "SubtitleLabel";
155
+ BackgroundTransparency = 1;
156
+ Position = UDim2.fromScale(0.5, 1);
157
+ Size = UDim2.new(1, 0, 0.3, 0);
158
+ AnchorPoint = Vector2.new(0.5, 1);
159
+ Text = self._subtitle;
160
+ Font = Enum.Font.SourceSansLight;
161
+ TextTransparency = transparency;
162
+ TextColor3 = foregroundColor;
163
+ LayoutOrder = 2;
164
+ TextScaled = true;
165
+ };
166
166
 
167
167
  Blend.New "UIAspectRatioConstraint" {
168
- AspectRatio = 5,
169
- },
170
- },
171
- },
168
+ AspectRatio = 5;
169
+ };
170
+ };
171
+ };
172
172
 
173
173
  Blend.New "Frame" {
174
- Name = "Spacer",
175
- BackgroundTransparency = 1,
176
- Size = UDim2.new(0, 0, 0, 50),
177
- LayoutOrder = 3,
178
- },
174
+ Name = "Spacer";
175
+ BackgroundTransparency = 1;
176
+ Size = UDim2.new(0, 0, 0, 50);
177
+ LayoutOrder = 3;
178
+ };
179
179
 
180
180
  Blend.New "Frame" {
181
- Name = "LoadingLabel",
182
- Position = UDim2.fromScale(0.5, 0.5),
183
- AnchorPoint = Vector2.new(0.5, 0.5),
184
- LayoutOrder = 4,
185
- Size = UDim2.fromScale(0.25, 0.25),
186
- BackgroundTransparency = 1,
181
+ Name = "LoadingLabel";
182
+ Position = UDim2.fromScale(0.5, 0.5);
183
+ AnchorPoint = Vector2.new(0.5, 0.5);
184
+ LayoutOrder = 4;
185
+ Size = UDim2.fromScale(0.25, 0.25);
186
+ BackgroundTransparency = 1;
187
187
 
188
188
  [Blend.Children] = {
189
189
  Blend.New "Frame" {
190
- Name = "RobloxLogo",
191
- Size = UDim2.new(1, 0, 1, 0),
192
- BackgroundColor3 = foregroundColor,
193
- AnchorPoint = Vector2.new(0.5, 0.5),
194
- Position = UDim2.fromScale(0.5, 0.5),
190
+ Name = "RobloxLogo";
191
+ Size = UDim2.new(1, 0, 1, 0);
192
+ BackgroundColor3 = foregroundColor;
193
+ AnchorPoint = Vector2.new(0.5, 0.5);
194
+ Position = UDim2.fromScale(0.5, 0.5);
195
195
 
196
- BackgroundTransparency = transparency,
196
+ BackgroundTransparency = transparency;
197
197
  Rotation = Rx.fromSignal(RunService.RenderStepped):Pipe({
198
198
  Rx.map(function()
199
199
  -- tick persists between sessions
200
- local t = tick() * math.pi * 1.5
200
+ local t = tick()*math.pi*1.5
201
201
  local smallerWave = math.sin(t)
202
- local percent = (math.sin(t - math.pi / 2) + 1) / 2
202
+ local percent = (math.sin(t - math.pi/2) + 1)/2
203
203
 
204
204
  if smallerWave > 0 then
205
- return 15 + percent * 360
205
+ return 15 + percent*360
206
206
  else
207
207
  return 15
208
208
  end
209
- end),
210
- }),
209
+ end);
210
+ });
211
211
 
212
212
  [Blend.Children] = {
213
213
  Blend.New "Frame" {
214
- BackgroundColor3 = backgroundColor,
215
- Size = UDim2.fromScale(4 / 14, 4 / 14),
216
- AnchorPoint = Vector2.new(0.5, 0.5),
217
- Position = UDim2.fromScale(0.5, 0.5),
218
- BackgroundTransparency = transparency,
219
- },
220
- },
221
- },
214
+ BackgroundColor3 = backgroundColor;
215
+ Size = UDim2.fromScale(4/14, 4/14);
216
+ AnchorPoint = Vector2.new(0.5, 0.5);
217
+ Position = UDim2.fromScale(0.5, 0.5);
218
+ BackgroundTransparency = transparency;
219
+ };
220
+ }
221
+ };
222
222
 
223
223
  Blend.New "UIAspectRatioConstraint" {
224
- AspectRatio = 1,
225
- },
224
+ AspectRatio = 1;
225
+ };
226
226
 
227
227
  Blend.New "UISizeConstraint" {
228
- MaxSize = Vector2.new(math.huge, 50),
229
- },
230
- },
231
- },
228
+ MaxSize = Vector2.new(math.huge, 50);
229
+ };
230
+ };
231
+ };
232
232
 
233
233
  Blend.New "UIListLayout" {
234
- FillDirection = Enum.FillDirection.Vertical,
235
- SortOrder = Enum.SortOrder.LayoutOrder,
236
- HorizontalAlignment = Enum.HorizontalAlignment.Center,
237
- VerticalAlignment = Enum.VerticalAlignment.Center,
238
- Padding = UDim.new(0, 10),
239
- },
240
- },
241
- },
242
- },
234
+ FillDirection = Enum.FillDirection.Vertical;
235
+ SortOrder = Enum.SortOrder.LayoutOrder;
236
+ HorizontalAlignment = Enum.HorizontalAlignment.Center;
237
+ VerticalAlignment = Enum.VerticalAlignment.Center;
238
+ Padding = UDim.new(0, 10);
239
+ };
240
+ };
241
+ };
242
+ };
243
243
  }
244
244
  end
245
245
 
246
- return SoftShutdownUI
246
+ return SoftShutdownUI
@@ -2,13 +2,12 @@
2
2
  @class SoftShutdownUI.story
3
3
  ]]
4
4
 
5
- local require =
6
- require(game:GetService("ServerScriptService"):FindFirstChild("LoaderUtils", true).Parent).bootstrapStory(script)
5
+ local require = require(game:GetService("ServerScriptService"):FindFirstChild("LoaderUtils", true).Parent).bootstrapStory(script)
7
6
 
8
7
  local Maid = require("Maid")
9
- local ServiceBag = require("ServiceBag")
10
8
  local SoftShutdownTranslator = require("SoftShutdownTranslator")
11
9
  local SoftShutdownUI = require("SoftShutdownUI")
10
+ local ServiceBag = require("ServiceBag")
12
11
 
13
12
  return function(target)
14
13
  local maid = Maid.new()
@@ -32,4 +31,4 @@ return function(target)
32
31
  return function()
33
32
  maid:DoCleaning()
34
33
  end
35
- end
34
+ end
@@ -24,9 +24,9 @@ local Workspace = game:GetService("Workspace")
24
24
  local DataStorePromises = require("DataStorePromises")
25
25
  local Maid = require("Maid")
26
26
  local Promise = require("Promise")
27
- local ServiceBag = require("ServiceBag")
28
27
  local SoftShutdownConstants = require("SoftShutdownConstants")
29
28
  local TeleportServiceUtils = require("TeleportServiceUtils")
29
+ local ServiceBag = require("ServiceBag")
30
30
 
31
31
  local SoftShutdownService = {}
32
32
  SoftShutdownService.ServiceName = "SoftShutdownService"
@@ -84,7 +84,7 @@ function SoftShutdownService:_promiseTeleportPlayersToLobby()
84
84
  local initialTeleportOptions = Instance.new("TeleportOptions")
85
85
  initialTeleportOptions.ShouldReserveServer = true
86
86
  initialTeleportOptions:SetTeleportData({
87
- isSoftShutdownReserveServer = true,
87
+ isSoftShutdownReserveServer = true;
88
88
  })
89
89
 
90
90
  -- Collect any players remaining
@@ -96,10 +96,9 @@ function SoftShutdownService:_promiseTeleportPlayersToLobby()
96
96
  return Promise.spawn(function(resolve, _reject)
97
97
  -- Wait to let the teleport GUI be set
98
98
  task.delay(1, resolve)
99
+ end):Then(function()
100
+ return TeleportServiceUtils.promiseTeleport(game.PlaceId, players, initialTeleportOptions)
99
101
  end)
100
- :Then(function()
101
- return TeleportServiceUtils.promiseTeleport(game.PlaceId, players, initialTeleportOptions)
102
- end)
103
102
  :Then(function(teleportResult)
104
103
  self._maid._playerAddedCollector = nil
105
104
 
@@ -108,24 +107,18 @@ function SoftShutdownService:_promiseTeleportPlayersToLobby()
108
107
  newTeleportOptions.ServerInstanceId = teleportResult.PrivateServerId
109
108
  newTeleportOptions.ReservedServerAccessCode = teleportResult.ReservedServerAccessCode
110
109
  newTeleportOptions:SetTeleportData({
111
- isSoftShutdownReserveServer = true,
110
+ isSoftShutdownReserveServer = true;
112
111
  })
113
112
 
114
113
  -- Teleport any players that joined during initial teleport
115
114
  local promises = {}
116
115
 
117
116
  if #remainingPlayers > 0 then
118
- table.insert(
119
- promises,
120
- TeleportServiceUtils.promiseTeleport(game.PlaceId, remainingPlayers, newTeleportOptions)
121
- )
117
+ table.insert(promises, TeleportServiceUtils.promiseTeleport(game.PlaceId, remainingPlayers, newTeleportOptions))
122
118
  end
123
119
 
124
120
  self._maid:GiveTask(Players.PlayerAdded:Connect(function(player)
125
- table.insert(
126
- promises,
127
- TeleportServiceUtils.promiseTeleport(game.PlaceId, { player }, newTeleportOptions)
128
- )
121
+ table.insert(promises, TeleportServiceUtils.promiseTeleport(game.PlaceId, { player }, newTeleportOptions))
129
122
  end))
130
123
 
131
124
  -- We hope this works!
@@ -166,21 +159,22 @@ function SoftShutdownService:_promiseRedirectAllPlayers()
166
159
  self._maid:GiveTask(reject)
167
160
 
168
161
  resolve(players)
169
- end):Then(function(players)
170
- local teleportOptions = Instance.new("TeleportOptions")
171
- teleportOptions:SetTeleportData({
172
- isSoftShutdownArrivingIntoUpdatedServer = true,
173
- })
174
-
175
- -- Teleport all remaining players
176
- self._maid:GiveTask(Players.PlayerAdded:Connect(function(player)
177
- task.wait(1) -- Let the teleport GUI be set
178
- TeleportServiceUtils.promiseTeleport(game.PlaceId, { player }, teleportOptions)
179
- end))
180
-
181
- -- Try to keep players in the same group
182
- return TeleportServiceUtils.promiseTeleport(game.PlaceId, players, teleportOptions)
183
162
  end)
163
+ :Then(function(players)
164
+ local teleportOptions = Instance.new("TeleportOptions")
165
+ teleportOptions:SetTeleportData({
166
+ isSoftShutdownArrivingIntoUpdatedServer = true;
167
+ })
168
+
169
+ -- Teleport all remaining players
170
+ self._maid:GiveTask(Players.PlayerAdded:Connect(function(player)
171
+ task.wait(1) -- Let the teleport GUI be set
172
+ TeleportServiceUtils.promiseTeleport(game.PlaceId, { player }, teleportOptions)
173
+ end))
174
+
175
+ -- Try to keep players in the same group
176
+ return TeleportServiceUtils.promiseTeleport(game.PlaceId, players, teleportOptions)
177
+ end)
184
178
  end
185
179
 
186
180
  function SoftShutdownService:Destroy()
@@ -8,6 +8,6 @@ local require = require(script.Parent.loader).load(script)
8
8
  local Table = require("Table")
9
9
 
10
10
  return Table.readonly({
11
- IS_SOFT_SHUTDOWN_LOBBY_ATTRIBUTE = "IsSoftShutdownLobby",
12
- IS_SOFT_SHUTDOWN_UPDATING_ATTRIBUTE = "IsSoftshutdownRebootingServers",
13
- })
11
+ IS_SOFT_SHUTDOWN_LOBBY_ATTRIBUTE = "IsSoftShutdownLobby";
12
+ IS_SOFT_SHUTDOWN_UPDATING_ATTRIBUTE = "IsSoftshutdownRebootingServers";
13
+ })
@@ -7,16 +7,16 @@ local require = require(script.Parent.loader).load(script)
7
7
  return require("JSONTranslator").new("SoftShutdownTranslator", "en", {
8
8
  shutdown = {
9
9
  lobby = {
10
- title = "Rebooting servers for update.",
11
- subtitle = "Teleporting back in a moment...",
12
- },
10
+ title = "Rebooting servers for update.";
11
+ subtitle = "Teleporting back in a moment...";
12
+ };
13
13
  restart = {
14
- title = "Rebooting servers for update.",
15
- subtitle = "Please wait...",
16
- },
14
+ title = "Rebooting servers for update.";
15
+ subtitle = "Please wait...";
16
+ };
17
17
  complete = {
18
- title = "Rebooting servers for update.",
19
- subtitle = "Update complete...",
20
- },
21
- },
22
- })
18
+ title = "Rebooting servers for update.";
19
+ subtitle = "Update complete...";
20
+ };
21
+ };
22
+ })
@@ -10,4 +10,4 @@ local require = require(loader).bootstrapGame(loader.Parent)
10
10
  local serviceBag = require("ServiceBag").new()
11
11
  serviceBag:GetService(require("SoftShutdownServiceClient"))
12
12
  serviceBag:Init()
13
- serviceBag:Start()
13
+ serviceBag:Start()
@@ -65,4 +65,4 @@ local serviceBag = require(server.ServiceBag).new()
65
65
  serviceBag:GetService(require(server.SoftShutdownService))
66
66
 
67
67
  serviceBag:Init()
68
- serviceBag:Start()
68
+ serviceBag:Start()