Server API - Toggleable "Can Join from Website"

As a Roblox developer, it is currently too hard to create a custom smooth server-shut-down experience for my players.

If this issue is addressed, it would improve my development experience because I could provide my players with a seemless transition to new servers without disrupting their time-invested, in-progress tasks.

Our game’s current “safe shut down” flow is to deploy a message to all servers that they will all be shut down at a specific time. Each client then places a notification on the player’s screen with a countdown timer so that they know to finish their in-progress tasks before that time. At the timer’s expiration, we use the Shut Down All Servers button on the Creator page to shut down all servers simultaneously.

The reason for this timer is: our game contains many cutscenes and scripted challenges during which the player’s progress cannot be saved. Some of these are lengthy, and if a server is shut down without warning, the player has to start the cutscene over from the beginning. This is frustrating to players, and we used the aforementioned timer to inform the player and prevent unexpected disconnects.

Roblox’s alternative solution, the Restart servers for updates button, shuts down servers at unpredictable times. This doesn’t work for our game.

I would like to reimplement our safe shut down flow, and the following proposed API would allow me to do so:

DataModel:SetServerAutoJoinEnabled( enabled: boolean )
This function sets whether players can automatically join this server from the website or from Teleports which do not specify a server.

Note: this method could be on DataModel or TeleportService. Either seems appropriate to me.

Other than the obvious benefit of allowing us to phase out old servers in a manner which is under our own control, this could also allow us to make a Reserved Server with the intention to later be changed into an ordinary server (that joins players from the website.)

Our new flow would be to reserve a server for each existing old-version server. Players would then be notified that a transition is taking place. We might even implement a case-by-case timer which results in a hard shut down after the time has elapsed (in the event we are patching an exploitable glitch). We would then teleport each player at the next opportunity that their data is saveable. The reason the server is reserved is to keep the same players playing together across the transition.

Once most of the players have transitioned, the server could mark itself as auto-joinable so that it could return to its normal operation. Without the ability to do this, a reserved server slowly becomes stale because it has fewer and fewer players in it as each one leaves. This results in an increasingly lonely experience for the players that remain.

I appreciate your consideration of this proposal and look forward to your response.

9 Likes

Assuming that you use MessagingService APIs to deploy the shutdown message, it would be possible to also hook a function to Players.PlayerAdded that kicks anyone that joins.

If you want players who joined earlier to still have the option to move between servers before the shutdown, then use TeleportData and add a key that specifies whether they are allowed to teleport between servers.

2 Likes

Joining a server and immediately being kicked is terrible UX. It’d be better to just mark the server as unjoinable.

2 Likes