Hello! I've been working on porting of TTT Dear Sister v2 SWEP to TTT. So far I can equip it, however when I try to fire I get greeted with this error:
[code]
[ERROR] addons/ttt dear sister/lua/weapons/ttt_dearsister/shared.lua:63: attempt to call global 'TurnOFFEffects' (a nil value)
1. unknown - addons/ttt dear sister/lua/weapons/ttt_dearsister/shared.lua:63
[/code]
Been looking around on forums but I can't find a fix. Here is the code:
[code]
---- Example TTT custom weapon
resource.AddFile( "materials/vgui/entities/dearsister.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_nodrop.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/slowmogun.vmt" )
resource.AddFile( "sound/weapons/dearsister_127089860/dearsister.wav" )
resource.AddFile( "sound/weapons/dearsister_127089860/dearsister_rmx.wav" )
-- First some standard GMod stuff
if SERVER then
AddCSLuaFile( "shared.lua" )
end
if CLIENT then
SWEP.PrintName = "Dear Sister"
SWEP.Slot = 6 -- add 1 to get the slot number key
SWEP.ViewModelFOV = 72
SWEP.ViewModelFlip = true
end
-- Always derive from weapon_tttbase.
SWEP.Base = "weapon_tttbase"
--- Standard GMod values
SWEP.HoldType = "pistol"
SWEP.Primary.Delay = 0.08
SWEP.Primary.Recoil = 6
SWEP.Primary.RecoilXRand = 1.5
SWEP.Primary.RecoilYRand = 0.1
SWEP.Primary.Automatic = false
SWEP.Primary.Damage = 9999999999999999999999
SWEP.Primary.Force = 9999999999999999999999
SWEP.Primary.Cone = 0.025
SWEP.Primary.Ammo = "dearsister"
SWEP.Primary.ClipSize = 1
SWEP.Primary.ClipMax = 1
SWEP.Primary.DefaultClip = 1
SWEP.Primary.Sound = Sound( "weapons/dearsister/dearsister.wav" )
SWEP.IronSightsPos = Vector( 5.15, -2, 2.6 )
SWEP.IronSightsAng = Vector( 0, 0, 0 )
SWEP.ViewModel = "models/weapons/v_pist_deagle.mdl"
SWEP.WorldModel = "models/weapons/w_pist_deagle.mdl"
function SWEP:PrimaryAttack()
if ( !self:CanPrimaryAttack() ) then return end
if (SERVER) then
game.SetTimeScale( 0.1 )
AdjustTimeScale( 3.2, 1 )
timer.Simple(1, function() self.Owner:DropWeapon(self.Owner:GetActiveWeapon()) end) --I couldn't fix this line.
end
-- RunConsoleCommand( "pp_dof", "1" )
RunConsoleCommand( "pp_motionblur", "1" )
local TurnOFFEffects( 3.2 )
self.Weapon:SetNextSecondaryFire( CurTime() + self.Primary.Delay )
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
if ( !self:CanPrimaryAttack() ) then return end
self.Weapon:EmitSound( self.Primary.Sound )
self:CSShootBullet( self.Primary.Damage, self.Primary.Recoil, self.Primary.NumShots, self.Primary.Cone )
self:TakePrimaryAmmo( 1 )
self.Owner:ViewPunch( Angle( math.Rand(-self.Primary.RecoilXRand,-self.Primary.RecoilXRand) * self.Primary.Recoil, math.Rand(self.Primary.RecoilYRand,-self.Primary.RecoilYRand) *self.Primary.Recoil, 0 ) )
end
--- 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_EQUIP1
-- If AutoSpawnable is true and SWEP.Kind is not WEAPON_EQUIP1/2, then this gun can
-- be spawned as a random weapon. Of course this AK is special equipment so it won't,
-- but for the sake of example this is explicitly set to false anyway.
SWEP.AutoSpawnable = false
-- The AmmoEnt is the ammo entity that can be picked up when carrying this gun.
SWEP.AmmoEnt = "dearsister"
-- CanBuy is a table of ROLE_* entries like ROLE_TRAITOR and ROLE_DETECTIVE. If
-- a role is in this table, those players can buy this.
SWEP.CanBuy = { ROLE_DETECTIVE }
-- InLoadoutFor is a table of ROLE_* entries that specifies which roles should
-- receive this weapon as soon as the round starts. In this case, none.
SWEP.InLoadoutFor = nil
-- If LimitedStock is true, you can only buy one per round.
SWEP.LimitedStock = true
-- 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 = false
-- Equipment menu information is only needed on the client
if CLIENT then
-- Path to the icon material
SWEP.Icon = "VGUI/ttt/dearsister"
-- Text shown in the equip menu
SWEP.EquipMenuData = {
type = "Weapon",
desc = "Example custom weapon."
};
end
-- Tell the server that it should download our icon to clients.
if SERVER then
-- It's important to give your icon a unique name. GMod does NOT check for
-- file differences, it only looks at the name. This means that if you have
-- an icon_ak47, and another server also has one, then players might see the
-- other server's dumb icon. Avoid this by using a unique name.
resource.AddFile("materials/VGUI/ttt/dearsister.vmt")
end
[/code]
Anyone know a possible fix?
local TurnOFFEffects( 3.2 ) this is not valid syntax, nor is that a default function
[QUOTE=code_gs;50876927]local TurnOFFEffects( 3.2 ) this is not valid syntax, nor is that a default function[/QUOTE]
I have tried removing local and it still provides the same error.
Remove the complete line.
It's like code_gs said:
[QUOTE=code_gs;50876927]local TurnOFFEffects( 3.2 ) this is not valid syntax, nor is that a default function[/QUOTE]
[QUOTE=markusmarkusz;50877864]Remove the complete line.
It's like code_gs said:[/QUOTE]
Ok so there has been progress. There are no more errors (Had to remove another line) but slow motion lasts forever and no sound is heard.
[code]
Failed to load sound "sound\weapons\dearsister\dearsister.wav", file probably missing from disk/repository
[/code]
I'm sure I have it in the right place, I even checked the server files. I'm not sure how to fix the forever slowmotion issue, here is the current code.
[code]
---- Example TTT custom weapon
resource.AddFile( "materials/vgui/entities/dearsister.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_nodrop.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/slowmogun.vmt" )
resource.AddFile( "sound/weapons/dearsister_127089860/dearsister.wav" )
resource.AddFile( "sound/weapons/dearsister_127089860/dearsister_rmx.wav" )
-- First some standard GMod stuff
if SERVER then
AddCSLuaFile( "shared.lua" )
end
if CLIENT then
SWEP.PrintName = "Dear Sister"
SWEP.Slot = 6 -- add 1 to get the slot number key
SWEP.ViewModelFOV = 72
SWEP.ViewModelFlip = true
end
-- Always derive from weapon_tttbase.
SWEP.Base = "weapon_tttbase"
--- Standard GMod values
SWEP.HoldType = "pistol"
SWEP.Primary.Delay = 0.08
SWEP.Primary.Recoil = 6
SWEP.Primary.RecoilXRand = 1.5
SWEP.Primary.RecoilYRand = 0.1
SWEP.Primary.Automatic = false
SWEP.Primary.Damage = 9999999999999999999999
SWEP.Primary.Force = 9999999999999999999999
SWEP.Primary.Cone = 0.025
SWEP.Primary.Ammo = "dearsister"
SWEP.Primary.ClipSize = 1
SWEP.Primary.ClipMax = 1
SWEP.Primary.DefaultClip = 1
SWEP.Primary.Sound = "sound/weapons/dearsister/dearsister.wav"
SWEP.IronSightsPos = Vector( 5.15, -2, 2.6 )
SWEP.IronSightsAng = Vector( 0, 0, 0 )
SWEP.ViewModel = "models/weapons/v_pist_deagle.mdl"
SWEP.WorldModel = "models/weapons/w_pist_deagle.mdl"
function SWEP:PrimaryAttack()
if ( !self:CanPrimaryAttack() ) then return end
if (SERVER) then
game.SetTimeScale( 0.1 )
AdjustTimeScale( 3.2, 1 )
timer.Simple(1, function() self.Owner:DropWeapon(self.Owner:GetActiveWeapon()) end) --I couldn't fix this line.
end
-- RunConsoleCommand( "pp_dof", "1" )
RunConsoleCommand( "pp_motionblur", "1" )
self.Weapon:SetNextSecondaryFire( CurTime() + self.Primary.Delay )
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
if ( !self:CanPrimaryAttack() ) then return end
self.Weapon:EmitSound( self.Primary.Sound )
self:TakePrimaryAmmo( 1 )
self.Owner:ViewPunch( Angle( math.Rand(-self.Primary.RecoilXRand,-self.Primary.RecoilXRand) * self.Primary.Recoil, math.Rand(self.Primary.RecoilYRand,-self.Primary.RecoilYRand) *self.Primary.Recoil, 0 ) )
end
--- 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_EQUIP1
-- If AutoSpawnable is true and SWEP.Kind is not WEAPON_EQUIP1/2, then this gun can
-- be spawned as a random weapon. Of course this AK is special equipment so it won't,
-- but for the sake of example this is explicitly set to false anyway.
SWEP.AutoSpawnable = false
-- The AmmoEnt is the ammo entity that can be picked up when carrying this gun.
SWEP.AmmoEnt = "dearsister"
-- CanBuy is a table of ROLE_* entries like ROLE_TRAITOR and ROLE_DETECTIVE. If
-- a role is in this table, those players can buy this.
SWEP.CanBuy = { ROLE_DETECTIVE }
-- InLoadoutFor is a table of ROLE_* entries that specifies which roles should
-- receive this weapon as soon as the round starts. In this case, none.
SWEP.InLoadoutFor = nil
-- If LimitedStock is true, you can only buy one per round.
SWEP.LimitedStock = true
-- 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 = false
-- Equipment menu information is only needed on the client
if CLIENT then
-- Path to the icon material
SWEP.Icon = "VGUI/ttt/dearsister"
-- Text shown in the equip menu
SWEP.EquipMenuData = {
type = "Weapon",
desc = "Example custom weapon."
};
end
-- Tell the server that it should download our icon to clients.
if SERVER then
-- It's important to give your icon a unique name. GMod does NOT check for
-- file differences, it only looks at the name. This means that if you have
-- an icon_ak47, and another server also has one, then players might see the
-- other server's dumb icon. Avoid this by using a unique name.
resource.AddFile("materials/VGUI/ttt/dearsister.vmt")
end
[/code]
dearsister_127089860 is not dearsister
The TurnOFFEffects function probably reset the timescale, instead of removing the line you need to find the function
[QUOTE=Coffeee;50878372]The TurnOFFEffects function probably reset the timescale, instead of removing the line you need to find the function[/QUOTE]
You were right, it used it's own base so I had to grab some of the functions from there and add it to the swep. it works great now! Code below for anyone interested in trying it. (Audio and other files not included)
[code]
---- Example TTT custom weapon
resource.AddFile( "materials/vgui/entities/dearsister.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_nodrop.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide.vmt" )
resource.AddFile( "materials/vgui/entities/dearsister_suicide_rmx.vmt" )
resource.AddFile( "materials/vgui/entities/slowmogun.vmt" )
resource.AddFile( "sound/weapons/dearsister/dearsister.wav" )
resource.AddFile( "sound/weapons/dearsister_127089860/dearsister_rmx.wav" )
-- First some standard GMod stuff
if SERVER then
AddCSLuaFile( "shared.lua" )
end
if CLIENT then
SWEP.PrintName = "Dear Sister"
SWEP.Slot = 6 -- add 1 to get the slot number key
SWEP.ViewModelFOV = 72
SWEP.ViewModelFlip = true
end
-- Always derive from weapon_tttbase.
SWEP.Base = "weapon_tttbase"
--- Standard GMod values
SWEP.HoldType = "pistol"
SWEP.Primary.Delay = 0.08
SWEP.Primary.Recoil = 6
SWEP.Primary.RecoilXRand = 1.5
SWEP.Primary.RecoilYRand = 0.1
SWEP.Primary.Automatic = false
SWEP.Primary.Damage = 9999999999999999999999
SWEP.Primary.Force = 9999999999999999999999
SWEP.Primary.Cone = 0.025
SWEP.Primary.Ammo = "dearsister"
SWEP.Primary.ClipSize = 1
SWEP.Primary.ClipMax = 1
SWEP.Primary.DefaultClip = 1
SWEP.Primary.Sound = Sound( "weapons/dearsister/dearsister.wav" )
SWEP.IronSightsPos = Vector( 5.15, -2, 2.6 )
SWEP.IronSightsAng = Vector( 0, 0, 0 )
SWEP.ViewModel = "models/weapons/v_pist_deagle.mdl"
SWEP.WorldModel = "models/weapons/w_pist_deagle.mdl"
function SWEP:PrimaryAttack()
if ( !self:CanPrimaryAttack() ) then return end
if (SERVER) then
game.SetTimeScale( 0.1 )
AdjustTimeScale( 3.2, 1 )
timer.Simple(1, function() self.Owner:DropWeapon(self.Owner:GetActiveWeapon()) end) --I couldn't fix this line.
end
-- RunConsoleCommand( "pp_dof", "1" )
RunConsoleCommand( "pp_motionblur", "1" )
TurnOFFEffects( 3.2 )
self.Weapon:SetNextSecondaryFire( CurTime() + self.Primary.Delay )
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
if ( !self:CanPrimaryAttack() ) then return end
self.Weapon:EmitSound( self.Primary.Sound )
self:CSShootBullet( self.Primary.Damage, self.Primary.Recoil, self.Primary.NumShots, self.Primary.Cone )
self:TakePrimaryAmmo( 1 )
self.Owner:ViewPunch( Angle( math.Rand(-self.Primary.RecoilXRand,-self.Primary.RecoilXRand) * self.Primary.Recoil, math.Rand(self.Primary.RecoilYRand,-self.Primary.RecoilYRand) *self.Primary.Recoil, 0 ) )
end
function AdjustTimeScale( t, s )
timer.Simple( t, function() game.SetTimeScale( s ) end )
end
function SWEP:Reload()
self.Weapon:DefaultReload( ACT_VM_RELOAD );
self:SetIronsights( false )
if ( SERVER ) then self.Owner:CrosshairEnable() end
end
function SWEP:Deploy()
-- self.Owner:ConCommand("pp_dof_initlength 256\n")
-- self.Owner:ConCommand("pp_dof_spacing 512\n")
RunConsoleCommand( "pp_motionblur_addalpha", "0.2")
RunConsoleCommand( "pp_motionblur_delay", "0.0")
RunConsoleCommand( "pp_motionblur_drawalpha", "1")
if ( SERVER ) and ( self.Weapon:GetNetworkedBool( "Ironsights" ) ) then self.Owner:CrosshairDisable() end
return true
end
function AdjustAngles( t, r )
local function GetEyeAngles()
local n = LocalPlayer():EyeAngles()
return n
end
hook.Add( "GetEyeAngles", GetEyeAngles)
timer.Simple( t, function()
LocalPlayer():SetEyeAngles( Angle( GetEyeAngles().pitch, GetEyeAngles().yaw, r ) ) end)
end
function SWEP:CSShootBullet( dmg, recoil, numbul, cone )
numbul = numbul or 1
cone = cone or 0.01
local bullet = {}
bullet.Num = numbul
bullet.Src = self.Owner:GetShootPos() // Source
bullet.Dir = self.Owner:GetAimVector() // Dir of bullet
bullet.Spread = Vector( cone, cone, 0 ) // Aim Cone
bullet.Tracer = self.TracerFreq // Show a tracer on every x bullets
bullet.Force = self.ForceApply // Amount of force to give to phys objects
bullet.Damage = dmg
self.Owner:FireBullets( bullet )
self.Weapon:SendWeaponAnim( ACT_VM_PRIMARYATTACK ) // View model animation
self.Owner:MuzzleFlash() // Crappy muzzle light
self.Owner:SetAnimation( PLAYER_ATTACK1 ) // 3rd Person Animation
end
function TurnOFFEffects( t )
timer.Simple( t, function() RunConsoleCommand( "pp_motionblur", "0" ) end )
-- timer.Simple( t, function() RunConsoleCommand( "pp_dof", "0" ) end )
end
--- 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_EQUIP1
-- If AutoSpawnable is true and SWEP.Kind is not WEAPON_EQUIP1/2, then this gun can
-- be spawned as a random weapon. Of course this AK is special equipment so it won't,
-- but for the sake of example this is explicitly set to false anyway.
SWEP.AutoSpawnable = false
-- The AmmoEnt is the ammo entity that can be picked up when carrying this gun.
SWEP.AmmoEnt = "dearsister"
-- CanBuy is a table of ROLE_* entries like ROLE_TRAITOR and ROLE_DETECTIVE. If
-- a role is in this table, those players can buy this.
SWEP.CanBuy = { ROLE_DETECTIVE }
-- InLoadoutFor is a table of ROLE_* entries that specifies which roles should
-- receive this weapon as soon as the round starts. In this case, none.
SWEP.InLoadoutFor = nil
-- If LimitedStock is true, you can only buy one per round.
SWEP.LimitedStock = true
-- 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 = false
-- Equipment menu information is only needed on the client
if CLIENT then
-- Path to the icon material
SWEP.Icon = "VGUI/ttt/dearsister"
-- Text shown in the equip menu
SWEP.EquipMenuData = {
type = "Weapon",
desc = "Example custom weapon."
};
end
-- Tell the server that it should download our icon to clients.
if SERVER then
-- It's important to give your icon a unique name. GMod does NOT check for
-- file differences, it only looks at the name. This means that if you have
-- an icon_ak47, and another server also has one, then players might see the
-- other server's dumb icon. Avoid this by using a unique name.
resource.AddFile("materials/VGUI/ttt/dearsister.vmt")
end
[/code]
Sorry, you need to Log In to post a reply to this thread.