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
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