Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How would I go about adding a delay between clicking for a tool in my game?

local Debris = game:GetService("Debris")

local Blaster = script.Parent
local Tip = Blaster.Tip

local Player = game.Players.LocalPlayer
local Character = Player.Character

local GunDamage = 30

Blaster.Equipped:Connect(function(Mouse)
	Mouse.Button1Down:Connect(function()
		wait (.2)
		local Laser = Ray.new(Tip.CFrame.p, (Mouse.Hit.p - Tip.CFrame.p).unit * 300)
		local HitPart, HitPosition = game.Workspace:FindPartOnRay(Laser, Character, false, true)
		
		local LaserBeam = Instance.new("Part", game.Workspace)
		LaserBeam.BrickColor = BrickColor.new("Bright green")
		LaserBeam.FormFactor = "Custom"
		LaserBeam.Material = "Neon"
		LaserBeam.Transparency = 0.25
		LaserBeam.Anchored = true
		LaserBeam.CanCollide = false
		
		local LaserDistance = (Tip.CFrame.p - HitPosition).Magnitude
		LaserBeam.Size = Vector3.new(0.3, 0.3, LaserDistance)
		LaserBeam.CFrame = CFrame.new(Tip.CFrame.p, HitPosition) * CFrame.new(0, 0, -LaserDistance/2)
		
		Debris:AddItem(LaserBeam, 0.1)
		
		if HitPart then
			local HitHumanoid = HitPart.Parent:FindFirstChild("Monster")
			
			if not HitHumanoid then
				HitHumanoid = HitPart.Parent.Parent:FindFirstChild("Monster")
			end
			
			if HitHumanoid then
				HitHumanoid:TakeDamage(GunDamage)
			
			end
		end
	end)
end)

Pardon the mess that is the code being used, i'm still quite new to scripting and have been for the most part trying to cobble together code from various sources. I've been trying to make a blaster for an upcoming project of mine. I've gotten the projectile working (albeit towards the cursor rather than the player's direction) and even have an animation which plays, hence the "wait (.2)" of line 13. That being said, I've so far been unable to figure out how to properly stagger the input of Button1 to allow for the animation to fully play out before the player is able to fire once more. Does anyone have any suggestions on how I might rectify this?

1 answer

✓ Accepted answer

You could create what's called a "debounce." Create a debounce variable outside of the clicking function. The code will ONLY run when debounce is FALSE. When the condition is true, set debounce to true, and after a set amount of time using delay, you set it back to false. Example:

local debounce = false

tool.Activated:Connect(function()
	if dobounce then return end

	debounce = true
	delay(DELAY_TIME, function() debounce = false end)

	-- code here
end)

1 comment

0

It certainly is pushing me in the right direction, I think I will need to futz around with the debounce mechanic a bit more to get a proper hang of it. Thanks for the response.

This discussion is preserved as it was. New answers, comments, and votes are closed.