Seriously... What on EARTH is going on here.... As you can tell by the output, the loop is supposed to run 104 times, but it only runs once! This is probably the 4th time that I restarted this script, and by now I am just confused. I get this same result every time.
Here is the output.
local model = script.Parent local humanoid = model:WaitForChild("Humanoid") local torso = model.Torso local hrp = model.HumanoidRootPart local cspawn = model.CSpawn local current_target = model.CurrentTarget local animations = model.Animations local crystalPart = workspace.Crystal.FinalMT local pfs = game:GetService("PathfindingService") function getNearestEnemy() for _, v in pairs(workspace:GetChildren()) do if v.Parent ~= model.Parent then if v:FindFirstChild("Humanoid") then if v.Parent == workspace.Troops then local dis = (v.Torso.CFrame.p - torso.CFrame.p).magnitude if dis < 10 then return v end end end end return nil end end function visualize(path) -- Put this here to make sure the path is even getting made.. local points = path:GetPointCoordinates() for _, point in ipairs(points) do local p = Instance.new("Part", workspace) p.Size = Vector3.new(1,1,1) p.Anchored = true p.CanCollide = false p.CFrame = CFrame.new(point) end end local moveToCrystal = coroutine.create(function() print'moving to crystal' local path = pfs:ComputeRawPathAsync(torso.Position, crystalPart.Position, 500) local points = path:GetPointCoordinates() visualize(path) for _, point in pairs(points) do humanoid:MoveTo(point) local distance print'moved to point' print(#points) repeat distance = (torso.CFrame.p - crystalPart.CFrame.p).magnitude wait() until distance < 5 end end) local chaseTroop = coroutine.create(function(char) local path = pfs:ComputeRawPathAsync(torso.Position, char.Torso.Position, 500) local points = path:GetPointCoordinates() visualize(path) for _, point in ipairs(points) do humanoid:MoveTo(point) local distance repeat distance = (torso.CFrame.p - char.Torso.CFrame.p).magnitude wait() until distance < 5 end end) while wait(0.1) do local nearest = getNearestEnemy() print'refresh' if nearest then coroutine.yield(moveToCrystal) coroutine.resume(chaseTroop, nearest) else coroutine.yield(chaseTroop) coroutine.resume(moveToCrystal) end end