Im making a matchmaking on my game and have no choice to make my game not playable on Xbox…
Roblox has recently added PlayStation support. With that, I assume some code changes have been made on this front. Any of them serve as a workaround to this problem?
Thanks Defaultio for bringing this up at RDC.
We checked in with the product owners and can confirm again that this is a known limitation that they haven’t been able to prioritize yet. We understand the concern here and we discussed briefly about some solutions. Unfortunately it is not yet on the roadmap yet to resolve.
I’ll check in again since @Cindering brought it up recently. The best thing to do at this time is to let other creators know to post their concerns in this thread, it will help with ability to prioritize since there is insignificant work here to resolve on our side.
Adding on to this again since I’m trying to develop another new system that uses Reserved Servers, but because crossplay-disabled players can cause duplicate servers with the same ID to be created, this makes it extremely difficult to account for all the different edge cases that can occur.
Without this being resolved, I will have to resort to even more hacky solutions to try and protect against data corruption. And without any way to determine which players have cross-play disabled, I will just have to restrict all Xbox/PlayStation players from freely joining reserved servers, leading to a worse experience for everyone.
Under normal conditions, only one Reserved Server of a particular ID can exist, and if you try to teleport to a Reserved Server that’s already full, you’ll get an error.
This seems like the natural and expected behavior for reserved servers, so it’s frustrating that crossplay-disabled players introduce an exception to this natural rule.
The fact that players with crossplay disabled can create a duplicate instance of a server introduces a bunch of extremely nasty edge cases that devs are forced to deal with. For example:
- If you’re doing matchmaking and want to create a reserved server which will host the match and then report the results, this could be screwed up by a crossplay-disabled player joining a duplicate instance of that server, playing their own match with the same ID, and causing invalid results to be reported.
- If you want players to have a single reserved server where they can build things together and save their progress to that server, their data could be corrupted by someone else creating a duplicate server, causing the original server’s changes to be overwritten by the duplicate server.
It should never be possible under any circumstances to start a duplicate instance of the same Reserved Server. If a player tries to join an existing Reserved Server that isn’t compatible with their cross-play settings, they should simply not be allowed to join, just like the standard behavior would lead you to expect.
Ideally, we should also be able to determine if a player has crossplay enabled or not, so we can appropriately manage which servers those particular players have access to without damaging the whole experience for all console players.
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 had to remove Xbox support for my game years ago because it completely broke my server joining system for all users.
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.
Just discovered this cursed behavior today.
This is being used to exploit our game that relies on each team having 1 reserve server. We didn’t know it was possible to have 2.
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.