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

How to make mini npc's follow you?

Asked by 8 years ago

So this is my script on what I did to make some npcs to follow me. But when I tested it all the npc did was fling then get up and he didn't follow me.

players = nil; dummy = game.Workspace.CitizenLvl1; currentPlayerFollowing = nil;

while wait(1) do players = game.Players:GetChildren();

for i = 0, table.getn(players), 1 do if (players[i] ~= nil and (math.abs(players[i].Character.Torso.Position.X - dummy.Torso.Position.X)) <= 10) then
currentPlayerFollowing = players[i]; m end end

if (currentPlayerFollowing ~= nil) then dummy.Humanoid.WalkToPoint = currentPlayerFollowing.Character.Torso.Position end end?

So anything I can do to fix it?

1 answer

Log in to vote
1
Answered by
Scarious 243 Moderation Voter
8 years ago

I recently had this issue aswell, but only because I had never used npc's. Changing their walktopoint won't do anything, (No reason why)... But moveto() will. If your npc is flinging, it is likely because it is connected to the baseplate, try changing the npc's legs bottom surface to "Smooth" or "SmoothNoOutlines".

Requested Fix Code:

players = nil; dummy = game.Workspace.CitizenLvl1; currentPlayerFollowing = nil;

while wait(1) do 
    players = game.Players:GetChildren();
    for i = 0, table.getn(players), 1 do 
        if (players[i] ~= nil and (math.abs(players[i].Character.Torso.Position.X - dummy.Torso.Position.X)) <= 10) then --[[ It would seem also, you are not getting the magnitude here. See improved corrections below, since it will only go if the x and not z is closer. ]]
            currentPlayerFollowing = players[i]; --[[m]] --[[ Is 'm' intended here? ]]
        end 
    end

    if (currentPlayerFollowing ~= nil) then 
        dummy.Humanoid:MoveTo(currentPlayerFollowing.Character.Torso.Position)
    end 
end

Now, as far as improved code goes, I will now provide extra details to your code.

Improved+Details:

players,dummy,currentPlayerFollowing = nil,game.Workspace:WaitForChild("CitizenLvl1"),nil --[[ You can separate variables by commas and use them in one quick and easy variable list. x,y,z = a,b,c  x will be a, y will be b, z will be c. ]]

while wait(1) do
    players= game.Players:GetChildren()
    for i=1,#players,1 do
        if (players[i]~=nil and (players[i].Character.Torso.Position - dummy.Torso.Position).magnitude<= 10 then --[[ Magnitude will detect if the player is within a 10 stud radius, in this case.]]
            currentPlayerFollowing= players[i]
        end
    end

    if (currentPlayerFollowing~=nil) then
        dummy.Humanoid:MoveTo(currentPlayerFollowing.Character.Torso.Position) --[[ MoveTo is like changing the WalkToPoint, but it actually works... ]]
    end
end

Improved(RAW):

players,dummy,currentPlayerFollowing = nil,game.Workspace:WaitForChild("CitizenLvl1"),nil

while wait(1) do
    players= game.Players:GetChildren()
    for i=1,#players,1 do
        if (players[i]~=nil and (players[i].Character.Torso.Position - dummy.Torso.Position).magnitude<= 10 then
            currentPlayerFollowing= players[i]
        end
    end

    if (currentPlayerFollowing~=nil) then
        dummy.Humanoid:MoveTo(currentPlayerFollowing.Character.Torso.Position)
    end
end

~Taryo

0
Thanks Taryo it worked! nerdzo01 0 — 8y
Ad

Answer this question