For some reason this script doesn't work.

--//Variables
local plr = game.Players.LocalPlayer
local tool = script.Parent.Parent
local hole = tool.Hole
local handle = tool.Handle
local debounce = true
local config = tool.Config
local range = config.Range
local dmg = config.Damage
local coolDown = config.CoolDown
local clips = config.Clips
local ammo = config.Ammo
local maxAmmo = config.MaxAmmo
local allowTracing = config.AllowTracing
local reloadTime = config.ReloadTime
local isReloading = false
--//Sounds
local reloadSound = tool.Handle.ReloadSound
local fireSound = tool.Handle.FireSound
local equipSound = tool.Handle.EquipSound
local emptySound = tool.Handle.EmptySound

--//Events
tool.Equipped:connect(function(mouse)
	equipSound:Play()
	tool.Activated:connect(function()
		if not isReloading then
			if ammo.Value > 0 then
				if debounce then
					--//Play sound
					fireSound:Play()
					--//Doesn't allow spamming
					debounce = false
					--//Ray Get, Set
					local ray = Ray.new(hole.CFrame.p, (mouse.Hit.p - hole.CFrame.p) * range.Value)
					local hit, position = workspace:FindPartOnRay(ray, plr.Character, false, true)
					
					--//Bullet Tracing
					if allowTracing.Value == true then
						--//Make part
						local trace = Instance.new("Part", workspace)
						trace.Material = Enum.Material.Neon
						trace.BrickColor = BrickColor.new("Black")
						trace.CanCollide = false
						trace.Anchored = true
						trace.Transparency = 0.5
						
						--//Show Direction
						local distance = (hole.CFrame.p - position).magnitude
						trace.Size = Vector3.new(0.2, 0.2, distance)
						trace.CFrame = CFrame.new(hole.CFrame.p, position) * CFrame.new(0, 0, -distance/2)
						
						--//Remove debris
						game:GetService("Debris"):AddItem(trace, 0.1)
					end
					
					--//Hit Detection
					if hit then
						local humanoid =  hit.Parent:FindFirstChild("Humanoid")
						if humanoid then
							if hit.Name == "Head" then
								--//Double damage on headshots
								humanoid:TakeDamage(dmg.Value*2)
							else
								--//Normal Damage on body shots
								humanoid:TakeDamage(dmg.Value)
							end
						end
					end
					ammo.Value = ammo.Value - 1
					wait(coolDown.Value)
					debounce = true
				end
			else
				--//Out of ammo
				emptySound:Play()
			end
		end
	end)
	
	--//Reload Event
	mouse.KeyDown:connect(function(key)
		key:lower()
		if key == "r" then
			if not isReloading then
				if clips.Value > 0 then
					reloadSound:Play()
					isReloading = true
					ammo.Value = maxAmmo.Value
					clips.Value = clips.Value - 1
					wait(reloadTime.Value)
					isReloading = false
				end
			end
		end
	end)
end)