Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Teleporting All Players with CFrame??

Here is my script to teleport all players to a certain location.

game.Players:GetPlayers().CFrame = game.Workspace.NPC.Harold.Head.CFrame

Doesnt work, doesnt do anything, nothing in output, but the script continues after it instead of breaking

2 answers

GetPlayers() returns a table, and tables don't have a CFrame property. You need to get the objects stored in that table to access their properties. We therefore must use a for loop.

Your second problem is that Players don't have a CFrame property either. We must get their character's torso, and set the CFrame of that.

--pairs() is just a function that is used to loop through a table. Value is the current value, or the player we are currently at. Index is the current index, but we won't be using it. 
for index,value in pairs(game.Players:GetPlayers()) do
	value.Character.Torso.CFrame = CFrame.new(0,0,0)
end

Just remember that this will throw an error if Character or Torso doesn't exist, so you may want to add in some extra checks in the future.

Hello, that line of code wont work, and shouldn't be working. You're creating a table then CFraming ithe table to a CFrame. Are you mad?(lol)

I made a while loop so it would transport all the players every 5 seconds.(The waiting delay I put in). I then created my players table which is a list of all of the players in the game. After that, I created a for i, v in pairs loop which basically runs the amount of #players their are in the list. I then waited until the character was there. After that, I made sure a few elements of a character were there and not nil by creating variables and using an if statement. Afterwards, I used the MoveTo() event to position the players character.

You can read more about for pairs loops here. Read on tables here

The script should look like this.(You can take the while loop out if needed, but I expected it would be for a gameloop)

while(true) do
local players = game.Players:GetPlayers()
wait(5)
for i, v in pairs(players) do
	if(v) then
		repeat wait() until v.Character
		local head = v.Character:FindFirstChild("Head")
		local humanoid = v.Character:FindFirstChild("Humanoid")
		local torso = v.Character:FindFirstChild("Torso")
		if(head and humanoid and torso) then
			v.Character:MoveTo(game.Workspace.NPC.Harold.Head.Position)
			end
		end
	end
end

If you really love CFrame, you can use this code for the CFrame instead of the MoveTo() event.

while(true) do
local players = game.Players:GetPlayers()
wait(5)
for i, v in pairs(players) do
	if(v) then
		repeat wait() until v.Character
		local head = v.Character:FindFirstChild("Head")
		local humanoid = v.Character:FindFirstChild("Humanoid")
		local torso = v.Character:FindFirstChild("Torso")
		if(head and humanoid and torso) then
			torso.CFrame = game.Workspace.NPC.Harold.Head.CFrame
			end
		end
	end
end

1 comment

0

Try to stick to the specific question and its problem instead of writing a bunch of your own code - it often only confuses the asker.

This discussion is preserved as it was. New answers, comments, and votes are closed.