I'm trying to make a 2d game and my dodge script is in the works, my only problem is it's semi-working right now as I want to make it so when I'm off of the ground and I dodge, the debounce or wait is longer to use another consecutive dodge, so basically my script is doing what I just said BUT it's making me dodge twice in a short amount of time and then I dodge after a long time, this might not make any sense but I don't know how to explain it better. NOTE: When I touch the ground my dodge resets to the shorter debounce, here's a snippet of my script, this snippet is basically the same throughout the whole script, and don't blame me if the script if a bit messy, I have around 577 lines of code and I have yet to clean it up.

game.ReplicatedStorage.UpDodge.OnServerEvent:Connect(function(player)
	local tweenService = game:GetService("TweenService")
	local part = player.Character.HumanoidRootPart
	
	if debounce == false then
		debounce = true
		counterparthappened = true
	player.Character.LowerTorso.DodgeCircle.Trail.Enabled = true
	player.Character.HumanoidRootPart.Anchored = true
	local goal = {}
	goal.CFrame = CFrame.new(player.Character.HumanoidRootPart.Position + Vector3.new(0,12,0)) * CFrame.Angles(0,  -1.5, 0)
	local tweenInfo = TweenInfo.new(.2)
	local tween = tweenService:Create(part, tweenInfo, goal)
	tween:Play()
	
	wait(.2)
		player.Character.LowerTorso.DodgeCircle.Trail.Enabled = false
		player.Character.HumanoidRootPart.Anchored = false
		is1point5 = false
		wait(Time)
		is1point5 = true
		if alreadydodged then
		wait(Time2)
		debounce = false
		else alreadydodged = true
			debounce = false
		end
	end
end)








game.ReplicatedStorage.UpDodge1.OnServerEvent:Connect(function(player)
	if counterparthappened then
		counterparthappened = false
	local TweenService = game:GetService("TweenService")
	local part = player.Character.LowerTorso.DodgeCircle
	
		player.Character.LowerTorso.DodgeCircle.Transparency = 0
	wait(.1)
	local info = TweenInfo.new(
		.1,
		Enum.EasingStyle.Linear,
		Enum.EasingDirection.Out,
		0,
		false,
		0
	)
	
	local Goals =
	{
	Transparency = 1;
	Size = Vector3.new(10,10,10);
	}
	local tween = TweenService:Create(part,info,Goals)
	tween:Play()
	wait(.11)
	player.Character.LowerTorso.DodgeCircle.Size = Vector3.new(8,8,8)
	end
end)



Players.PlayerAdded:Connect(function(player)
	local char = player.Character or player.CharacterAdded:wait()
	coroutine.wrap(function()
		while wait()do
			local floor=char.Humanoid.FloorMaterial
			if(tostring(floor)=="Enum.Material.Air")or(floor==nil)then
				onair = true
			else alreadydodged = false
				print("on ground");
				
			end
		end
	end)()
end)

there are a lot of random booleans here from when I was experimenting with the script, but basically what's happening in this script is when a remote event is fired from my local script (my local script fires the remote event when buttons are pressed) it enables and disables some stuff, blah blah, but then when I get to the ifalreadydodged part everything seems fine, I've been trying things for hours but I can't seem to get what's wrong, maybe this is a bit too much to ask. If you have any questions about my script or my other scripts reply please and I'll try to reply as well. NOTE: Time and Time2 = 1.5 (in total they add up to 3 which is how long the dodge debounce should take if I already dodged and I haven't touched the ground again)