It’s difficult to provide users with a smooth friend-joining experience when using reserved servers. If a user tries to join a friend’s game they will get this error:
There is no way for the user to know it’s going to fail. They pressed “Join” on the website and expect to join that friend’s server.
The behavior I need is for the user to be sent to the game’s start place with player.FollowUserId set. My code can then try to resolve where their friend is via TeleportService:GetPlayerPlaceInstanceAsync and check their custom in-game follow permissions while providing the user with relevant information and options.
Of course most experiences aren’t going to do all that. There are still many ways this problem could be fixed:
There could simply be a button to join the start place instead of just “Leave” on the “Join Error” prompt. This way the player knows that they might not end up with their friend.
There could be a place setting to specify how to handle this case, with the requirement that the start place should at least tell them how to join their friend once passed there. Perhaps players could be allowed to join reserved servers directly from the website based on a setting.
There could be optional settings/arguments to TeleportService:ReserverServer and TeleportService:TeleportAsync that make it so players can join directly or be sent to the start place.
There could be a callback similar to game.OnClose and MarketPlaceService.ProcessReceipt, but for TeleportService. This callback could be invoked on the friend’s server so it can verify that the friend is okay with being followed, and perhaps even yield to load the player’s save and decide what to do without them ever needing to connect to the server. If yielding is allowed, there could be a way to respond with progress or localized response, like whether they’re waiting for the friend to respond to a prompt. It would return a result specifying whether that player should join the friends server, whether they should join a place, or provide a server access code.
There has been a lot of push toward making it easy to join friends and have accessible private servers. I want to deliver an accessible experience to players, while being able to meaningfully control servers and matchmaking.
Bumping and tacking on to this because I’m having this issue under certain circumstances.
The current behavior follows this suggested behavior (following a player who is in a reserved server will dump you into the start place) UNLESS the reserved server has the same PlaceId as the start place. In that situation, the player attempting to join receives and error and does not join the game.
In our project, we use the same place and codebase for our lobby AND the reserved servers so that we only need to maintain one codebase and set of assets. Non-reserved servers will simply load the lobby map instead of the gameplay map. Because of this teleport issue, we now have to publish to two identical places in the same game just so we can have the Follow-Friend-Into-Reserved-Server behavior, which then requires us to bake the PlaceIds into our code, which makes it harder to use separate places for testing big updates.
The ideal behavior is that regardless of the PlaceId, a player following a reserved server should be dumped into a standard server in the start place.
This is still a huge problem for my project. Lots of players reporting issues with this over the last few years. I’d honestly be okay with the player connecting to the server if there could be some kind of setting. I could handle it from there.
As a developer this would be a really useful option to have.
I’m currently working on a lobby system that utilizes reserved servers for different modes, and players being unable to join each other is pretty much the only downside I am experiencing.
Having the players be forwarded to the main place or some callback like the OP mentioned would be extremely convenient.
I would also like this but in my case I create reserved servers for the same place id and I would like the option to just send the joining player to the same placeid but different server and then I could use player.FollowUserId to check what server they are trying to go and check if they are allowed to and then teleport them.
Would be cool if I could send them to a designated place upon joining a friend. That way I could make that place specifically for verifying they are allowed to join the server.
Any game that relies on reserved servers is extremely limited by not giving the developers a way to let friends follow each other.
The only real workaround is to add a way to follow your friends from the main game, but most players won’t think to join the main game.
I really think either a place setting of “Allow following into reserve servers”, or some sort of in-game callback that can handle if following is enabled in a server or not should be implemented.
I’d really love to see some developer feedback on this. Are there any engine limitations that cause this to be an issue?
Just ran into this issue as well. I expected players to be redirected to a public server so that I can use Player.FollowUserId to send them where they need to go, but they get disconnected from the game instead because the reserved server is created with the root place’s ID.
Sending the player to a public server would resolve this, or there could be some functionality to allow joining into a reserved server from the website.
This is a needed feature. We utilize reserved servers a lot in our game so restricting friends from following players in reserved servers is detrimental.