MouseButton1Click firing multiple times

When I click on the equip button, print(currentTool)prints for twice at first and when I press it again, it continues printing 3 times, then 4, then 5.

Can you please help me?

game.Players.PlayerAdded:Connect(function(Player)
	Player.CharacterAdded:Connect(function(Character)
		local gui = Player.PlayerGui.SCSMainGUI.Frames.CollectorShop
		local cloneBucket = game.ReplicatedStorage.Collectors.Bucket:Clone()
		cloneBucket.Parent = Player.Backpack
		local currentTool = cloneBucket
		Character:WaitForChild("Humanoid", 3):EquipTool(cloneBucket)

		local function bucketSet()
			local template = script.CollectorTemplate:Clone()
			template.Parent = gui.MainFrame.ObjectHolder
			template.Name = cloneBucket.Name
			game.ReplicatedStorage.Collectors.Bucket:Clone().Parent = template.Display
			template.Button.MouseButton1Click:Connect(function()
				if not template:IsA("Frame") then return end
				if gui.SideFrame.Display:FindFirstChildOfClass("Tool") then
					gui.SideFrame.Display:FindFirstChildOfClass("Tool"):Destroy()
				end
				game.ReplicatedStorage.Collectors.Bucket:Clone().Parent = gui.SideFrame.Display
				gui.SideFrame.Title.Text = cloneBucket.Name
				if cloneBucket.Parent == Character then
					gui.SideFrame.BuyEquip.Title.Text = "Equipped"
				else
					gui.SideFrame.BuyEquip.Title.Text = "Equip"
				end

				if gui.SideFrame.BuyEquip.Title.Text == "Equipped" then return end
				gui.SideFrame.BuyEquip.Click.MouseButton1Click:Connect(function()
					currentTool = Player.Backpack:FindFirstChild(gui.SideFrame.Title.Text)
					print(currentTool)
					Character:WaitForChild("Humanoid", 3):EquipTool(currentTool)
					template.EquippedIcon.Visible = true
					gui.SideFrame.BuyEquip.Title.Text = "Equipped"
					for _, Template in ipairs(gui.MainFrame.ObjectHolder:GetChildren()) do
						if Template:IsA("Frame") then
							Template.EquippedIcon.Visible = false
						end
					end
				end)
			end)
		end

		bucketSet()

		for _, Tool in ipairs(game.ReplicatedStorage.Collectors:GetChildren()) do
			if Tool.Name ~= "Bucket" then
				local cloneTool = Tool:Clone()
				cloneTool.Parent = Player.Backpack
				local template = script.CollectorTemplate:Clone()
				template.Parent = gui.MainFrame.ObjectHolder
				template.Name = Tool.Name
				cloneTool:Clone().Parent = template.Display
			end
		end

		for _, Collector in ipairs(game.ReplicatedStorage.Collectors:GetChildren()) do
			local Template = gui.MainFrame.ObjectHolder:FindFirstChild(Collector.Name)
			Template.Button.MouseButton1Click:Connect(function()
				if gui.SideFrame.Display:FindFirstChildOfClass("Tool") then
					gui.SideFrame.Display:FindFirstChildOfClass("Tool"):Destroy()
				end
				game.ReplicatedStorage.Collectors:FindFirstChild(Template.Name):Clone():Clone().Parent = gui.SideFrame.Display
				gui.SideFrame.Title.Text = Player.Backpack:FindFirstChild(Template.Name).Name
				if Player.Backpack:FindFirstChild(Template.Name).Parent == Character then
					gui.SideFrame.BuyEquip.Title.Text = "Equipped"
				else
					gui.SideFrame.BuyEquip.Title.Text = "Equip"
				end

				if gui.SideFrame.BuyEquip.Title.Text == "Equipped" then return end
				gui.SideFrame.BuyEquip.Click.MouseButton1Click:Connect(function()
					currentTool = Player.Backpack:FindFirstChild(gui.SideFrame.Title.Text)
					print(currentTool)
					Character:WaitForChild("Humanoid", 3):EquipTool(currentTool)
					Template.EquippedIcon.Visible = true
					gui.SideFrame.BuyEquip.Title.Text = "Equipped"
					for _, Template in ipairs(gui.MainFrame.ObjectHolder:GetChildren()) do
						if Template:IsA("Frame") then
							Template.EquippedIcon.Visible = false
						end
					end
				end)
			end)
		end
	end)
end)

Well, I believe you can use any local detecting if was already clicked or not, I’m using debounce as an example.

gui.SideFrame.BuyEquip.Click.MouseButton1Click:Connect(function()
    local debounce = false
    if not debounce then
      currentTool = Player.Backpack:FindFirstChild(gui.SideFrame.Title.Text)
      print(currentTool)
      debounce = true
      Character:WaitForChild("Humanoid", 3):EquipTool(currentTool)
      Template.EquippedIcon.Visible = true
      gui.SideFrame.BuyEquip.Title.Text = "Equipped"
      for _, Template in ipairs(gui.MainFrame.ObjectHolder:GetChildren()) do
         if Template:IsA("Frame") then
           Template.EquippedIcon.Visible = false
         end
      end
    end
end)

If there’s any other problem, let me know! :wink:

2 Likes

Yes it works, thank you very much!

1 Like