I am using a static reserved server access code with TeleportService:TeleportToPrivateServer to teleport players to a private server.
Expected behavior: All players will arrive in the same server. If the player is not able to access the reserved server because it is full or any other reason, the teleport fails. No more than one instance of the server is ever created in any condition.
Actual behavior: Users on xbox one who have cross platform disabled arrive in a different server from cross platform users.
Many games use reserved servers for persistent worlds, in which case there must only ever be one instance of each world. If multiple copies exist, then there will be two worlds trying to save conflicting states.
In addition to the world saving problem, in my game and other games with economies, this is exploitable to duplicate items that are intended to be sourced from singleton locations. This trivially easy and is achieved by:
Join a standard reserved server with other players in it
Put an item in a chest
Wait for world state to save
Rejoin that world in the duplicate xbox restricted reserved server
Remove the items from the chest so they are saved to your inventory
Rejoin the standard reserved server (this server never stopped running)
The item is both in the chest and in your player inventory
99% of reserved server use cases (for matchmaking) use the access code once for players already in the server and then throw it away. If the server is already platform restricted, there will be no problem.
For the cases where codes are saved and used continuously, most developers would accept a teleport failure in cases in which players do not have permission to join the server. This is consistent with behavior when teleporting to other invalid locations, and this is consistent with the expectation that only one server will be created with one access code.
Developers need access to an API to know if a server is restricted so they can handle these cases manually. This current automatic solution does not produce the result the developer intends, and if they had more information about the restrictions of the server they would be able to properly handle these cases.
Just was able to confirm this behavior in the repro place with the user who reported it. Interestingly, game.PrivateServerId matched for both users, despite being in different servers.
Is it agreed that this behavior is incorrect, or is intended and not considered a problem?
My project is a cross platform persistent world game. I cannot separate all Xbox players into a separate worlds without damaging the experience for these users.
I would like to be able to separate the Xbox users that have the cross platform setting disabled, but there is not currently a way to detect if a server is platform restricted.
Although I can’t do or say anything regarding this issue (and I wish I could), I have corrected the DevHub page to describe this behavior. I’ll watch this thread closely if any information comes up that ought to be in our API docs.
Sorry for the necrobump but this same issue persists and it is a big deal for my project. If this behavior cannot be fixed, I ask for a simple way to detect whether an xbox player has cross platform play enabled or disabled. WIthout this ability, I am forced to either prevent xbox players entirely from joining private servers, or always force xbox players to join a separate private server. In both cases, this hurts the (presumable) majority of xbox players who have cross platform play enabled and may want to play with their friends on other platforms.
I’m facing this same problem. I’m trying to put players into servers within the same place where the map is selected upon server startup. It is extremely problematic to have 2 servers created, to the extent where I’m considering disabling Xbox support. It would completely break server population management and add unneeded complexity to an already complex system. Perhaps the server itself could have a short string or number specific to the server group cross play is possible with. I could just add this to MessagingService topics and temporary OrderedDataStore keys when creating servers and have no problems.
Hey there,
I’m making a game that utilizes reserved servers for a server browser and absolutely need to be able to track player numbers within each server, just like you.
Due to this limitation in the Roblox engine, I am going to need to drop Xbox support for my game.
A simple API like player:IsCrossPlayEnabled() should be enough of a fix for the time being.
If Roblox ever adds additional isolated pools of players (such as Playstation players with crossplay off), something more robust will need to be implemented (probably an API that returns an enum for the player pool the player is in)
Just rediscovered this issue today when developing a matchmaking system for my game.
With the new MemoryStoreService, there’s tons of new possibilities for utilizing matchmaking/reserved servers, but it’s disappointing that this particular issue still hasn’t been addressed yet, as it’s a serious problem that opens up lots of avenues for data exploits/incorrect states if two servers with the same ID can exist at the same time. This behavior just doesn’t make any sense - if I’m calling ReserveServer, I’m naturally expecting that there should only be one instance of that server at a given time.
Because of this, and because there’s no API to detect whether a server is crossplay-enabled or not, I’m having to resort to a hacky workaround - if a server contains only Xbox players (determined by calling GuiService:IsTenFootInterface() on each client), then I have to assume it’s a crossplay-disabled server, and block players on that server from entering the matchmaking queue. This is a terrible practice which can result in false positives, and I wish Roblox would finally offer an official solution for this problem, especially if they’ll be expanding onto PlayStation/other consoles.
I’ve realised this flaw today as well when working on a “party mode” for my game.
Party mode aim is to teleport players into existing reserved servers, but if it is full or “unavailable”, it creates a new reserved server instead.
However each “reserved server” can change it’s state from “available” to “unavailable”.
With the current API for reserved servers, I can’t predict if a player will be teleported to a duplicated xbox server or to the existing crossplay server. It becomes even more messy since both servers can update the same “available”/“unavailable” state.
What makes this even worse is that I can’t use jobId (which is unique to every server) to teleport players to a specific reserved server, since reserved servers can only be teleported to via the reserved access code only.
This is definitely a major restriction that likely causes Xbox players to not be able to play with crossplay players, to the point of both of them needing separate experiences.
Would just like to add that this is still a pressing issue and the fact that this hasn’t even been looked at is hyper frustrating. If Roblox wants to expand their console install base they need to fix bafflingly obvious flaws like these…
A few weeks ago I disabled Xbox support for my experience. Players were having issues periodically where they’d get stuck when being sent to servers, and it appears resolved now that it’s off Xbox. This behavior is a serious oversight.
Access to a method like this would be a very welcome workaround to avoid the many data consistency problems arising from dual reserved servers. In my case, Xbox players will cause catastrophic problems unless I have a method to exclude non-crossplay players from joining. For now, I’ll have to forbid all Xbox players.
This issue has been unresolved for over 4 years now, for what should be an extremely simple fix (give us a simple method to detect if a user has crossplay enabled or not). All games with matchmaking systems that make an effort to support Xbox have been left with no choice but to severely degrade the Xbox experience because of this silly issue.
Sorry for the callout, but we really need this to be fixed. @goldzun
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?
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.