These sorts of updates are relatively complicated. Though the simplest setup for this would be to simply just release the actual “update” at an earlier date only to let the server ACTUALLY load the update at the time players were actually promised. You’ll need some pretty heavy internal game managing for this sort of thing to work though. Getting the “right time” for that update is just the easy part, the hard part is having the update “off” up until its time to turn it “on” without breaking the game in the process AND allowing it to update both the server and all player clients.
Let’s say you have some sort of shooter game and lets say that this is the “new update”:
“More firepower update”
1 - Two New Guns
2 - New Map (Fiery Plaza)
3 - New graphics options for the client.
With these in mind, you could simply package the new update in a sort of “content package” system. Here’s what it could look like in instance form:
Each “Update” folder contains all of the content for EVERY update rather than have everything be stored into one universal folder/model/whatever else instance.
When its the time to update for the actual players, what the game server can do is look up into the new “Update3” folder and quickly load up everything it needs to that is supposed to be “constant” content (aka the new graphics options for the client for example).
As for the rest… Well, technically the game does not really need to “save” or “copy” these things anywhere! For example, lets say that after the update, a couple players want to make a new lobby. Of course, said lobby needs to include the new map, right? Well, the simple solution to the problem would be to just cycle through all of the Update folders every time a new lobby is being created. This should allow the game to pretty seamlessly incorporate the new map all without shutting down any servers or causing other issues. The same sort of approach can be used for the guns as well.
Now do keep in mind that you do have a million opportunities to cache these sorts of things for faster access time (less time needed to load up all map selections), reduced bandwidth (aka dont send icons, text and whatever else data to the client a million times over) and overall higher performance but this should be the absolute basics of how this sort of system can work.
But of course, real implementations of this require your project to be actually designed around such functionality.
Now sadly i cant really write out detailed technical books all about how you could make this sort of dynamic update system function for your projects specifically but i hope this can at least provide some decent insight into how you could create such a update system.
If your game simply does not have the design required for such functionality then i recommend you just stick with the standard way of updating. Move everyone into “update lobbies” then move them back into the game.
Also to add onto the post… You technically dont really need MessagingService or DataStoreService in order to apply the update. Simply have all the servers count down till the update and they should all manually apply the update when the time comes.