Hello, i've recently been trying to get into scripting and as i am new to it, i don't understand most things. I've been trying to make a script that teleports you to a **XYZ ** position and sets your walkspeed to 0 when you die. I really don't understand what i did wrong i've searched the internet but the best thing i can do is just ask here.
game:GetService('Players').PlayerAdded:connect(function(player) player.CharacterAdded:connect(function(character) character:WaitForChild("Humanoid").Died:connect(function() Humanoid.Walkspeed = 0 end) end) end) function Teleport() x = target.-23.56 y = target.0.5 z = target.-0.615 game.Players.LocalPlayer.Character:MoveTo(Vector3.new(-23.56,0.5,0.615)) end) end) end) if Humanoid.Walkspeed = 0 then Teleport()
I know i've messed up a lot of things in this, but i am looking for help. Thank you for your attention.
The logic you are displaying is promising. However, there are some issues that I will try to resolve in my answer. It appears you are using a server script which cannot access the LocalPlayer. You can teleport the player inside of the .Died event. Because the script runs all the way through at the beginning of the game the if statement will only check once. Also, it is not a really efficient way to check and see if they died. I do think you are on the right track. If you create variables for x, y, and z you should use those variables instead of typing out the values all over again. After all my comments this is kind of what I recommend:
local players = game:GetService('Players') -- I always create a variable in case I need to use it again players.PlayerAdded:Connect(function(player) player.CharacterAdded:Connect(function() -- Use :Connect, :connect is deprecated and should not be used local humanoid = character:WaitForChild('Humanoid') -- just a variable so I can use the humanoid again when I want to teleport the player humanoid.Died:Connect(function() humanoid.HumanoidRootPart.CFrame = CFrame.new(x, y, z) -- the x, y, and z that you choose end) end) end)
I hope this helps and have a great day scripting!
So there are a few things wrong with your script, Let's break it down:
game:GetService('Players').PlayerAdded:connect(function(player) player.CharacterAdded:connect(function(character) character:WaitForChild("Humanoid").Died:connect(function() Humanoid.Walkspeed = 0 end) end) end)
This part is fine, but the only thig you change is "Walkspeed" to WalkSpeed" with capital S.
function Teleport() x = target.-23.56 y = target.0.5 z = target.-0.615 game.Players.LocalPlayer.Character:MoveTo(Vector3.new(-23.56,0.5,0.615)) end) end) end)
The first problem with this part is the x,y,z variables, what is "target."? If you want to make a varibale with a position, I suggest you doing something like so; Pos = Vector3.new(0,0,0)
. And assuming this is in a normal Script, you can't use game.Players.LocalPlayer
. That only works in a LocalScript
. And another thing is that you dont need all those ends. Just one end without the ")".
if Humanoid.Walkspeed = 0 then Teleport()
And this part is really unneeded, you can just call the function Teleport() inside the Humanoid.Died Event. And to check if something is equal to 0, you would do ==
not =. I suggest reading this.
Here is a fixed version of your script:
game:GetService('Players').PlayerAdded:connect(function(player) player.CharacterAdded:connect(function(character) character:WaitForChild("Humanoid").Died:connect(function() player.Character.Humanoid.WalkSpeed = 0 Teleport(player) -- Calling the function Teleport() and sending the Player who died to the Function end) end) end) function Teleport(player) -- Now we got the Player that died. player.Character:MoveTo(Vector3.new(-23.56,0.5,0.615)) end
If this didn't make any sense, let me know so I can try to explain some more.