I made a script that makes a NPC walk and face a player at the same time. The problem is that I set the NPC's torso's CFrame to make them face the player, effectively freezing them in place for a moment. Any suggestions?

Here's my script:

Problematic line resides on line 22. I tried setting the NPC's CFrame less often to try to combat the freezing, but it ended up making it look worse.

local Players = game:GetService("Players")
local Humanoid = script.Parent:WaitForChild("Humanoid")
local ParentHumanoidRootPart = script.Parent:WaitForChild("HumanoidRootPart")
local OriginalPosition = ParentHumanoidRootPart.Position
local Torso = script.Parent:WaitForChild("Torso")
local Repeat = 0

while wait(0.1) do
	if Humanoid.Health > 0 then
		for i,v in pairs(Players:GetChildren()) do
			if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
				local HumanoidRootPart = v.Character:FindFirstChild("HumanoidRootPart")
				if HumanoidRootPart and ParentHumanoidRootPart then
					if (HumanoidRootPart.Position - ParentHumanoidRootPart.Position).Magnitude < 30 and (HumanoidRootPart.Position - OriginalPosition).Magnitude < 35 then
						Humanoid.AutoRotate = false
						Humanoid:MoveTo(HumanoidRootPart.Position - CFrame.new(ParentHumanoidRootPart.Position, HumanoidRootPart.Position).LookVector * 10)
						--script.Parent:SetPrimaryPartCFrame(CFrame.new(ParentHumanoidRootPart.Position, Vector3.new(HumanoidRootPart.Position.X, ParentHumanoidRootPart.Position.Y, HumanoidRootPart.Position.Z)))
						--Torso.CFrame = CFrame.new(Torso.Position, Vector3.new(HumanoidRootPart.Position.X, Torso.Position.Y, HumanoidRootPart.Position.Z))
						Repeat = Repeat + 1
						if Repeat == 5 then
							Repeat = 0
							Torso.CFrame = CFrame.new(Torso.Position, Vector3.new(HumanoidRootPart.Position.X, Torso.Position.Y, HumanoidRootPart.Position.Z))
						end
					else
						Humanoid.AutoRotate = true
						Humanoid:MoveTo(OriginalPosition)
					end
				end
			end
		end
	end
end