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

Please Help With Updating Pathfinding/Chase Script?

Asked by 6 years ago

Ok So I am trying to update my chase script for my zombies from the deprecated and older system of GetPointCoordinates() to GetWaypoints(). Right now my script works but as you can see in the script I have to tell NPC's to jump and to be honest it is not the best pathfinding script. If anyone has any suggestions, a better NEW pathfinding script or can help me re-code this I would be very grateful for the help. Thanks in advance.

workspace:WaitForChild("Wave0")
local p=game:GetService("PathfindingService")

p.EmptyCutoff=0.024



function addz(v)
    spawn(function()
        v:WaitForChild("Humanoid").WalkSpeed=16
        local parts={}
        local target=v.Head
                v.Humanoid.Died:connect(function()wait(5)v:Destroy().Parent=workspace.Wave0 end)

        while wait()do
            if v.Humanoid.Health==0 then break end

            if target==v.Head or not target:IsDescendantOf(workspace)then
                local r={}
                for _,v in pairs(game.Players:GetPlayers())do
                    pcall(function()
                        r[#r+1]=v.Character.Head
                    end)
                end
                target=#r>0 and r[math.random(1,#r)]or target
            end
            for _,v in pairs(parts)do v:health(-20)end parts={}
            local path=p:FindPathAsync(v.Head.Position,target.Position)
            if(v.Head.Position-target.Position).magnitude<3 and target~=v.Head then


            end
            local points=path:GetPointCoordinates()
            if #points>1 then
                for i=2,5 do
                    local part,point=workspace:FindPartOnRay(Ray.new(points[math.min(#points,i)],Vector3.new(0,0.5,0)))
                    local part,point2=workspace:FindPartOnRay(Ray.new(points[math.min(#points,i+1)],Vector3.new(0,0.5,0)))
                    local count=0
                    while math.min((point2-v.Head.Position).magnitude,(point*Vector3.new(1,0,1)-v.Head.Position*Vector3.new(1,0,1)).magnitude)>3 and count<50 do
                        count=count+1
                        v.Humanoid:MoveTo(point2)
                        if workspace:FindPartOnRay(Ray.new(v.Head.Position,CFrame.new(v.Head.Position*Vector3.new(1,0,1),point2*Vector3.new(1,0,1)).lookVector*4))then
                            v.Humanoid:MoveTo(point)
                        end
                        if workspace:FindPartOnRay(Ray.new(v.Head.Position,CFrame.new(v.Head.Position*Vector3.new(1,0,1),point*Vector3.new(1,0,1)).lookVector*3))then
                            v.Humanoid.Jump=true

                        end
                        wait()
                    end
                end
            else
                v.Humanoid:MoveTo(target.Position)
                if target.Position.Y>=v.Humanoid.Torso.Position.Y+1 then
                    v.Humanoid.Jump=true
                end
            end
        end
    end)
end
workspace.Wave0.ChildAdded:connect(addz)
for _,v in pairs(workspace.Wave0:GetChildren())do
    wait(.1)
     addz(v)
 end

Answer this question