a spider using pathfinding to walk towards me, ends up either walking in a circle around me or walks a bit towards me, turns around 180 then turns around 180 again and starts walking towards me, the result depends if i use :Wait() or not
local players = game:GetService("Players")
local pathfinding = game:GetService("PathfindingService")
local maxdistance = 50
local distance = math.huge
local path = pathfinding:CreatePath()
local spider = script.Parent
local walkTo
local function walk(target)
pcall(function()
path:ComputeAsync(spider.Body.Position,target.Position)
local waypoints = path:GetWaypoints()
for i,v in pairs(waypoints) do
local part = Instance.new("Part")
part.Parent = game:GetService("Workspace")
part.CFrame = CFrame.new(v.Position)
part.CanCollide = false
part.Anchored = true
part.Size = Vector3.new(3,3,3)
spider.Humanoid:MoveTo(v.Position)
print("next")
end
end)
end
path.Blocked:Connect(function()
print("blocked")
spider.Humanoid:MoveTo(spider.Body.Position)
walk(walkTo)
end)
while true do
wait()
for i,v in pairs(players:GetPlayers()) do
if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
local humanoidroot = v.Character.HumanoidRootPart
local playerdistance = (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude
if playerdistance < distance then
distance = playerdistance
--print("got distance")
end
end
end
for i,v in pairs(players:GetPlayers()) do
if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
local humanoidroot = v.Character.HumanoidRootPart
if (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude == distance and (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude <= maxdistance then
distance = math.huge
walkTo = humanoidroot
walk(humanoidroot)
end
end
end
distance = math.huge
end
video of the results https://imgur.com/a/Lo9L5UV
