CSGO Vscript Examples

From Valve Developer Community
Jump to: navigation, search
Русский

<Counter-Strike: Global Offensive> The following are example vscripts for Counter-Strike: Global Offensive.

Find the closest player to a known entity

button <- Entities.FindByName( null, "button_01" ) // find the in-game entity "button_01" and store its handle
	
player <- Entities.FindByClassnameNearest( "player", button.GetOrigin(), 512 ) // find the nearest player within 512 hammer units to the button's origin and store their handle.

Turn decoys into nukes

// The following script is a think script, it can be attached to any entity.
// The Think function will be executed
// as long as the entity is alive and has its thinkfunction set to Think

// This can be found in hammer's sound picker
const EXPLOSION_SOUND = "c4.Explode"

// Called after the entity is spawned
function Precache()
{
	self.PrecacheScriptSound( EXPLOSION_SOUND )
}

// Every 0.1 seconds this function checks for decoy_projectiles in the map
// When found, it checks if the decoy is standing still
// If true create an env_explosion, trigger it and kill the decoy

function Think()
{
	local decoy = null
	while( ( decoy = Entities.FindByClassname( decoy, "decoy_projectile" ) ) != null )
	{		
		if( decoy.GetVelocity().Length() == 0 )
		{
			local owner = decoy.GetOwner()
			local origin = decoy.GetOrigin()

			local explosion = Entities.CreateByClassname( "env_explosion" )
			explosion.__KeyValueFromInt( "iMagnitude", 2000 )
			explosion.SetOrigin( origin )
			explosion.SetOwner( owner )	

			EntFireByHandle( explosion, "Explode", "", 0.1, owner, owner )
			DispatchParticleEffect( "explosion_c4_500", origin, origin )

			decoy.EmitSound( EXPLOSION_SOUND )
			decoy.Destroy()
		}		
	}
}

Create a timer to call a function independently

timer <- null

function OnTimer() 
{
	print(".")
}

// Called after the entity is spawned
function OnPostSpawn()
{
	if( timer == null )
	{
		timer = Entities.CreateByClassname( "logic_timer" )

		// set refire time
		timer.__KeyValueFromFloat( "RefireTime", 0.1 )

		timer.ValidateScriptScope()
		local scope = timer.GetScriptScope()
		
		// add a reference to the function
		scope.OnTimer <- OnTimer

		// connect the OnTimer output,
		// every time the timer fires the output, the function is executed
		timer.ConnectOutput( "OnTimer", "OnTimer" )

		// start the timer
		EntFireByHandle( timer, "Enable", "", 0, null, null )
	}
}

See also

External links