Add `game.CrossplayId` to solve 2 servers starting with the same PrivateServerId

When using TeleportService to create and send players to reserved servers, Xbox One users may arrive in a separate server with the same PrivateServerId.

Cross-Platform Play - Players on Xbox One with cross-platform play disabled will arrive in a different server with players with cross-platform play enabled. This can cause multiple game servers with the same PrivateServerId to exist.”

I appreciate that the behavior is documented, but it’s still a big headache for developers trying to create large networked experiences. This completely breaks reserved server population management because there’s no reliable way to know what server the user will end up in. TeleportService code is already a burden to test, and this just makes it worse.

The current documented behavior is only acceptable if we are provided with an API that identifies the crossplay group the current server is part of. I think the best solution would be a property that achieves this, preferably an integer or very short string. I suggest game.CrossplayId because it’s similar to game.JobId / game.PrivateServerId / game.PrivateServerOwnerId. Developers could simply add this id to relevant MessagingService topics and OrderedDataStore keys so that these server groups can be managed independently. This would prevent unexpected problems caused by TeleportService sending users to different servers that are globally managed because crossplay is disabled.

It might be ideal for crossplay to always be enabled, but it’s impossible to predict how governments and hardware companies will regulate crossplay. This would enable us to respect crossplay restrictions while giving players the best experience. In the meantime I may need to disable Xbox support for my experience.

Here’s a related post from a few years ago that describes the problem and includes a repro.