so i originally made a post about this yesterday asking the same thing but i didnt really explain it correctly. So i have a Gun Recoil System and a Crouch system which both use Camera Offset. I have a function connect to RunService that updates the XYZ variable i have for the Camera Offset heres a video of my problem video what happens is that when i shoot without crouching the recoil is no problem but when i do crouch the recoil makes me go back up to the original camera offset then do recoil

i hope this makes sense

repeat wait() until x2 ~= nil
local OffsetP = {CameraOffset = Vector3.new(x2,y2 + 0.08,z2 - 0.04)}
local Infor = TweenInfo.new(0.1, Enum.EasingStyle.Circular, Enum.EasingDirection.In)
local OffSetd = game:GetService("TweenService"):Create(Character.Humanoid, Infor, OffsetP)
local x = viewModel.Classic.Bottom.Top.C0.X
local y = viewModel.Classic.Bottom.Top.C0.Y
local z = viewModel.Classic.Bottom.Top.C0.Z
local Properties = {C0 = CFrame.new(0.5,y,z)}
local Info = TweenInfo.new(0.1, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut)
local Back = game:GetService("TweenService"):Create(viewModel.Classic.Bottom.Top, Info, Properties)
local lol = {CameraOffset = Vector3.new(x2,y2 - 0.08,z2 + 0.04)}
local ll = TweenInfo.new(0.1, Enum.EasingStyle.Circular, Enum.EasingDirection.Out)
local Anim = game:GetService("TweenService"):Create(Character.Humanoid, ll, lol)
local Properties2 = {C0 = CFrame.new(x,y,z)}
local Info2 = TweenInfo.new(0.1, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut)
local Forward = game:GetService("TweenService"):Create(viewModel.Classic.Bottom.Top, Info2, Properties2)

RunService.RenderStepped:Connect(function()
	lol = {CameraOffset = Vector3.new(Character.Humanoid.CameraOffset.X,Character.Humanoid.CameraOffset.Y - 0.08,Character.Humanoid.CameraOffset.Z + 0.04)}
	OffsetP = {CameraOffset = Vector3.new(Character.Humanoid.CameraOffset.X,Character.Humanoid.CameraOffset.Y + 0.08,Character.Humanoid.CameraOffset.Z - 0.04)}
end)

Mouse.Button1Down:Connect(function()
	if CanShoot == true and shooting == false then
		if not Forward.Completed then
			Forward:Stop()
		end
		shooting = true
		OffSetd:Play()
		CanShoot = false
		Vandal.Fire:Play()
		Back:Play()
		wait(0.1)
		Anim:Play()
		Forward:Play()
		wait(firerate)
		CanShoot = true
		shooting = false
	end
end)

-- Crouch --

local anim = script.Crouch
local play = Character:WaitForChild("Humanoid"):LoadAnimation(anim)

UIS.InputBegan:Connect(function(input)
	if input.KeyCode == Enum.KeyCode.LeftControl then
		IsCrouched = true
		Character.Humanoid.WalkSpeed = 8
		local Properties = {CameraOffset = Vector3.new(x2,y2 - 1,z2)}
		local Info = TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut)
		local T = game:GetService("TweenService"):Create(Character.Humanoid, Info, Properties)
		T:Play()
		play:Play()
	end
end)
UIS.InputEnded:Connect(function(input)
	if input.KeyCode == Enum.KeyCode.LeftControl then
		IsCrouched = false
		Character.Humanoid.WalkSpeed = 12
		local Properties = {CameraOffset = Vector3.new(x2,y2 + 1,z2)}
		local Info = TweenInfo.new(0.2, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut)
		local T = game:GetService("TweenService"):Create(Character.Humanoid, Info, Properties)
		T:Play()
		play:Stop()
	end
end)