This code is in a script

local tool = script.Parent
local user
local ammo = script.Parent.ammo
enabled = false
gun = script.Parent
damage = 10
 
--when the tool is equipped
tool.Equipped:connect(function(mouse)
    --store the character of the person using the tool
    user = tool.Parent 
 
    --when the left mouse button is clicked
    mouse.Button1Down:connect(function() 
		if ammo.Value > 0 and enabled == false then
			ammo.Value = ammo.Value - 1
			enabled = true
			Bullet = Instance.new("Part", workspace)
			game.Debris:AddItem(Bullet, 2)
			Bullet.Shape = "Ball"
			bm = Instance.new("SpecialMesh", Bullet)
			bm.MeshType = "Sphere"
			bm.Scale = Vector3.new(0.2,0.2,0.2)
			Bullet.Size = Vector3.new(0.1, 0.1 ,0.1)
			Bullet.TopSurface = "Smooth"
			Bullet.BottomSurface = "Smooth"
			Bullet.BrickColor = BrickColor.new("Black")
			Bullet.CanCollide = false
			Bullet.CFrame = gun.Fire.CFrame
			Bullet.CFrame = CFrame.new(Bullet.Position ,mouse.Hit.p)
			v = Instance.new("BodyVelocity", Bullet)
			v.velocity = Bullet.CFrame.lookVector*90
			v.maxForce = Vector3.new(math.huge, math.huge, math.huge)
			script.Parent.Handle.PewPew:Play()
			enabled = false	
			Bullet.Touched:connect(takeDamage)
	end
    end)
end)


	function takeDamage(part)
		if part.Parent:FindFirstChild("Humanoid") then
			if tookDamage == false then
				tookDamage = true
				part.Parent.Humanoid:TakeDamage(damage)
				Bullet.Parent = nil
				tookDamage = false
			end	
		end
		Bullet.Parent = nil
	end

And then this is in a local script

local player = game.Players.LocalPlayer

gun = script.Parent

ammo = script.Parent.ammo

mouse = player:GetMouse()

enabled = false

damage = 10

tookDamage = false

function shoot()
	if ammo.Value > 0 and enabled == false then
		ammo.Value = ammo.Value - 1
		enabled = true
		Bullet = Instance.new("Part", workspace)
		game.Debris:AddItem(Bullet, 2)
		Bullet.Shape = "Ball"
		bm = Instance.new("SpecialMesh", Bullet)
		bm.MeshType = "Sphere"
		bm.Scale = Vector3.new(0.2,0.2,0.2)
		Bullet.Size = Vector3.new(0.1, 0.1 ,0.1)
		Bullet.TopSurface = "Smooth"
		Bullet.BottomSurface = "Smooth"
		Bullet.BrickColor = BrickColor.new("Black")
		Bullet.CanCollide = false
		Bullet.CFrame = gun.Fire.CFrame
		Bullet.CFrame = CFrame.new(Bullet.Position ,mouse.Hit.p)
		v = Instance.new("BodyVelocity", Bullet)
		v.velocity = Bullet.CFrame.lookVector*90
		v.maxForce = Vector3.new(math.huge, math.huge, math.huge)
		script.Parent.Handle.PewPew:Play()
		enabled = false	
		Bullet.Touched:connect(takeDamage)
	end
end

script.Parent.Equipped:connect(function(mouse)
	if player.PlayerGui:FindFirstChild("GunHud") then
		print("HASGUI")
	else
		mouse.Icon = "http://www.roblox.com/asset/?id=152695139"
		local hud = script.Parent.GunHud:Clone()
		hud.Parent = player.PlayerGui
	end
end)

script.Parent.Unequipped:connect(function()
	if player.PlayerGui:FindFirstChild("GunHud") then
		player.PlayerGui.GunHud:Remove()
	end
end)

local function onKeyDown(key)
    print("Key:", key, " Code:", string.byte(key))

if key == "r" then
	if script.Parent.ammo.Value == 0 then
		local anim = player.Character.Humanoid:LoadAnimation(script.Parent.Reload)
		anim:Play()
		script.Parent.Handle.reloadSound:Play()
		wait(0.5)
		script.Parent.Handle.reloadSound:Play()
		wait(0.5)
		script.Parent.Handle.reloadSound:Play()
		wait(2)
		script.Parent.ammo.Value = 1
	end
end

end

function takeDamage(part)
	if part.Parent:FindFirstChild("Humanoid") then
		if tookDamage == false then
			tookDamage = true
			part.Parent.Humanoid.Health = part.Parent.Humanoid.Health - damage
			Bullet.Parent = nil
			tookDamage = false
		end	
	end
end

script.Parent.ammo.Changed:connect(function(Val)
	player.PlayerGui.GunHud.Hud.HudText.Text = "Ammo " ..script.Parent.ammo.Value.. "/1"
end)

gun.Activated:connect(shoot)
mouse.KeyDown:connect(onKeyDown)

They are both in the gun, the gun works in play solo in edit, but doesnt work in multiplayer play mode.