I had no idea this was a thing!! That’s super dangerous.
This was likely responsible for a slow memory leak buildup we had in one of our games with matchmaking.
Not even giving devs the ability to check if a player has Cross-Play enabled is a huge misstep. Your only option as a developer is to accept broken IDs, or disable console support.
I feel awful about this. This is just the last month. It’s been over 3 years.
If I add Xbox support back, there will be two servers created with the same JobId. It is impossible to differentiate these servers, or know which one players will go to. When these servers try to make themselves accessible via MemoryStores or MessagingService, they overwrite each other. Then when I try to send players to one of them using the access code, it will fail randomly. A single Xbox user can cause my entire joining system to break. There’s no way to test this. Teleports just randomly start failing.
This is not just a small bug or minor questionable design decision. This is serious and broken. It has been like this for far too long.
I made a feature proposal years ago. It’s a decent solution:
The combined amount of player visits from people complaining about this issue is over 2 billion. Is that not enough to warrant a simple API addition after several years of complaints? There is no solution for this right now.
I’d like to also state that two different top experiences I work for, Peroxide and Grand Piece Online, both use a server list and matchmaking system that deals with this problem as well. Peroxide supports console and if users turn off cross-play it creates servers that show up over the original server with a server that is restricted from normal users. We get reports from our user-base that they cannot join a lot of servers off the server list as they’re greeted with a restricted server error message (That we cannot add checks for since there is no way to detect a “XBox” server). So we either support console (Which we decided to do with Peroxide) and ruin it for a lot of players not on console or drop console support (Which Grand Piece Online does) to prevent this issue from happening, both really suck for the experience and the players.
This is currently plaguing Arsenal and will even more so in the near future due to some features we’re releasing based around reserved servers.
With no way to tell whether a server is cross-play enabled or not, we risk cross-play disabled servers being sent to other platforms and vice versa, resulting in poor UX with our server browser.
We also store data based on a reserved server’s id for persistent settings, however with two separate versions this will result in the same key being accessed twice, being overwritten by either server.
Two methods would completely resolve this issue:
Player:HasCrossPlayEnabled(), so we can show accurate results in a server browser based on if a user has cross-play enabled.
DataModel:IsCrossPlayEnabled(), so we can append a prefix to any datastore keys, or adjust game logic accordingly, if we’re in a cross-play disabled server.
While being able to just have a “No Cross-play Compatibility” setting per universe would be far better, these methods provide the best UX and solutions to most issues.
Adding onto this, the functionality of a ReservedAccessCode creating a duplicate server should be outright removed, and should send a ‘Unable to teleport to crossplay server’.
Then developers can deal with the error message.
I understand Roblox has a roadmap system, so a quick temporary fix is to disable duplicate server and throw us devs a ‘no cross compatibility’ error.
For developers:
It could be theoretically possible to work around this issue (but very hacky). Instead of relying on jobid to identify a unique server, you instead check the player list.
On server creation (via ReservedAccessCode), you keep track of all the players currently in the server and store it in memory service.
Then on new player joins, the server script checks that it’s player list matches what is stored in memory service. If not a single player matches what is stored in the memory service player list, then DING DING DING, Duplicate server detected.
On the other side (such as a no cross play player creates the server), if high number of teleport errors is detected by non-console players, then ASSUME it’s either a broken server, or no cross play only server. On that assumption, remove it from server list for non-console players.
This behavior is preventing a lot of games which have an active server join system in their lobbies implementing console support. Games: Medieval RTS, Mini Empires RTS, The Conquerors 3 and much more.
this is a huge discrepancy and needs to be addressed as soon as possible by Roblox, we need a way to check if a player on console has crossplay disabled.
checking if a player has crossplay enabled would allow developers to separate their lobby servers with other player’s servers, but then those players would never find a match to play in.
If those players chose to disable crossplay then why are you concerned with trying to bypass it? If there are a lack of players in the game on Xbox, and they chose to disable crossplay, that’s not on the developer. The bigger issue on what actually happens without the ability for devs to check if crossplay is enabled per player was already discussed in the replies of this thread
A solution would likely need to work better than just having developers do the work of checking if a player has crossplay enabled or not. If a PS5 player and an Xbox One player both have crossplay off, I don’t believe they go into the same servers. If they do, it’s still possible a future supported platform won’t work like this. That means there’s potential for two users to have crossplay off and also still be ineligible for the same servers.
We need a solution that scales better and is future proof. A solution which after we work with it, our code should work for any future platforms Roblox is supported on.
I’m not sure what your point is here. Roblox has no choice but to place console players (i.e. Xbox) into separate servers if crossplay is disabled. There is no other possible solution I can think of that can scale well. Otherwise, having the ability to check if players have crossplay disabled is absolutely the best way for devs to handle these cases for custom matchmaking implementations.
Below is one example of the problem explained by someone else so you don’t have to take my word for it.
The best solution I’ve seen proposed so far (which I know I’m repeating) has been to add some kind of CrossplayId, which a developer can include within their matchmaking algorithm. In my case, it would allow me to append the id to a string that I use to search for open servers. It seems the most simple and straight forward.
But anything would be better than the current situation; a user with cross-play disabled has the potential to essentially brick a game that uses a custom matchmaking system.
If the game doesn’t have thousands of players, then console players who have crossplay disabled will never find a match to join and will not understand why, I think the option should be developer controlled unless it’s an XBOX guideline to have an option like this.
It is most likely Xbox guideline. Roblox didn’t make the current annoying functionality just for fun or something. So, the question is how can we have a middle ground that keeps Roblox in compliance with this guideline and make it acceptable for the developer. There are no perfect world solutions, i’d refer to the responses above such as from joesmaller.