Firebreathing script not dealing damage and won't allow reuse unless I reselect it

So I was working with the fire breathing script and it’s not dealing damage even though I added it to the script, not sure what’s going on, if y’all could help that’d be awesome, it also won’t allow the player to reuse the item, not sure if it’s a wait time function I added possibly? I’m still looking myself but I ain’t slept very well because I’ve been fiddling with it all night lol.

local GLib = require(206209239)
script.Parent:WaitForChild("Handle");
local gearConfig = {
	gear = script.Parent,
	plyr = nil,
	equipped = false,
	check = true,
	attackReady = false,
	attacking = false,
	firePiece = {},
	debris = game:GetService("Debris"),
	gulping = script.Parent.Handle:WaitForChild("gulp"),
	sigh = script.Parent.Handle:WaitForChild("sigh"),
	dragon = script.Parent.Handle:WaitForChild("dragon"),
	anims = {
		script.Parent:WaitForChild("drink"),
		script.Parent:WaitForChild("attack")
	},
	readyAnims = {}
}

pcall(function() script.Parent:WaitForChild("FireBreath"):Destroy(); end)

local function createFire(part, fireColor)
	local fire = Instance.new("Fire", part)
	fire.Size = 5
	fire.Heat = 25
	fire.Color = fireColor
	fire.Enabled = true
	fire.Lifetime = math.huge
	fire.TouchInterest = true
	fire.Touched:Connect(function(otherPart)
		local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
		if humanoid and humanoid.Parent ~= gearConfig.plyr.Character then
			humanoid:TakeDamage(50) --damage amount
			local debounce = false
			if not debounce then
				debounce = true
				fire:SetAttribute("InHitEffect", true)
				local effect = Instance.new("Part", fire)
				effect.CanCollide = false
				effect.Anchored = true
				effect.Name = "HitEffect"
				effect.Size = Vector3.new(0.2,0.2,0.2)
				effect.Transparency = 0.7
				effect.Position = otherPart.Position
				effect.Orientation = Vector3.new(0,0,0)
				effect.Material = Enum.Material.SmoothPlastic
				local newFireColor = gearConfig.gear.Handle.Mesh.MeshId =="rbxassetid://3189813748" and Color3.fromRGB(0,255,0) or Color3.fromRGB(255,0,0)
				local effectFire = createFire(effect, newFireColor)
				wait(1)
				if effect then
					effect:Destroy()
				end
				debounce = false
			end
		end
	end)
	return fire
end

function gearConfig.attack()
	gearConfig.dragon:Play();
	gearConfig.readyAnims[2]:Play();
	gearConfig.readyAnims[2]:AdjustSpeed(0.325)
	local pHead = gearConfig.plyr.Character.Head;
	for i=1,3 do
		local p = Instance.new("Part");
		p.Name = "Dragon";
		p.Size = Vector3.new(1,1,1);
		p.CFrame = CFrame.new(pHead.Position,pHead.CFrame.lookVector);
		p.CanCollide = false;
		p.Transparency = 1;
		gearConfig.debris:AddItem(p, 6,5);
		p.Parent = pHead;
		table.insert(gearConfig.firePiece, p);
		local w = Instance.new("Weld",p);
		w.Part0 = pHead;
		w.Part1 = p;
		w.C0 = CFrame.new(0,0,-2 * i)*CFrame.Angles(-1.5,0,0);
		w.C1 = CFrame.new(0,0,0)*CFrame.Angles(0,0,0);
		local fireColor = gearConfig.gear.Handle.Mesh.MeshId =="rbxassetid://3189813748" and Color3.fromRGB(0,255,0) or Color3.fromRGB(255,0,0)
		createFire(p, fireColor)
	end
	wait(7.5)
	gearConfig.attacking = false;
	gearConfig.check = true;
	gearConfig.firePiece = {};
end

gearConfig.gear.Unequipped:Connect(function()
	gearConfig.equipped = false;
	gearConfig.check = true;
	for i=1, #gearConfig.readyAnims do
		gearConfig.readyAnims[i]:Stop();
	end
	if (gearConfig.attacking and #gearConfig.firePiece ~= 0) then
		for i=1, #gearConfig.firePiece do
			gearConfig.firePiece[i]:Destroy();
		end
		gearConfig.firePiece = {};
		gearConfig.attacking = false;
		gearConfig.dragon:Stop();
		local s = Instance.new("Sound", gearConfig.plyr.Character.Head);
		s.SoundId = "https://www.roblox.com/asset/?id=163212600";
		s.Pitch = 1;
		s.Volume = 0.85;
		s.Looped = false;
		gearConfig.debris:AddItem(s, 5);
		s:play();
	end
end);

gearConfig.gear.Equipped:connect(function()
	gearConfig.plyr = GLib.GetPlayerFromPart(script)
	gearConfig.equipped = true;
	if true then
		local human = script.Parent.Parent:FindFirstChild("Humanoid");
		local torso = script.Parent.Parent:FindFirstChild("Torso");
		gearConfig.readyAnims = {};
		for i=1, #gearConfig.anims do
			table.insert(gearConfig.readyAnims, human:LoadAnimation(gearConfig.anims[i]));
		end
		gearConfig.readyAnims[1].KeyframeReached:connect(function(k)
			if (k == "done") then
				wait(.5);
				gearConfig.sigh:Play();
				wait(.5)
				gearConfig.attackReady = true;
			end
		end);
	end
end);

gearConfig.gear.Activated:Connect(function()
	local char, plyr, human = GLib.GetCharacter(script)
	if (gearConfig.check and human.Health > 0) then
		gearConfig.check = false;
		gearConfig.attackReady = false;
		gearConfig.readyAnims[1]:Play();
		repeat wait(.5) until gearConfig.attackReady
		gearConfig.attacking = true;
		gearConfig.attack();
		wait(2)
		gearConfig.check = true
	end
end)

--FireColor3 changer
gearConfig.gear:GetPropertyChangedSignal("FireColor3"):Connect(function()
	local fireColor = gearConfig.gear.FireColor3
	for _, fire in ipairs(gearConfig.firePiece) do
		fire.Color = fireColor
	end
end)