Could we maybe get a :BindToUpdate() function that lets us detect if the game is getting upgraded to wrap up rounds early and cleanly close DataStore? That would be neat!
To answer you, DataStore here is affected depending on how you code it. If your game, for some god forsaken reason, manages to save data AFTER the players have been teleported to a new server, ouch.
I might have to use DataStore2.
I hope they fix that problem.
Look into ProfileService if you want a DataStore system that prevents your data from ever being overwritten like I described. It’s a very easy to grasp library.
Nice to see the community was listened to about the shut down all servers button, great job Roblox!
I notice it teleports you with no prior notice. Our game is mostly combat, and I can imagine some individuals are not happy when they abruptly get teleported while in the middle of said combat. I would love to see a notification implemented that they are about to get teleported, as seen in the popular SoftShutdown script, but less in-your-face, per se.
I can implement this myself using game.BindToClose
, but in my opinion, if it were a native feature, it would work a lot better.
As of now, I still believe using some kind of Soft Shutdown System is a more effective method of shutting down servers to run updates, rather than using Roblox’s method. Here is why I think that:
- If I use Roblox’s method of shutting down servers takes slightly longer for the servers to update than using a Soft Shutdown System.
- Also, you get no notification when you update the servers, so players will be abruptly teleported without any warning, which may cause frustration and confusion among players.
- Soft Shutdown Systems are more customizable to your game, meaning that not only can you include a warning message for when the game is about to be shut down temporarily and updated, but you can also customize the warning messages based on your game’s own needs, reducing confusion and increasing the level of consistency amongst different games individually.
- Lastly, it is not quite as easy to access the shutdown servers feature when you want to use Roblox’s method of making players automatically rejoin when the servers are shutdown after an update, compared to being able to use the “Shut Down All Servers” button directly, when using a Soft Shutdown System.
Overall, I’d prefer to continue to use the Soft Shutdown System, as it’s more easily accessible to use when shutting down servers, from the front page of your games directly. Removing the “Shut Down All Servers” button entirely from the front page of all games is not a good idea.
It looks like this new feature is causing çritical conflicts with the popular library ProfileService by @loleris.
I am getting reports from users who are unable to play the game until they stay in a server for a full minute and a half. When debugging, I found this is due to ProfileService’s session lock (which is a necessary mechanism for teleport-heavy games) never expiring.
This means that when servers are migrated, the old server sometimes fails to save the player’s data before the game shuts down, and when players are teleported to the new server, ProfileService complains. So this may either be a Roblox issue, or an issue with ProfileService, or both.
Either way, if you are using ProfileService in your game, you should A) fork the library, and B) set the constant variable ForceLoadMaxSteps
to 1 or 2 (it’s set to 8 by default).
I personally still use a shutdown + teleport hub system and haven’t ran into problems with ProfileService having to resolve active session locks for over a minute. I will certainly be looking into any potential necessary fixes this coming month, though lowering the ForceLoadMaxSteps
value could pose a threat to the guarantees of the session lock mechanism so I’d advise to look into the code more before doing that.
My game currently uses a single lobby place, so I believe there’s not a huge need for the session lock in our case. Either way, even in teleport-heavy games that I’ve made in the past, I’ve never had a need to time the user out for a full minute, 20 seconds or so usually suffices.
Unfortunately the code you’re referring to has a lot of conditional branches within a while loop, and I am struggling to reason through it, so if you can explain what this variable does more and what the ideal minimum value would be for a game like mine that would be helpful to me.
If your game doesn’t have trading or any other type of feature that can take items from a profile and store them inside other DataStore keys then you don’t need session lock protections - in that case you can keep the value as low as you find it stable enough!
This new feature was working for me last week, but it does not seem to work anymore. When I click “Restart servers for update”, all players are kicked and must reconnect manually like the old functionality. Was this update reverted?
@ShinyGriffin thanks for the bug report. We found some cases where Restart Servers was not triggering auto-reconnect. Let us know if you see this happen again
@DataBrain I’m not sure that issue is related. Do you only see it when you use Restart Servers or do you also see it when you do Shutdown All (auto-reconnect is not implemented for Shutdown All yet)
Great update! Nevertheless, I feel like it’s still incomplete without (new) API features which should be considered when it comes to migrating servers:
- Scheduling the migration, instead of a strict limit of 30 seconds for DataModel:BindToClose (e.g. when a match ends and all data is saved)
- Make the server able to retrieve data as well, recognizing the previous DataModel.JobId, likewise with this mentioned here
Clicking Restart servers for update
for an individual place doesn’t seem to restart the servers. I clicked restart almost an hour ago but just to reconnect to the server with the same version number.
My experience currently has 32 different places and they all run on a package that I constantly update so new servers will always pull the latest package to run the game. All I had to do was shutdown the few main places that needed to pull the new package for the update.
I assume clicking Restart servers for update
compares each place’s version to determine whether to shut down?
If so, this severely hinders my ability to push updates and hotfixes without having to update every individual place or to make my place private and public again to get every server to shutdown. Not to mention places which I do not need shut down will also be shutdown by making private.
Restart servers for update
compares the latest published PlaceVersion with the one on the server to not unnecessarily shut down that server if it’s already on the latest version. If you want to shut down all servers regardless of version, use Shutdown all servers
instead.
Also note - both of these had an issue last week. You might have hit it - Restart servers for updates is unreliable / doesn't restart all servers
Hello
What is the recommended approach currently to teleport all players from a specific existing server to a new public server?
Thanks in advance
Yes, I would love an API method for this. We have the event game:Closing, where’s the event for migration?
I have tried every method in this post and none are working, all players get this error