Debounce not working properly?

So I have a shotgun im making, and I have the firerate set at 2 just for testing, the gun holds 3 shots and when I fire the first shot, works perfectly, wont fire for 2 seconds, nothing, but then after that 2 seconds, the next 2 shots I can spam the trigger and it wont fire but itll do the camera tweens and shells, any help im stumped?

Mouse.Button1Down:Connect(function()
	if script.Parent.Variables.Ammo.Value > 0 and Down == false and Equipped == true and EquipDebounce == false and Tool.Variables.Debounce.Value == false and ReloadCooldown == false and Humanoid.Health > 0 and Tool.Variables.FireDebounce.Value == false and Deb2 == true and Deb3 == true then
		Tool.Variables.FireDebounce.Value = true
		Tool.MuzzleEffect.FlashFX.Enabled = true
		local mousePosition = Mouse.Hit.Position
		Fire:Play()
		wait(0.02)
		script.Parent.Events.FireEvent:FireServer(mousePosition)
		wait(0.06)

		local Shell = game.ReplicatedStorage.Holes.Shell:Clone()
		Shell.Parent = workspace.Casings
		Shell.CFrame = script.Parent.Eject.CFrame
		Shell.AssemblyLinearVelocity = Vector3.new(9,25,0)

		game.Debris:AddItem(Shell, 17)
		
		local TweenService = game:GetService("TweenService")
		local time = 0.1
		local tween2 = TweenService:Create(Player.PlayerGui.GunGUI.Screen, TweenInfo.new(time), {ImageTransparency = 0.35})
		tween2:Play()
		tween2.Completed:Connect(function()
			local TweenService = game:GetService("TweenService")
			local time = 1
			local tween3 = TweenService:Create(Player.PlayerGui.GunGUI.Screen, TweenInfo.new(time), {ImageTransparency = 1})
			tween3:Play()
		end)
		
		if not Tool.Attatchments:FindFirstChild("Suppressor") then
			Tool.Flash.PointLight.Enabled = true
		end
		
		Recoil()
		Tool.Flash.PointLight.Enabled = false
		Tool.MuzzleEffect.FlashFX.Enabled = false
		local camera = workspace.CurrentCamera
		local TweenService = game:GetService("TweenService")
		local time = 0.08
		local tween2 = TweenService:Create(camera, TweenInfo.new(time), {FieldOfView = 33})
		tween2:Play()
		tween2.Completed:Connect(function()
			local tween = TweenService:Create(camera, TweenInfo.new(time), {FieldOfView = 30})
			tween:Play()
		end)
		wait(FireRate)
		Tool.Variables.FireDebounce.Value = false
	else
		if Equipped and not EquipDebounce and Tool.Variables.Debounce.Value == false and not ReloadCooldown and not Down and Humanoid.Health > 0 and Tool.Variables.FireDebounce.Value == false and Deb2 == true and Deb3 == true then
			Tool.Handle.Empty:Play()
			Empty:Play()
		end
		wait(FireRate)
		Tool.Variables.FireDebounce.Value = false
	end
end)

Instead of using a value to toggle debounce, make it a variable in your script.

Also, there could also be a desync between the client and server if you have stuff in seperate scripts.