The issue with your script is that you have 2 conflicting CFrame lines, one goes towards camera CFrame the other goes toward the aimCFrame which overwrite each other
This edit should be good enough to prevent overwrite.
runservice:BindToRenderStep("Viewmodel", Enum.RenderPriority.Camera.Value + 1, function(delta) --Is this how i am supposed to use it?
if ads == true then
viewmodel.HumanoidRootPart.CFrame = viewmodel.HumanoidRootPart.CFrame:lerp(viewmodel.HumanoidRootPart.CFrame * adsoffset, delta * 60)
else
viewmodel.HumanoidRootPart.CFrame = camera.CFrame
end
end)
Additionally you can also use tweenservice to lerp with a tween if you want to use tween styles