I'm trying to make a smart NPC system in which enemies will try to move around the character, so what I've done is made them move randomly in front of my character, however, they all seem to act as if I'm using Model:MoveTo instead of Humanoid:MoveTo
TravelTarget = function(npc,dist,rot) local target = npc.Data.Target.Value local h = npc.Humanoid local nc = CFrame.new( npc.HumanoidRootPart.CFrame.Position, target.CFrame.Position ) local rc = nc - nc.Position local x,y,z = rc:toOrientation() npc.HumanoidRootPart.CFrame = nc * CFrame.Angles(-x,0,-z) rot = math.random(unpack(rot)) or math.random(-90,90) local location = ( (target.CFrame * CFrame.Angles(0,math.rad(rot),0)) * CFrame.new(0,0,-dist) ) h:MoveTo(location.Position) wait(0.2) h:MoveTo(npc.HumanoidRootPart.CFrame.Position) h.MoveToFinished:Wait() end
Visualization: https://gyazo.com/6e345fa5c606d1fca808860db1c6e6c6
I can confirm that the issue isn't ping or server lag as well.
Figured it out on my own, I had to rotate them using a BodyGyro instead of directly changing the CFrame of the character.
Because you forgot to put the "part". Do this:
TravelTarget = function(npc,dist,rot) local target = npc.Data.Target.Value local h = npc.Humanoid local nc = CFrame.new( npc.HumanoidRootPart.CFrame.Position, target.CFrame.Position ) local rc = nc - nc.Position local x,y,z = rc:toOrientation() npc.HumanoidRootPart.CFrame = nc * CFrame.Angles(-x,0,-z) rot = math.random(unpack(rot)) or math.random(-90,90) local location = ( (target.CFrame * CFrame.Angles(0,math.rad(rot),0)) * CFrame.new(0,0,-dist) ) h:MoveTo(location.Position, location) wait(0.2) h:MoveTo(npc.HumanoidRootPart.CFrame.Position, npc.HumanoidRootPart) h.MoveToFinished:Wait() end