Custom shiftlock not working as expected

I’ve been trying to make a custom shiftlock that has 3 angles, right shoulder, above the head, and left shoulder, and that part does work well. The only issue being that you cannot turn the camera with the mouse and the only way to turn the camera is to physically move your character with the A&D keys. I’ve been tinkering with a way to do this for a couple hours atleast, but I can’t seem to find the best solution. The script is lengthy at around 105~ lines, but I’ll just show a small segment of it.

Basically everything works as expected but you can only turn your camera with the movement keys and not the mouse.

(also this is the right shoulder angle, not the left one as the name implies)

uis = game:GetService("UserInputService")
lp = game:GetService("Players").LocalPlayer
actives = {
	right = false,
	top = false, 
	left = false
}
uis.InputBegan:Connect(function(kc)
	if kc.KeyCode == Enum.KeyCode.LeftControl and actives.right == false and actives.left == false and actives.top == false then
		local cam = workspace.CurrentCamera	
		cam.CameraType = Enum.CameraType.Scriptable
		local hrp = lp.Character.HumanoidRootPart or nil
		if hrp then else return end
		actives.left = false
		actives.top = false
		actives.right = true
		local attachments = {
			hrp:FindFirstChild("leftat"),
			hrp:FindFirstChild("topat"),
			hrp:FindFirstChild("rightat")
		}
		for i = 1, 100 do
			game["Run Service"].RenderStepped:Wait()
			cam.CFrame = cam.CFrame:Lerp(attachments[1].WorldCFrame,i/100)
			if actives.right == true then
			else
				break
			end
		end
		while actives.right == true do
			if actives.right == true then
			else
				break
			end
			cam.CFrame = cam.CFrame:Lerp(attachments[1].WorldCFrame,1)
			game["Run Service"].RenderStepped:Wait()
		end