All pastes #542401 Raw Edit

Stuff

public lua v1 · immutable
·published 2007-06-05 20:42 UTC
rendered paste body
TOOL.Category		= "Totster"TOOL.Name			= "#Advanced Turret"TOOL.Command		= nilTOOL.ConfigName		= ""TOOL.ClientConVar[ "key" ] 		    = "10"TOOL.ClientConVar[ "delay" ] 		= "0.05"TOOL.ClientConVar[ "toggle" ] 		= "0"TOOL.ClientConVar[ "force" ] 		= "1"TOOL.ClientConVar[ "model" ]        = "models/weapons/w_smg1.mdl"TOOL.ClientConVar[ "sound" ] 		= "0"TOOL.ClientConVar[ "damage" ] 		= "10"TOOL.ClientConVar[ "spread" ] 		= "0"TOOL.ClientConVar[ "numbullets" ]	= "1"TOOL.ClientConVar[ "automatic" ]	= "1"TOOL.ClientConVar[ "tracer" ] 		= "Tracer"cleanup.Register( "advanced_turrets" )// Precache these sounds..Sound( "ambient.electrical_zap_3" )Sound( "NPC_FloorTurret.Shoot" )// Add Default Language translation (saves adding it to the txt files)if ( CLIENT ) then	language.Add( "Tool_advanced_turret_name", "Advanced Turret" )	language.Add( "Tool_advanced_turret_desc", "This is an Advanced Turret Stool" )	language.Add( "Tool_advanced_turret_0", "Click somewhere to spawn an Advanced Turret. Click on an existing Advanced Turret to change it." )		language.Add( "Tool_advanced_turret_spread", "Bullet Spread" )	language.Add( "Tool_advanced_turret_numbullets", "Bullets per Shot" )	language.Add( "Tool_advanced_turret_force", "Bullet Force" )	language.Add( "Tool_advanced_turret_model", "Advanced Turret Model:" )	language.Add( "Tool_advanced_turret_sound", "Shoot Sound" )		language.Add( "Undone_advanced_turret", "Undone Advanced Turret" )		language.Add( "Cleanup_advanced_turrets", "Advanced Turret" )	language.Add( "Cleaned_advanced_turrets", "Cleaned up all Advanced Turrets" )	language.Add( "SBoxLimit_advanced_turrets", "You've reached the Advanced Turret limit!" )else	if server_settings.Int("sbox_maxadvanced_turrets", -1) == -1 then		CreateConVar("sbox_maxadvanced_turrets",3)	endendfunction TOOL:LeftClick( trace, worldweld )	worldweld = worldweld or false	if ( trace.Entity && trace.Entity:IsPlayer() ) then return false end		// If there's no physics object then we can't constraint it!	if ( SERVER && !util.IsValidPhysicsObject( trace.Entity, trace.PhysicsBone ) ) then return false end		if (CLIENT) then return true end		local ply = self:GetOwner()		local key	 		= self:GetClientNumber( "key" ) 	local delay 		= self:GetClientNumber( "delay" ) 	local toggle 		= self:GetClientNumber( "toggle" ) == 1	local force 		= self:GetClientNumber( "force" )	local model         = self:GetClientInfo( "model" )	local sound 		= self:GetClientInfo( "sound" )	local tracer 		= self:GetClientInfo( "tracer" )	local damage	 	= self:GetClientNumber( "damage" )	local spread	 	= self:GetClientNumber( "spread" )	local numbullets 	= self:GetClientNumber( "numbullets" )		if ( !SinglePlayer() ) then			// Clamp stuff in multiplayer.. because people are idiots				delay		= math.Clamp( delay, 0.05, 3600 )		numbullets	= 1		force		= math.Clamp( force, 0.01, 100 )		spread		= math.Clamp( spread, 0, 1 )		damage		= math.Clamp( damage, 0, 500 )		end			// We shot an existing advanced_turret - just change its values	if ( trace.Entity:IsValid() && trace.Entity:GetClass() == "gmod_adv_turret" && trace.Entity:GetTable().pl == ply ) then		trace.Entity:GetTable():SetDamage( damage )		trace.Entity:GetTable():SetDelay( delay )		trace.Entity:GetTable():SetToggle( toggle )		trace.Entity:GetTable():SetNumBullets( numbullets )		trace.Entity:GetTable():SetSpread( spread )		trace.Entity:GetTable():SetForce( force )		trace.Entity:GetTable():SetModel( model )		trace.Entity:GetTable():SetSound( sound )		trace.Entity:GetTable():SetTracer( tracer )		return true			end		if ( !self:GetSWEP():CheckLimit( "advanced_turrets" ) ) then return false end	if ( trace.Entity != NULL && (!trace.Entity:IsWorld() || worldweld) ) then			trace.HitPos = trace.HitPos + trace.HitNormal * 2		else			trace.HitPos = trace.HitPos + trace.HitNormal * 2		end	local advanced_turret = MakeTurret( ply, trace.HitPos, nil, key, delay, toggle, damage, force, sound, numbullets, spread, tracer )	/*	local Angle = trace.HitNormal:Angle()		Angle:RotateAroundAxis( Angle:Forward(), 90 )		Angle:RotateAroundAxis( Angle:Forward(), 90 )	*/	advanced_turret:SetAngles( trace.HitNormal:Angle() )		local weld		// Don't weld to world	if ( trace.Entity != NULL && (!trace.Entity:IsWorld() || worldweld) ) then			weld = constraint.Weld( advanced_turret, trace.Entity, 0, trace.PhysicsBone, 0, 0, true )				// Don't hit your parents or you will go to jail.				advanced_turret:GetPhysicsObject():EnableCollisions( false )		advanced_turret:GetTable().nocollide = true			end		undo.Create("Advanced Turret")		undo.AddEntity( advanced_turret )		undo.AddEntity( weld )		undo.SetPlayer( ply )	undo.Finish()		return trueendfunction TOOL:RightClick( trace )	return self:LeftClick( trace, true )endif (SERVER) then	function MakeTurret( ply, Pos, Ang, key, delay, toggle, damage, force, model, sound, numbullets, spread, tracer, Vel, aVel, frozen, nocollide )			if ( !ply:CheckLimit( "advanced_turrets" ) ) then return nil end			local advanced_turret = ents.Create( "gmod_adv_turret" )		if (!advanced_turret:IsValid()) then return false end		advanced_turret:SetPos( Pos )		if ( Ang ) then advanced_turret:SetAngles( Ang ) end		advanced_turret:Spawn()				advanced_turret:GetTable():SetDamage( damage )		advanced_turret:GetTable():SetPlayer( ply )				advanced_turret:GetTable():SetSpread( spread )		advanced_turret:GetTable():SetForce( force )		advanced_turret:GetTable():SetModel( model )		advanced_turret:GetTable():SetSound( sound )		advanced_turret:GetTable():SetTracer( tracer )				advanced_turret:GetTable():SetNumBullets( numbullets )				advanced_turret:GetTable():SetDelay( delay )		advanced_turret:GetTable():SetToggle( toggle )		numpad.OnDown( 	 ply, 	key, 	"Advanced_Turret_On", 	advanced_turret )		numpad.OnUp( 	 ply, 	key, 	"Advanced_Turret_Off", 	advanced_turret )		if ( nocollide == true ) then advanced_turret:GetPhysicsObject():EnableCollisions( false ) end		local ttable = 		{			key		= key,			delay 		= delay,			toggle 		= toggle,			damage 		= damage,			pl			= ply,			nocollide 	= nocollide,			force		= force,			model       = model,			sound		= sound,			spread		= spread,			numbullets	= numbullets,			tracer		= tracer		}		table.Merge( advanced_turret:GetTable(), ttable )				ply:AddCount( "advanced_turrets", advanced_turret )		ply:AddCleanup( "advanced_turrets", advanced_turret )				DoPropSpawnedEffect( advanced_turret )		return advanced_turret			end		duplicator.RegisterEntityClass( "gmod_adv_turret", MakeTurret, "Pos", "Ang", "key", "delay", "toggle", "damage", "force", "model", "sound", "numbullets", "spread", "tracer", "Vel", "aVel", "frozen", "nocollide" )endfunction TOOL:UpdateGhostAdvancedTurret( ent, player )	if ( !ent ) then return end	if ( !ent:IsValid() ) then return end	local tr 	= utilx.GetPlayerTrace( player, player:GetCursorAimVector() )	local trace 	= util.TraceLine( tr )	if (!trace.Hit) then return end		if (trace.Entity && trace.Entity:GetClass() == "gmod_adv_turret" || trace.Entity:IsPlayer()) then			ent:SetNoDraw( true )		return			end		local Ang = trace.HitNormal:Angle()	Ang.pitch = Ang.pitch + 0		local min = ent:OBBMins()	 ent:SetPos( trace.HitPos - trace.HitNormal * min.z )	ent:SetAngles( Ang )		ent:SetNoDraw( false )	endfunction TOOL:Think()	if (!self.GhostEntity || !self.GhostEntity:IsValid() || self.GhostEntity:GetModel() != self:GetClientInfo( "model" )) then		self:MakeGhostEntity( self:GetClientInfo( "model" ), Vector(0,0,0), Angle(0,0,0) )	end		self:UpdateGhostAdvancedTurret( self.GhostEntity, self:GetOwner() )	endfunction TOOL.BuildCPanel( CPanel )	// HEADER	CPanel:AddControl( "Header", { Text = "#Tool_advanced_turret_name", Description	= "#Tool_advanced_turret_desc" }  )		// Presets	local params = { Label = "#Presets", MenuButton = 1, Folder = "advanced_turret", Options = {}, CVars = {} }				params.Options.default = {			advanced_turret_key			= 		3,			advanced_turret_delay		=		0.2,			advanced_turret_toggle		=		1,			advanced_turret_force		=		1,			advanced_turret_model       =       "models/weapons/w_smg1.mdl",			advanced_turret_sound		=		"pistol",			advanced_turret_damage		=		10,			advanced_turret_spread		=		0,			advanced_turret_numbullets	=		1,		}					table.insert( params.CVars, "advanced_turret_key" )		table.insert( params.CVars, "advanced_turret_delay" )		table.insert( params.CVars, "advanced_turret_toggle" )		table.insert( params.CVars, "advanced_turret_force" )		table.insert( params.CVars, "advanced_turret_model" )		table.insert( params.CVars, "advanced_turret_sound" )		table.insert( params.CVars, "advanced_turret_damage" )		table.insert( params.CVars, "advanced_turret_spread" )		table.insert( params.CVars, "advanced_turret_numbullets" )			CPanel:AddControl( "ComboBox", params )		// Keypad	CPanel:AddControl( "Numpad", { Label = "#Advanced Turret Key", Command = "advanced_turret_key", ButtonSize = 22 } )		// Advanced Turret Models	local advturretModel = {Label = "#Tool_advanced_turret_model", MenuButton = 0, Options={}, CVars = {}}	    advturretModel["Options"]["#SMG1"]	=	{ advanced_turret_model = "models/weapons/w_smg1.mdl" }		advturretModel["Options"]["#Physics Gun"]	=	{ advanced_turret_model = "models/weapons/w_physics.mdl" }		advturretModel["Options"]["#Crossbow"]	=	{ advanced_turret_model = "models/weapons/W_crossbow.mdl" }			CPanel:AddControl("ComboBox", advturretModel )		// Shot sounds	local weaponSounds = {Label = "#Tool_advanced_turret_sound", MenuButton = 0, Options={}, CVars = {}}		weaponSounds["Options"]["#No Weapon"]	= { advanced_turret_sound = "" }		weaponSounds["Options"]["#Pistol"]		= { advanced_turret_sound = "Weapon_Pistol.Single" }		weaponSounds["Options"]["#SMG"]			= { advanced_turret_sound = "Weapon_SMG1.Single" }		weaponSounds["Options"]["#AR2"]			= { advanced_turret_sound = "Weapon_AR2.Single" }		weaponSounds["Options"]["#Shotgun"]		= { advanced_turret_sound = "Weapon_Shotgun.Single" }		weaponSounds["Options"]["#Floor Turret"]	= { advanced_turret_sound = "NPC_FloorTurret.Shoot" }		weaponSounds["Options"]["#Airboat Heavy"]	= { advanced_turret_sound = "Airboat.FireGunHeavy" }		weaponSounds["Options"]["#Zap"]	= { advanced_turret_sound = "ambient.electrical_zap_3" }					CPanel:AddControl("ComboBox", weaponSounds )		// Tracer	local TracerType = {Label = "#Tracer", MenuButton = 0, Options={}, CVars = {}}		TracerType["Options"]["#Default"]			= { advanced_turret_tracer = "Tracer" }		TracerType["Options"]["#AR2 Tracer"]		= { advanced_turret_tracer = "AR2Tracer" }		TracerType["Options"]["#Airboat Tracer"]	= { advanced_turret_tracer = "AirboatGunHeavyTracer" }		TracerType["Options"]["#Laser"]				= { advanced_turret_tracer = "LaserTracer" }					CPanel:AddControl("ComboBox", TracerType )		// Various controls that you should play with!		if ( SinglePlayer() ) then			CPanel:AddControl( "Slider",  { Label	= "#Tool_advanced_turret_numbullets",									Type	= "Integer",									Min		= 1,									Max		= 10,									Command = "advanced_turret_numbullets" }	 )	end	CPanel:AddControl( "Slider",  { Label	= "#Damage",									Type	= "Float",									Min		= 0,									Max		= 100,									Command = "advanced_turret_damage" }	 )	CPanel:AddControl( "Slider",  { Label	= "#Tool_advanced_turret_spread",									Type	= "Float",									Min		= 0,									Max		= 1.0,									Command = "advanced_turret_spread" }	 )	CPanel:AddControl( "Slider",  { Label	= "#Tool_advanced_turret_force",									Type	= "Float",									Min		= 0,									Max		= 500,									Command = "advanced_turret_force" }	 )										// The delay between shots.	if ( SinglePlayer() ) then			CPanel:AddControl( "Slider",  { Label	= "#Delay",									Type	= "Float",									Min		= 0.01,									Max		= 1.0,									Command = "advanced_turret_delay" }	 )										else			CPanel:AddControl( "Slider",  { Label	= "#Delay",									Type	= "Float",									Min		= 0.05,									Max		= 1.0,									Command = "advanced_turret_delay" }	 )		end		// The toggle switch.	CPanel:AddControl( "Checkbox", { Label = "#Toggle", Command = "advanced_turret_toggle" } )end