So while i was making a mario-like platformer i decided to add firing a projectile to my game. At first i added the F = a new projectile that heads thru the general direction, then i added a hold F to spray projectiles. I decided to add a cooldown of 0.3 to every bullet fired and after doing the cooldown for the hold F mechanic i decided to TRY adding the same cooldown mechanic to the normal projectile spawning without holding. Homever no matter what i did it would never work. It would either keep spraying bullets even when im not holding F or just not working. But later i came up with a very good solution that somehow dosent work. Also no there are no errors. The local script:

local UserInputService = game:GetService("UserInputService")
local KeyPressed = false
local CoolDown = false

local function CoolDown()
	CoolDown = true
	wait(0.3)
	CoolDown = false
end

UserInputService.InputBegan:Connect(function(input)
	if input.KeyCode == Enum.KeyCode.F then
		if CoolDown == false then
		game.ReplicatedStorage.ProjectileFire:FireServer()
		KeyPressed = true
	end
while KeyPressed == true do
	wait(0.3)
	game.ReplicatedStorage.ProjectileFire:FireServer()
		end
	end
end)

UserInputService.InputEnded:Connect(function(KeyCode)
	if KeyCode.KeyCode == Enum.KeyCode.F then
		KeyPressed = false
	end
end)

The Server script:

game.ReplicatedStorage.ProjectileFire.OnServerEvent:Connect(function(plr)
	print("pew pew accepted")
	local Char = game.Workspace:WaitForChild(plr.Name)
	local ProjectileOrgin = game.ReplicatedStorage.Projectile
	local ProjectileClone = ProjectileOrgin:Clone()
	ProjectileClone.Parent = game.Workspace
	ProjectileClone.Position = Char.HumanoidRootPart.Position
end)

Please come up with a solution cus this has absolutely stomped me. :D