Trouble in Terrorist Town Custom Jihad Sound Pointshop
4 replies, posted
Hey there.
I am very newbie when it comes to LUA and coding in general, so I wouldn't doubt it if the answers to any of my problems are easily / blatantly fixable.
I've been trying to make custom jihad sounds in my pointshop (to override the default lalalala when you explode if the item is equipped.) using the pointshop function 'ply:PS_HasItemEquipped'. I looked it up and I added 'ply' as a value (ply = {}) which got rid of the original error message which stated something along the lines of 'ply is a nil value'. Now I'm getting PS_HasItemEquipped is a nil value and when I try to add a value for it I still get the same error message. Here is my code so far:
[CODE]// Variables that are used on both client and server
SWEP.Author = "Stingwraith"
SWEP.Contact = "stingwraith123@yahoo.com"
SWEP.Purpose = "Sacrifice yourself for Allah."
SWEP.Instructions = "Left Click to make yourself EXPLODE. Right click to taunt."
SWEP.DrawCrosshair = false
SWEP.Spawnable = true
SWEP.AdminSpawnable = true // Spawnable in singleplayer or by server admins
SWEP.ViewModel = "models/weapons/v_jb.mdl"
SWEP.WorldModel = "models/weapons/w_jb.mdl"
-- TTT Information Start
SWEP.Base = "weapon_tttbase"
SWEP.ViewModelFlip = false
SWEP.Kind = WEAPON_EQUIP1
SWEP.Slot = 7
SWEP.CanBuy = { ROLE_TRAITOR }
SWEP.LimitedStock = true
SWEP.AllowDrop = false
SWEP.AutoSpawnable = false
-- TTT Information End
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Primary.Delay = 3
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
/*---------------------------------------------------------
Reload does nothing
---------------------------------------------------------*/
function SWEP:Reload()
end
function SWEP:Initialize()
util.PrecacheSound("siege/big_explosion.wav")
util.PrecacheSound("siege/jihad.wav")
end
/*---------------------------------------------------------
Think does nothing
---------------------------------------------------------*/
function SWEP:Think()
end
/*---------------------------------------------------------
PrimaryAttack
---------------------------------------------------------*/
PS_HasItemEquipped = {}
ply = {}
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
if ply:PS_HasItemEquipped("custom1") then
timer.Simple(2, function() self:Asplode() end )
self.Owner:EmitSound( "taunt/custom1.mp3" )
end
end
end
--The asplode function
function SWEP:Asplode()
local k, v
// 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( "siege/big_explosion.wav", 500, 500 )
self.Owner:Kill( )
self.Owner:AddFrags( -1 )
for k, v in pairs( player.GetAll( ) ) do
v:ConCommand( "play siege/big_explosion.wav\n" )
end
end
/*---------------------------------------------------------
SecondaryAttack
---------------------------------------------------------*/
function SWEP:SecondaryAttack()
self.Weapon:SetNextSecondaryFire( CurTime() + 1 )
local TauntSound = Sound( "vo/npc/male01/overhere01.wav" )
self.Weapon:EmitSound( TauntSound )
// The rest is only done on the server
if (!SERVER) then return end
self.Weapon:EmitSound( TauntSound )
end
[/CODE]
Thanks for atleast giving me a read!
I think, the best way here is to create a table of sounds and, in SWEP explode function write something like:
[code]...
local sound = ply:GetNWInt('JihadSound') or 1
ply:EmitSound(soundsTable[sound])
...[/code]
So, soundsTable is the table of all your jihad sounds. On Pointshop equip function you can set this networked integer to needed table element id.
The code is server-sided ofc.
Update: oh, sorry! I didn't help you with your problem, but i wrote the other way of doing it and i think its simplier
New update :3...
Idk if this SWEP can work as it must, but here is example:
[code]
local explodeSounds = {
'blahblah.vaw', -- Sound number 1 (default)
'wow/such/donater.vaw', -- Sound number 2
'etc.vaw', -- Sound number 3
}
// Variables that are used on both client and server
SWEP.Author = "Stingwraith"
SWEP.Contact = "stingwraith123@yahoo.com"
SWEP.Purpose = "Sacrifice yourself for Allah."
SWEP.Instructions = "Left Click to make yourself EXPLODE. Right click to taunt."
SWEP.DrawCrosshair = false
SWEP.Spawnable = true
SWEP.AdminSpawnable = true // Spawnable in singleplayer or by server admins
SWEP.ViewModel = "models/weapons/v_jb.mdl"
SWEP.WorldModel = "models/weapons/w_jb.mdl"
-- TTT Information Start
SWEP.Base = "weapon_tttbase"
SWEP.ViewModelFlip = false
SWEP.Kind = WEAPON_EQUIP1
SWEP.Slot = 7
SWEP.CanBuy = { ROLE_TRAITOR }
SWEP.LimitedStock = true
SWEP.AllowDrop = false
SWEP.AutoSpawnable = false
-- TTT Information End
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Primary.Delay = 3
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
/*---------------------------------------------------------
Reload does nothing
---------------------------------------------------------*/
function SWEP:Reload()
end
function SWEP:Initialize()
util.PrecacheSound("siege/big_explosion.wav")
util.PrecacheSound("siege/jihad.wav")
end
/*---------------------------------------------------------
Think does nothing
---------------------------------------------------------*/
function SWEP:Think()
end
/*---------------------------------------------------------
PrimaryAttack
---------------------------------------------------------*/
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
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( "siege/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\n" )
-- end
end
/*---------------------------------------------------------
SecondaryAttack
---------------------------------------------------------*/
function SWEP:SecondaryAttack()
self.Weapon:SetNextSecondaryFire( CurTime() + 1 )
local TauntSound = Sound( "vo/npc/male01/overhere01.wav" )
self.Weapon:EmitSound( TauntSound )
// The rest is only done on the server
if (!SERVER) then return end
-- self.Weapon:EmitSound( TauntSound ) -- why the hell 2nd time?
end
[/code]
And the pointshop part of code should be like:
[code]
function ITEM:OnEquip(ply, modifications)
ply:SetNWInt('JihadSound', 2) -- number of custom sound with ID = 2
end
function ITEM:OnHolster(ply)
ply:SetNWInt('JihadSound', 1) -- number of default sound with ID = 1
end
[/code]
[QUOTE=iJohnny;49927511]I think, the best way here is to create a table of sounds and, in SWEP explode function write something like:
[code]...
local sound = ply:GetNWInt('JihadSound') or 1
ply:EmitSound(soundsTable[sound])
...[/code]
So, soundsTable is the table of all your jihad sounds. On Pointshop equip function you can set this networked integer to needed table element id.
The code is server-sided ofc.
Update: oh, sorry! I didn't help you with your problem, but i wrote the other way of doing it and i think its simplier
New update :3...
Idk if this SWEP can work as it must, but here is example:
[code]
local explodeSounds = {
'blahblah.vaw', -- Sound number 1 (default)
'wow/such/donater.vaw', -- Sound number 2
'etc.vaw', -- Sound number 3
}
// Variables that are used on both client and server
SWEP.Author = "Stingwraith"
SWEP.Contact = "stingwraith123@yahoo.com"
SWEP.Purpose = "Sacrifice yourself for Allah."
SWEP.Instructions = "Left Click to make yourself EXPLODE. Right click to taunt."
SWEP.DrawCrosshair = false
SWEP.Spawnable = true
SWEP.AdminSpawnable = true // Spawnable in singleplayer or by server admins
SWEP.ViewModel = "models/weapons/v_jb.mdl"
SWEP.WorldModel = "models/weapons/w_jb.mdl"
-- TTT Information Start
SWEP.Base = "weapon_tttbase"
SWEP.ViewModelFlip = false
SWEP.Kind = WEAPON_EQUIP1
SWEP.Slot = 7
SWEP.CanBuy = { ROLE_TRAITOR }
SWEP.LimitedStock = true
SWEP.AllowDrop = false
SWEP.AutoSpawnable = false
-- TTT Information End
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = false
SWEP.Primary.Ammo = "none"
SWEP.Primary.Delay = 3
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = false
SWEP.Secondary.Ammo = "none"
/*---------------------------------------------------------
Reload does nothing
---------------------------------------------------------*/
function SWEP:Reload()
end
function SWEP:Initialize()
util.PrecacheSound("siege/big_explosion.wav")
util.PrecacheSound("siege/jihad.wav")
end
/*---------------------------------------------------------
Think does nothing
---------------------------------------------------------*/
function SWEP:Think()
end
/*---------------------------------------------------------
PrimaryAttack
---------------------------------------------------------*/
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
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( "siege/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\n" )
-- end
end
/*---------------------------------------------------------
SecondaryAttack
---------------------------------------------------------*/
function SWEP:SecondaryAttack()
self.Weapon:SetNextSecondaryFire( CurTime() + 1 )
local TauntSound = Sound( "vo/npc/male01/overhere01.wav" )
self.Weapon:EmitSound( TauntSound )
// The rest is only done on the server
if (!SERVER) then return end
-- self.Weapon:EmitSound( TauntSound ) -- why the hell 2nd time?
end
[/code]
And the pointshop part of code should be like:
[code]
function ITEM:OnEquip(ply, modifications)
ply:SetNWInt('JihadSound', 2) -- number of custom sound with ID = 2
end
function ITEM:OnHolster(ply)
ply:SetNWInt('JihadSound', 1) -- number of default sound with ID = 1
end
[/code][/QUOTE]
Hey man! I really appreciate your help with this. I got a very similar error to last time. It says that 'self' is a nil value at line 58. I tried putting in 'self = {}' and after I did that I'm getting 'Weapon' is a nil value on the same line. I added 'Weapon = {}' and it's not adding a value to it.
[QUOTE=desmondooooo;49933675]Hey man! I really appreciate your help with this. I got a very similar error to last time. It says that 'self' is a nil value at line 58. I tried putting in 'self = {}' and after I did that I'm getting 'Weapon' is a nil value on the same line. I added 'Weapon = {}' and it's not adding a value to it.[/QUOTE]
remove self.Weapon and replace it with just self
it's old code and that shouldn't be used anymore
[QUOTE=MeepDarknessM;49934164]remove self.Weapon and replace it with just self
it's old code and that shouldn't be used anymore[/QUOTE]
Now it says 'SetNextPrimaryFire' is a nil value.
Sorry, you need to Log In to post a reply to this thread.