Luckily I've been playing around with Motor6Ds and I've done something like this recently. You are very close to making this work but, what I found out about rotating parts(motor6Ds) of a already rotating model(NPC) is the orientation of the vector you want the limb to point to gets really miss lead with all these different oriented parts/models. So I had to use "toObjectSpace" to fix the problem. I don't completely understand it but, what I can figure is that it puts the vector into it's own space instead of the world space. The line below is what I did to fix my problem hopefully it will fix yours. If not, try playing around with the function.
1 | local lookAt = (NPC.HumanoidRootPart.CFrame:toObjectSpace(target.CFrame.p)) |
sorry for the ugly explanation, but I hope it helps :)