NPC Flying off the map

Nevermind I didn’t parent it to the character. But it still does a little studder step before moving to the checkpoint

I’m unsure how to fix that, but I forgot to change it to what it was changed to prevent the timeout.

Events.Chains.Event.OnClientEvent(Z)
	local Unit = Pads.TrackPad3.CFrame - Pads.TrackPad3.CFrame.Position
	Pads.TrackPad3.CFrame = CFrame.new(Pads.TrackPad3.Position.X,Pads.TrackPad3.Position.Y,Z) * Unit
	Models.Referee3.Humanoid:LoadAnimation(Replicated:FindFirstChild('Game').Anims:FindFirstChild('Referee').Chains.Grab):Play()
	Models.Referee3.Humanoid:LoadAnimation(Replicated:FindFirstChild('Game').Anims:FindFirstChild('Referee').Chains.Hold):Play()

	repeat
		Models.Referee3.Humanoid:MoveTo(Vector3.new(Pads.TrackPad3.Position.X,Pads.TrackPad3.Position.Y,Pads.TrackPad3.Position.Z))
		local reached = Models.Referee3.Humanoid.MoveToFinished:Wait()
	until reached
	
	Module.CharFace(Models.Referee3)
end)

It has a FAT delay before the character starts moving.

If I had to guess, it’s probably because of the FireClients and FireServer, being that it takes some time to do a FireServer and it also takes some time to do a FireClient, leading to a delay.

So theres no way to fix it? (2.0chars)

Well, you could probably just completely handle it on the client.

function moveLos(Z)
	local Unit = Pads.TrackPad3.CFrame - Pads.TrackPad3.CFrame.Position
	Pads.TrackPad3.CFrame = CFrame.new(Pads.TrackPad3.Position.X,Pads.TrackPad3.Position.Y,Z) * Unit
	Models.Referee3.Humanoid:LoadAnimation(Replicated:FindFirstChild('Game').Anims:FindFirstChild('Referee').Chains.Grab):Play()
	Models.Referee3.Humanoid:LoadAnimation(Replicated:FindFirstChild('Game').Anims:FindFirstChild('Referee').Chains.Hold):Play()

	repeat
		Models.Referee3.Humanoid:MoveTo(Vector3.new(Pads.TrackPad3.Position.X,Pads.TrackPad3.Position.Y,Pads.TrackPad3.Position.Z))
		local reached = Models.Referee3.Humanoid.MoveToFinished:Wait()
	until reached
	
	Module.CharFace(Models.Referee3)
end

function MoveIncrement()
	if Values.Flipped.Value then
		MoveLos(Pads.TrackPad3.Position.Z - Yards)
	else
		MoveLos(Pads.TrackPad3.Position.Z + Yards)
	end
end

function Chains(Button)
	--the event code in here
end

--the buttons
Situation.LOS.MouseButton1Down:Connect(function()
	Chains("LOS")
end)

Make sure to also add any other functions that the event code uses.