TeleportPartyAsync error: Doesn't support a guest

TLDR-
– the code below makes the teleportation happen but only if there is one player on the server

local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")

local TransporterDisk = script.Parent
local placeID = -- bigger than zero number here

local function TeleportEverybody()
	local everyone = Players:GetPlayers()
	TeleportService:TeleportAsync(placeID, everyone)
end

TransporterDisk.Touched:Connect(function(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
	print("teleporter disk got touched yo")
		TeleportEverybody()
		end
end)

TeleportService:TeleportAsync is not working for me if there is more than 1 player on the server.
If a player leaves the game so that only one person is on the server, then the teleport will work.

I’m passing TeleportAsync (not the old party call) an array (Players:GetPlayers()) but it does nothing if that table has more than one player in it.

I’m really confused because I’m not even using “TeleportPartyAsync”. But if I was, why wouldn’t it support the teleportation of a guest? It seems to contradict the “party” word in the function title. I get that error message when using the TEST tab in Studio.

I simply want to teleport everyone in the game lobby /starter place to a different place in the same published, public experience when a part is touched or a click detector is clicked.

I thought maybe I wasn’t sending an array so I had it print the length of the array before calling the teleport and tested it with 2 players in studio to see what was happening. It printed an array length of 2 before giving me the No guests allowed in the party error.

But I’m not using the party call because the documentation says to just use the all-encompassing “TeleportAsync”. So that’s what I’m using. And it works in the live game, but for one player only.

Fortunately, I have an extra old machine so I can test this live in-game using separate clients.

My starter place is a lobby with a model that is meant to send everyone in the game to a different place (within the same experience) when a part in the model is touched by any player. My teleportation script (which works in-game for one player only for some reason) is a server script parented to a part in the workspace.

It works in the published public game when there is only 1 player in in the lobby/starter place. When the lone player touches the part, the teleportation to the specified different place (within the same experience) happens.

I tested this in a published public game and it teleported me to the other place as I expected, so I thought my test was a success and it was all good to go.

However, it failed when playing the live game with a friend.

It seems that when there are two players in the game /lobby, then nothing happens no matter who touches the part. No teleportation occurs at all.

In Studio, during Play Solo, when I touch the part meant to move everyone, I get the “raiseTeleportInitFailedEvent: Teleport failed because Cannot Teleport in the Roblox Studio. (Failure)” and “… exception while signaling: Cannot Teleport in the Roblox Studio” errors as expected.

When I use the TEST tab in Studio with 2 players, I get the error in the title of this post - “TeleportPartyAsync error: Doesn’t support a guest.” when I touch the part.

Weird because I’m not using the old TeleportParty in my script.

I’m using TeleportAsync on TeleportService and passing it a table - Players:GetPlayers().

I must be doing something wrong, but I just can’t figure out what it is.

Why does the teleport happen with only one player?

Instead of a touched part I put a click detector in a part and got the same results. These are server scripts in the workplace calling teleport service, and it will move a lone player to the new place, so I can’t be mistakenly trying to teleport from the client. I don’t think it is a touching issue because the click detector works as well (but only with 1 player on the server) I turned on 3rd party teleports but that shouldn’t matter because I’m teleporting to different places within the experience.

I need some different eyes on this, please. After more than 5 hours of troubleshooting and testing I am at a total loss. I just can’t seem to create the most simple, basic lobby. I’m not using any options on the teleport. I can’t see what I’m doing wrong.

1 Like

If anybody wants to tackle this puzzle, I would really appreciate some help on a solution.

edit - removed the uploaded rbxl file as it got old so I just made the test place /game itself downloadable /editable.

While waiting for some advice, what I will try is using an Event to call the teleportation. Maybe I need a server script in ServerScriptService to call TeleportAsync? Is that what it means to say that the client can’t call the teleport? I thought that just meant that a local script cannot use teleportservice.

Since I’m not using any local scripts for this, I guess I will try a Bindable Event to call TeleportAsync? Anyway, I have yet to try that. In the meantime, if anyone can check it out – The rbxl file and the live test place above are in this reply exactly as described in my original post. (The teleport simply goes to a grassy field place, called by a touched event - within the same “Teleportation Test” experience of course) And it does do the teleport - but only if all other players leave the server so that a single player can touch the part while alone.

If I get anything different trying to call TeleportAsync with a BindableEvent I will post here asap.

Are there any errors in the server console logs?

Most likely a generic error message, the reason why it talks about guests is that test players are not actual users and have a negative UserId.

2 Likes

That’s a great question! That data source completely slipped my mind. My investigation of this has entirely relied on the studio console. I should’ve realized how limited that is for investigating TeleportService.
I gotta open the dev console on the Roblox app ( i gotta pull my head out, geez loweez )
You’ve given me hope iKingNinja. I figure with more info I can solve this perhaps - I’ll report back in an hour or two after some more sleuthing.

Still scratchin’ my head. I think I’ve got the syntax right for this simple thing, so maybe I’m missing something about the situation. From the dev console I get the following:

TeleportPartyAsync error: The player[12345] is already in another teleporting party.  

--the specified player seems to be the first one on the server
--rather than the first who touches the part of clicks the button

A specified Member cannot join the Destination Place

Clicking the button only gives the second error message (it doesn’t specify who can’t go). Touching the part also gives the party fail msg.

Strangely, if I leave the experience and come back to it as the second player on the server, numerous clicks and touches produce nothing in the dev console. No messages at all. Yet I know the scripts are still on because if the other player leaves and I click while alone, the teleportation happens.

I see where the error is coming from: teleports are not instant, they take some time. However you’re calling the teleport function on every touch event, walking on a part fires tons of them hence why you’re getting the error that the player is already in another party. I’m not sure if this is the reason why the second player is not being teleported, but try adding a table that saves players already being teleported like this:

local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")

local TransporterDisk = script.Parent
local placeID = -- bigger than zero number here

local playersInTeleport = {}

local function TeleportEverybody()
	local everyone = Players:GetPlayers()
	TeleportService:TeleportAsync(placeID, everyone)
end

TransporterDisk.Touched:Connect(function(hit)
    local player = Players:GetPlayerFromCharacter(hit.Parent)

    if not player or table.find(playersInTeleport, player.UserId) then return end

    table.insert(playersInTeleport, player.UserId)

	print("teleporter disk got touched yo")
	TeleportEverybody()
end)

You’ll want to remove the player from the table once they leave the server.

I really appreciate your input, iKingNinja. Unfortunately, your script did not work. I tried it even after failing with a debounce and a similar failure with a button instead of a touched part (from a few hours ago).

However, your script did change something, as now the part touched gives only one error message - the same one as the part with the click detector …

Error --   A specified Member cannot join the Destination place. 

Earlier, when concerned about all the touch events firing, I put in a debounce but that had no effect. Then, I used basically the same script for a click detector. A single mouse click cannot teleport both players. In trouble shooting this, I found a video on youtube that uses a screengui button, but the code is the same as mine for a teleport via clicking. I don’t know why it doesn’t work.

At this point, I would quit on getting a group teleport to happen via part touching, but I can’t even get a simple button to teleport a group.

As at the top of this page, the following code makes the teleportation happen but ONLY if there is one player on the server.

local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")

local TransporterDisk = script.Parent
local placeID = -- a number bigger than zero

local button = script.Parent.ClickDetector

local function TeleportEverybody()
	local everyone = Players:GetPlayers()
	TeleportService:TeleportAsync(placeID, everyone)
end

button.MouseClick:Connect(function()
		print("teleporter button got clicked yo")
		TeleportEverybody()
	end)

Not a lot of lines to this script. Just looking at it, how many developers would bet that it works? Well, I keep losing the bet because I think the syntax is straightforward, but click the button and teleportation happens only if 1 player is on the server with the button. More than that and it’s a no go for all. You can copy/edit the test game I published. (I’ll remove the file in that post as it is old and lacks the button)

1 Like

I’m starting to think this is a Roblox issue, other people are getting the same error message. Moreover yesterday I tried using the new Roblox party feature and I was getting the same error message. I think it’s worth investigating this further and then possibly report it as a bug since we’re lacking any more in-depth information about the “A specified Member cannot join the Destination place.” error message.

I have reason to believe this as it was already reported as a bug two years ago:

I just want to run some checks, can you share your main place ID?

I tested this personally and can confirm this is a bug. The error is thrown whenever you attempt to teleport more than one player. I will report this as a bug.

1 Like

Sure, please do check it out. The teleport destination place in my Teleport Test experience is nothing more than the grass field template. I’m glad you mentioned that other recent post. Even if it is not a bug, at least now I feel willing to suspend my efforts for the day so that I can get some sleep.

I don’t have anywhere near enough street cred to report a bug. But anyone can take the rbxl file from the game page if they want to try reproducing the issue for themselves (and report a bug)

The main place id is: 84879749364922

Thanks for your efforts iKingNinja.

1 Like

I opened a bug report

2 Likes