probably make it so the Roll axis is never tilted im guessing something like
-- consider CF to be your CFrame (dont actually call it that because that will be )
CF2 = CFrame.fromMatrix(CF.Position,
CF.Rotation.X,--[[set to 0 if its the x axis]]
CF.Rotation.Y,
CF.Rotation.Z--[[set to 0 if its the z axis]]
)
im pretty sure this is terribly wrong but it should work??? i dunno
CFrame.lookAt is not slow, make the server just hold data such as target, when target changes you can send the new target to client, and make the client use CFame.lookAt to aim at the target