Our game has a custom loading screen between teleports. According to our poll results, around ~25% of people (around 10k ccu average) are sometimes or multiple times getting stuck during the teleport. They have said that they arent able to press escape to open the roblox menu at all, meaning it’s getting stuck somewhere during the internal teleport. We have checked error reports, but they havent given us much of an idea of the underlying problem.
Unfortunately, we don’t have enough information from your report to locate the cause of this issue.
Could you please provide more information, like the crash log or error reports you mentioned, a video or some other thing that would help us investigate? I tried to reproduce this issue within the experience myself but wasn’t able to.
If you need more info about which info/files might be useful for us and why, check the How to post a Bug Report.
Thanks for the response! I was hoping you would be able to see some internal details that we’re not able to see, but here are the error logs filtered with Teleport in them. They haven’t been of much help, though.
It’s a bit hard to reproduce since it’s inconsistent but players have reported that it has started happening after a couple of matches played. They will get stuck on the custom loading screen provided in the main post. For now though, we’ve disabled the custom loading screen in hope to get more information.
Sadly we don’t have any videos of it at the moment but I will be trying to get one. Is there anything else I could do to help you track it down?
I’ve been able to get 2 clips of the issue so far.
Code for the TeleportInitFailed event:
TeleportService.TeleportInitFailed:Connect(function(player, teleportResult, errorMessage, placeId, teleportOptions)
self._notificationService:Push(player, {
Duration = 15,
Message = "That's no good. We're going to try that again...",
})
if teleportResult == Enum.TeleportResult.Flooded then
task.wait(FLOOD_DELAY)
elseif teleportResult == Enum.TeleportResult.Failure then
task.wait(RETRY_DELAY)
else
-- if the teleport is invalid, report the error instead of retrying
warn(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
self:_OnTeleportFailed(player)
return
end
self:_TrySafeTeleport(placeId, { player }, teleportOptions)
end)
Code for the _TrySafeTeleport method:
function TeleportServiceServer._TrySafeTeleport(self: Types.TeleportServiceServer, placeId: number, players: { Player }, options: TeleportOptions): boolean
local attemptIndex = 0
local success, result -- define pcall results outside of loop so results can be reported later on
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleport the user in a protected call to prevent erroring
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- stop trying to teleport if call was successful, or if retry limit has been reached
if not success then
warn(result) -- print the failure reason to output
end
return success
end
All teleports are initiated using the _TrySafeTeleport method.