Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Trying to tele player on touch but says HumanoidRootPart is not a valid member?

Asked by
tjtorin 172
6 years ago

I just want to teleport the player to its spawn when it touches a brick but I am getting the error humanoid is not a valid member of MeshPart Code:

function touch(hit)
    humanoid = hit.Parent.HumanoidRootPart
    hit.humanoid.CFrame = CFrame(game.Workspace.SpawnLocation.Position)
end
script.Parent.Touched:connect(touch)

2 answers

Log in to vote
0
Answered by 6 years ago
Edited 6 years ago

There are a few problems; let's go through them in order.

1.

:connect() is now deprecated (this may not work as expected and could be removed at any time). Instead, use :Connect(). The difference is capitalising the C.

2.

As DemonizedOverlord said, you need to check for the HumanoidRootPart before actually getting it, as it will error if you try to get something that doesn't exist.

script.Parent.Touched:Connect(function(Hit)
    local Root = Hit.Parent:FindFirstChild("HumanoidRootPart")
    -- Save it to a variable so you can use it later on quickly

    if Root then
        -- Do stuff with Root
    end
end)

3.

There is no need to add a hit. before using the humanoid variable (AKA Root in my code).

This will just make the code look for a child named humanoid inside hit, which isn't what you want, and will usually throw an error.

Root.CFrame = Value

4.

You did not create a CFrame correctly. You must use the CFrame.new() function, not the library (table) it is stored in.

script.Parent.Touched:Connect(function(Hit)
    local Root = Hit.Parent:FindFirstChild("HumanoidRootPart")
    -- Save it to a variable so you can use it later on quickly

    if Root then
        Root.CFrame = CFrame.new(game.Workspace.SpawnLocation.Position)
    end
end)

Hope I helped!

~TDP

0
ty tjtorin 172 — 6y
Ad
Log in to vote
0
Answered by 6 years ago
Edited 6 years ago

You have to check if humanoid exists otherwise it will run the function if a part touches it and it will check for humanoid in the part.

Edit: I noticed a mistake my bad.

function touch(hit)
if hit.Parent:FindFirstChild("Humanoid") ~= nil then
hit.Parent.HumanoidRootPart.CFrame = CFrame.new(Vector3.new(game.Workspace.SpawnLocation.Position))
end
end
script.Parent.Touched:connect(touch)
0
A lot of things there are still wrong TheDeadlyPanther 2460 — 6y
0
yeah it does not work tjtorin 172 — 6y
0
It should now RequiredModule 38 — 6y
0
No, it still won't - you can't put Position into a Vector3, as it already is a Vector3. Also, think about 'hit.humanoid' for a second, as that is not right either. Check my answer for solutions. TheDeadlyPanther 2460 — 6y

Answer this question