This local script works fine with everything but then when the keydown function comes it is like the script skipped over it and continued on with everything else every time.

local tool = script.Parent

local player = game.Players.LocalPlayer
local character = player.Parent

local firerate = 1
local range = 200


local handle = tool:WaitForChild("Handle")
local event = tool:WaitForChild("RemoteEvent")
local firesound = handle:WaitForChild("FireSound")


local check = true


function checkintangible(hit)
	if hit and hit ~= nil then
		if hit:IsDescendantOf(tool.Parent) or hit.Name == "Handle" or string.lower(string.sub(hit.Name, 1, 6)) == "effect" then
			return true
		end
	end
	return false
end

function castray(startpos, vec, length, ignore, delayifhit)
	local hit, endpos2 = game.Workspace:FindPartOnRay(Ray.new(startpos, vec * length), ignore)
	if hit ~= nil then
		if checkintangible(hit) then
			hit, endpos2 = castray(endpos2 + (vec * .01), vec, length - ((startpos - endpos2).magnitude), ignore, delayifhit)
		end
	end
	return hit, endpos2
end

tool.Equipped:connect(function(mouse)
	equipped = true
	if mouse then
		mouse.Icon = "rbxasset://textures\\GunCursor.png"
		mouse.Button1Down:connect(function()
			local humanoid = tool.Parent:FindFirstChild("Humanoid")
			local head = tool.Parent:FindFirstChild("Head")
			local torso = tool.Parent:FindFirstChild("Torso")
			if check and humanoid and humanoid.Health > 0 and head and torso then
				check = false
				mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"
				
				firesound:Play()
				
				local vec = (mouse.Hit.p - head.Position).unit
				local hit ,endpos = castray(head.Position, vec, range, tool.Parent)
				
				event:FireServer("Fire", endpos, hit)
				
				wait(firerate)
				if mouse then
					mouse.Icon = "rbxasset://textures\\GunCursor.png"
				end
				check = true
			end
		end)
		mouse.KeyDown:connect(function(key)
			key = key:lower()
			if key == "m" then
				for _, part in pairs(character:GetChildren())do
					if part.ClassName == "Torso" then
						part.Transparency = 1
					elseif part.ClassName == "Head" then
						part.Transparency = 1
					elseif part.ClassName == "Right Arm" then
						part.Transparency = 1
					elseif part.ClassName == "Left Arm" then
						part.Transparency = 1
					elseif part.ClassName == "Right Leg" then
						part.Transparency = 1
					elseif part.ClassName == "Left Leg" then
						part.Transparency = 1
					end
				end
			end
		end)
	end
end)

tool.Unequipped:connect(function()
	equipped = false
end)