Custom Jihad sounds help

Okay so i got the custom sounds working but the problem is that when they dont have any custom sounds bought it dosnt play a sound can someone help



--- Author informations --
	
local explodeSounds = {
    'jihad25/jihad.wav', -- Sound number 1 (default)
    'jihad25/president.mp3', -- Sound number 2
    'jihad25/johncena.mp3', -- Sound number 3
    'jihad25/nuke.wav', -- Sound number 4
    'jihad25/join3.mp3', -- Sound number 5
    'jihad25/pac2.mp3', -- Sound number 6
    'jihad25/saywhatagain2.mp3', -- Sound number 7
    'jihad25/shutup.mp3', -- Sound number 8
    'jihad25/smokeweed.mp3', -- Sound number 9
    'jihad25/suprisemofo.mp3', -- Sound number 10
    'jihad25/wtfboom2.mp3', -- Sound number 11
}


SWEP.Author = "Zaratusa"
SWEP.Contact = "http://steamcommunity.com/profiles/76561198032479768"

if SERVER then
	AddCSLuaFile()
	resource.AddWorkshop("254177214")
else
	SWEP.PrintName = "Jihad Bomb"
	SWEP.Slot = 8
	SWEP.Icon = "vgui/ttt/icon_jihad_bomb"

	-- Equipment menu information is only needed on the client
	SWEP.EquipMenuData = {
		type = "item_weapon",
		desc = "Sacrifice yourself to Allah.
Your 72 virgins await.

NOTE: No refund after use."
	}
end

-- Always derive from weapon_tttbase
SWEP.Base = "weapon_tttbase"

--- Default GMod values ---
SWEP.Primary.Ammo = "none"
SWEP.Primary.Delay = 5
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false

--- Model settings ---
SWEP.HoldType = "slam"

SWEP.UseHands = true
SWEP.DrawAmmo = false
SWEP.ViewModelFlip = false
SWEP.ViewModelFOV = 54
SWEP.ViewModel = Model("models/weapons/zaratusa/jihad_bomb/v_jb.mdl")
SWEP.WorldModel = Model("models/weapons/zaratusa/jihad_bomb/w_jb.mdl")

--- TTT config values ---

-- Kind specifies the category this weapon is in. Players can only carry one of
-- each. Can be: WEAPON_... MELEE, PISTOL, HEAVY, NADE, CARRY, EQUIP1, EQUIP2 or ROLE.
-- Matching SWEP.Slot values: 0      1       2     3      4      6       7        8
SWEP.Kind = WEAPON_ROLE

-- If AutoSpawnable is true and SWEP.Kind is not WEAPON_EQUIP1/2,
-- then this gun can be spawned as a random weapon.
SWEP.AutoSpawnable = false

-- InLoadoutFor is a table of ROLE_* entries that specifies which roles should
-- receive this weapon as soon as the round starts.
SWEP.InLoadoutFor = { ROLE_TRAITOR }

-- If AllowDrop is false, players can't manually drop the gun with Q
SWEP.AllowDrop = true

-- If IsSilent is true, victims will not scream upon death.
SWEP.IsSilent = false

-- If NoSights is true, the weapon won't have ironsights
SWEP.NoSights = true

-- Precache sounds and models
function SWEP:Precache()
	util.PrecacheSound("jihad25/jihad.wav")
	util.PrecacheSound("jihad25/big_explosion.wav")

	util.PrecacheModel("models/humans/charple01.mdl")
	util.PrecacheModel("models/humans/charple02.mdl")
	util.PrecacheModel("models/humans/charple03.mdl")
	util.PrecacheModel("models/humans/charple04.mdl")
end

function SWEP:Initialize()
	if (CLIENT and self:Clip1() == -1) then
		self:SetClip1(self.Primary.DefaultClip)
	elseif SERVER then
		self.fingerprints = {}
	end

	self:SetDeploySpeed(self.DeploySpeed)

	if (self.SetHoldType) then
		self:SetHoldType(self.HoldType or "pistol")
	end

	self:SetNWBool("Exploding", false)
end

local function ScorchUnderRagdoll(ent)
	-- big scorch at center
	local mid = ent:LocalToWorld(ent:OBBCenter())
	mid.z = mid.z + 25
	util.PaintDown(mid, "Scorch", ent)
end

-- Checks if the burn time is over, or if the body is in water
local function RunIgniteTimer(tname, body, burn_destroy)
	if (IsValid(body) and body:IsOnFire()) then
		if (CurTime() > burn_destroy) then
			body:SetNotSolid(true)
			body:Remove()
		elseif (body:WaterLevel() > 0) then
			body:Extinguish()
		end
	else
		timer.Destroy(tname)
	end
end

-- Burn the body of the user
local function BurnOwnersBody(model)
	local body
	-- Search for all ragdolls and the one with the given model
	for _, ragdoll in pairs(ents.FindByClass("prop_ragdoll")) do
		if (ragdoll:GetModel() == model) then
			body = ragdoll
		end
	end

	ScorchUnderRagdoll(body)

	if SERVER then
		local burn_time = 7.5
		local burn_destroy = CurTime() + burn_time
		local tname = "burn_jihad"
		timer.Simple(0.01, function() if (IsValid(body)) then body:Ignite(burn_time, 100) end end)
		timer.Create(tname, 0.1, math.ceil(1 + burn_time / 0.1), function () RunIgniteTimer(tname, body, burn_destroy) end)
	end
end

function SWEP:PrimaryAttack()
	self.Weapon:SetNextPrimaryFire(CurTime() + 3)

	local effectdata = EffectData()
	effectdata:SetOrigin( self.Owner:GetPos() )
	effectdata:SetNormal( self.Owner:GetPos() )
	effectdata:SetMagnitude( 8 )
	effectdata:SetScale( 1 )
	effectdata:SetRadius( 16 )
	util.Effect( "Sparks", effectdata )
	
	self.BaseClass.ShootEffects( self )

	if (SERVER) then
    	timer.Simple(2, function() self:Asplode() end)
    	self.Owner:EmitSound(explodeSounds[self.Owner:GetNWInt('JihadSound') or 1])
   	end
end

--The asplode function
function SWEP:Asplode()
	// Make an explosion at your position
	local ent = ents.Create( "env_explosion" )
	ent:SetPos( self.Owner:GetPos() )
	ent:SetOwner( self.Owner )
	ent:Spawn()
	ent:SetKeyValue( "iMagnitude", "250" )
	ent:Fire( "Explode", 0, 0 )
	ent:EmitSound( "jihad25/big_explosion.wav", 500, 500 )
		
	self.Owner:Kill( )
	self.Owner:AddFrags( -1 )
 
	-- lol what? Why?!
	-- for k, v in pairs( player.GetAll( ) ) do
	--  	v:ConCommand( "play siege/big_explosion.wav
" )
	-- end
end


/*---------------------------------------------------------
	SecondaryAttack
---------------------------------------------------------*/
function SWEP:SecondaryAttack()	
	self.Weapon:SetNextSecondaryFire( CurTime() + 1 )
	
	local TauntSound = Sound( "vo/npc/male01/overhere01.wav" )

	self.Weapon:EmitSound(explodeSounds[self.Owner:GetNWInt('JihadSound') or 1])
	
	// The rest is only done on the server
	if (!SERVER) then return end
	
	-- self.Weapon:EmitSound( TauntSound ) -- why the hell 2nd time?
end

function SWEP:Deploy()
	self:SetNWBool("Exploding", false)
end

function SWEP:Holster()
	return !self:GetNWBool("Exploding")
end

-- Reload does nothing
function SWEP:Reload()
end



Here is the pointshop item




ITEM.Name = 'Say What Again'
ITEM.Price = 500
ITEM.Model = "models/weapons/w_toolgun.mdl"

function ITEM:OnBuy(ply)
	ply:SetNWInt('JihadSound', 7) -- number of custom sound with ID = 2
end

function ITEM:OnEquip(ply, modifications)
	ply:SetNWInt('JihadSound', 7) -- number of custom sound with ID = 2
end

function ITEM:OnHolster(ply)
	ply:SetNWInt('JihadSound', 1) -- number of default sound with ID = 1
end

function ITEM:OnSell(ply)
	ply:SetNWInt('JihadSound', 1) -- number of default sound with ID = 1
end



anyone have a idea?

i tried changing it to



self.Owner:EmitSound(1 or explodeSounds[self.Owner:GetNWInt('JihadSound')])


but no luck

:snip:

That will never work either way. 1 will always be valid so it will try to do self.Owner:EmitSound(1), and that will just do nothing
As for your initial code, GetNWInt returns an integer, always. Even if the player doesn’t have a weapon bought, it will return something. Since you didn’t supply a fallback int, it automatically uses 0. Since 0 or 1 returns 0, you are trying to access a non-existent table value (returns nil).
Simply change [lua]self.Owner:EmitSound(explodeSounds[self.Owner:GetNWInt(‘JihadSound’) or 1])[/lua] into [lua]self.Owner:EmitSound(explodeSounds[self.Owner:GetNWInt(‘JihadSound’,1)])[/lua]

Okay ill try it thank you so much