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

Can't get Humanoid:Touched to work for npc to player contact?

Asked by 4 years ago
Edited 4 years ago

The script below is a child of an npc. Basically I wanted to make it so that when the npc is touched by a player that it will stop moving to random parts. But when I found out that my script didn't work I just wanted to check if the npc would detected being touched in general and that didn't even go through.

local pathdeterminer
local npc = script.Parent
local humanoid = npc:WaitForChild("Humanoid")
local inbattle = false

while inbattle == false do
 pathdeterminer = "p" .. math.random(1,6)
    if(pathdeterminer == "p1") then
     humanoid:MoveTo(game.Workspace.Points.p1.Position)
     humanoid.MoveToFinished:Wait()
    end
    if(pathdeterminer == "p2") then
    humanoid:MoveTo(game.Workspace.Points.p2.Position)
    humanoid.MoveToFinished:Wait()
    end
    if(pathdeterminer == "p3") then
    humanoid:MoveTo(game.Workspace.Points.p3.Position)
    humanoid.MoveToFinished:Wait()
    end
    if(pathdeterminer == "p4") then
    humanoid:MoveTo(game.Workspace.Points.p4.Position)
    humanoid.MoveToFinished:Wait()
    end
    if(pathdeterminer == "p5") then
    humanoid:MoveTo(game.Workspace.Points.p3.Position)
    humanoid.MoveToFinished:Wait()
    end
    if(pathdeterminer == "p6") then
    humanoid:MoveTo(game.Workspace.Points.p4.Position)
    humanoid.MoveToFinished:Wait()
    end
    wait(0.5)
end

humanoid.Touched:Connect(function(hit)
    local check = hit.Parent:WaitForChild("Humanoid")
    if check ~= nil then
        print("TOUCHED")
        inbattle = true
    end 
end)

1 answer

Log in to vote
0
Answered by
megukoo 877 Moderation Voter
4 years ago

Remember that when using a loop, the loop will yield the current thread until it either finishes or it's condition is no longer met.

You can notice this here, as the code below will not run due to an infinite loop:

while true do
    print("i am infinitely running!")
    wait(1)
end

print("i'll never get to run because of that infinite loop...")

You can solve this by putting the humanoid.Touched portion of your code above the loop. Remember that you should keep infinite loops to a minimum when possible, and always place them at the bottom.

1
thank you! cyanslime123 23 — 4y
Ad

Answer this question