I need help with my camera FPS

I want to make a system where the arms follow the first-person camera in my custom camera setup.

The problem is that the traditional method hasn’t been working properly because the way the camera behaves has been changed.

I’ve tried many solutions, and if anyone knows how to fix this, I would be grateful!

local function updateCamera(deltaTime)
        
                deltaTime = deltaTime * 60

                local rootMagnitude = Humanoid.RootPart and Vector3.new(Humanoid.RootPart.Velocity.X, 0, Humanoid.RootPart.Velocity.Z).Magnitude or 0
                local calcRootMagnitude = math.min(rootMagnitude, 50)
                if deltaTime > 3 then
                    func1 = 0
                    func2 = 0
                else
                    func1 = lerp(func1, math.cos(tick() * 0.5 * math.random(10, 15)) * (math.random(5, 20) / 200) * deltaTime, 0.05 * deltaTime)
                    func2 = lerp(func2, math.cos(tick() * 0.5 * math.random(5, 10)) * (math.random(2, 10) / 200) * deltaTime, 0.05 * deltaTime)
                end

                Camera.CFrame = Camera.CFrame * (CFrame.fromEulerAnglesXYZ(0, 0, math.rad(func3)) * CFrame.fromEulerAnglesXYZ(math.rad(func4 * deltaTime), math.rad(val * deltaTime), val2) * CFrame.Angles(0, 0, math.rad(func4 * deltaTime * (calcRootMagnitude / 5))) * CFrame.fromEulerAnglesXYZ(math.rad(func1), math.rad(func2), math.rad(func2 * 10)))

                val2 = math.clamp(lerp(val2, -Camera.CFrame:VectorToObjectSpace((Humanoid.RootPart and Humanoid.RootPart.Velocity or Vector3.new()) / math.max(Humanoid.WalkSpeed, 0.01)).X * 0.08, 0.1 * deltaTime), -0.35, 0.2)
                func3 = lerp(func3, math.clamp(UserInputService:GetMouseDelta().X, -5, 5), 0.25 * deltaTime)
                func4 = lerp(func4, math.sin(tick() * int) / 5 * math.min(1, int2 / 10), 0.25 * deltaTime)
                if rootMagnitude > 1 then
                    val = lerp(val, math.cos(tick() * 0.5 * math.floor(int)) * (int / 200), 0.25 * deltaTime)
                else
                    val = lerp(val, 0, 0.05 * deltaTime)
                end
                if rootMagnitude > 12 then
                    int = 20
                    int2 = 18
                elseif rootMagnitude > 0.1 then
                    int = 12
                    int2 = 14
                else
                    int2 = 0
                end
                vect3 = lerp(vect3, Camera.CFrame.LookVector, 0.125 * deltaTime)
            
        end

        local function updateArms()

                local torso = char:WaitForChild("Torso")
                local rightShoulder = torso:WaitForChild("Right Shoulder")
                local leftShoulder = torso:WaitForChild("Left Shoulder")
                local head = char:WaitForChild("Head")

            local camCF = Camera.CoordinateFrame

            
            local rightArmOffset = camCF * CFrame.new(1, -1, 0) 
            local leftArmOffset = camCF * CFrame.new(-1, -1, 0) 

    
            local rightArmCFrame = torso.CFrame:ToObjectSpace(rightArmOffset)
            local leftArmCFrame = torso.CFrame:ToObjectSpace(leftArmOffset)

        
            rightArmCFrame = rightArmCFrame * CFrame.Angles(0, math.pi / 2, 0)
            leftArmCFrame = leftArmCFrame * CFrame.Angles(0, -math.pi / 2, 0)

    
            rightShoulder.C0 = rightShoulder.C0:Lerp(rightArmCFrame, updateSpeed)
            leftShoulder.C0 = leftShoulder.C0:Lerp(leftArmCFrame, updateSpeed)
            

        end

        game:GetService("RunService"):BindToRenderStep("FpsSmooth", Enum.RenderPriority.Character.Value, function(deltaTime)
            if shiftlock == false then
                updateCamera(deltaTime)
                updateArms()    
            end
            
            
            plr.CameraMode = Enum.CameraMode.LockFirstPerson
        end)