Hello developers, This problem has been giving me a lot of trouble lately and all attempts to fix it have not worked.
When someone starts a new session of a lobby in my game, The data for that lobby becomes session-locked.
However, If the player is put into a new server either due to an error or Roblox’s own automatic server allocation then the game should automatically attempt to teleport the player to the correct server using the saved Reserved Server Access Code.
This has not worked at all as the teleport request will repeatedly put me in the wrong server which causes an infinite teleport loop (and a lot of client lag) until the client is automatically disconnected. (Client initiated disconnect.)
I have no idea what to do at this point as all of my attempts have failed completely.
The part of my script that handles this automatic teleport is below:
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerAccessCode = _lobbyData.reservedCode
local teleportData = {
joinedLobbyName = lobbyDataModule.getLobbyName()
}
teleportOptions:SetTeleportData(teleportData)
for _, player in game.Players:GetChildren() do
teleportService:TeleportAsync(game.PlaceId, {player}, teleportOptions)
print(_lobbyData.reservedCode)
end
Any help with this is greatly appreciated,
Thanks, MBroNetwork.
Edit: If the lobby is already full then it will throw the player back into the main menu place.
That might be the problem. Datastores take several seconds to store data compared to memory stores, and during the save process you teleport and then the server shuts down, leaving no time to save the data.
local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")
local code = TeleportService:ReserveServer(game.PlaceId)
local players = Players:GetPlayers()
TeleportService:TeleportToPrivateServer(game.PlaceId, code, players)
-- You could add extra arguments to this function: spawnName, teleportData and customLoadingScreen
PS : Note that based on TeleportOptions | Roblox Creator Documentation your approach should work. Maybe this part of the script is triggered even when the player joins the right server. Do you check that the user is not already in reserved server before teleporting him? local isReserved = game.PrivateServerId ~= "" and game.PrivateServerOwnerId == 0 from TeleportService | Roblox Creator Documentation
It actually might be that which is causing it, I was already planning on using Memory Stores but have no clue where to start with them.
Edit: I’m not 100% certain that this is causing it as the reserved server access code is saved correctly according to all my debugging efforts thus far.
I did notice some unusual behavior with my reserve system which shouldn’t occur where it just created a public server instead of a reserved/private server like it’s intended to, It’s possible that the private server teleport is valid but the actual server that’s active is not.
I do check if the server is a reserved server, However, I’m noticing some very unusual behavior where the server seems to just be a standard public server instead of it being a reserved server like it’s supposed to be.
I’ve fixed the issue, I recently changed the way that the Reserved Server Access Code is stored to a variable in the script that handles reserving a server.
However, Because I forgot to change the function for reserving a new server to update this variable, The server that was created was a standard server since there was no valid code to use which then also caused the automatic teleport to infinitely loop due to there being no reserved server to teleport to in the first place.
Thank you to those of you who tried to help me with this issue, I appreciate it a lot.