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.
Hi, I’m from the Consoles team. We need to do some investigation with Microsoft and Sony technical requirements to see if the cross-play setting is something we can share with developers, as it’s usually only available for a user. I’ll also follow up with Matchmaking to ask about what solutions they thought of and whether sharing the cross-play setting would be okay. The cross-play setting is something we already have set up in the backend, so I feel like most of the concern on our side will be whether it’s something we can provide.
Why would we not be able to access that information? Personal info concerns? I ask because from our PoV, this seems like a necessary piece of information to develop a game cross-platform, just like knowing what the user’s current input device is.
Probably same reason chat got disabled on Xbox a few years ago. Consoles are subject to a lot more regulation both from organizations like ESRB or PEGI, as well as self-imposed regulation by the likes of Microsoft of Sony than PCs or mobile phones ever will be. All these issues are a nightmare to get through and I don’t entirely fault Roblox for not being able to come to an agreement with Microsoft and Sony about this.
If it is not possible to provide this to developers, please at least look into implementing a toggle that completely blocks cross-play disabled players from joining reserved servers (kick them with a message like “please enable cross-play in settings”?). I know this seems like a nuclear option, but the current unchangeable behavior is worse and simply unacceptable for certain types of games.
Hi all, currently we’re looking at a solution where we add a field to the Player object that’s based on a user’s matchmaking context. This field has three options:
Default (PC, Mobile, crossplay-enabled)
Xbox Only
PlayStation Only
I believe this is better than providing a cross-play setting because it properly distinguishes between Xbox and PlayStation players as well.