Примеры скриптов CSGO

From Valve Developer Community
Jump to: navigation, search
English

<Counter-Strike: Global Offensive> Ниже приведены примеры VScript'ов для Counter-Strike: Global Offensive.

Примеры

Найти ближайшего игрока возле энтити

buttonReference <- Entities.FindByName( null, "button_01" ); // найти энтити "button_01" и сохранить ее в переменной
	
player <- Entities.FindByClassnameNearest( "player", buttonReference.GetOrigin(), 512 ); // найти игрока в радиусе 512 юнитов от кнопки, и сохранить этого игрока в переменную

Превратить ложные гранаты в бомбы

//Этот скрипт должен быть присоединен к чему-то, вроде logic_script,
//но при работе с другими Энтити, скрипт будет работать независимо
//до тех пор, пока Энтити - жива, и у она настроена на функцию Think()

EXPLOSION_SOUND <- "c4.Explode"; //Можно найти в sound picker(обозреватель звуков) в Hammer'е

function Precache() //Функция работает тогда, когда скрипт (на карте) создается
{
	self.PrecacheScriptSound( EXPLOSION_SOUND );
}

//Каждую 0.1 секунды функция проверяет, есть ли decoy_projectiles (выброшенные лож.гранаты) на карте.
//Если такая находится, то оно проверяет, равна ли скорость вектору:(0,0,0)
//Если равна(true), то это означает, что лож.граната упала на землю и не двигается, и мы можем идти дальше.
//Создаем env_explosion и настраиваем, перемещаем его к лож.гранате.
//После чего мы должны удалить гранату.

function Think()
{
	ent <- null;
	while ((ent = Entities.FindByClassname(ent, "decoy_projectile")) != null)
	{		
		if(ent.GetVelocity().Length() == Vector(0,0,0).Length())
		{		
			owner <- ent.GetOwner();
			origin <- ent.GetOrigin();	
			
			exp <- Entities.CreateByClassname("env_explosion");
			exp.__KeyValueFromInt("iMagnitude", 2000);
					
			ent.EmitSound(EXPLOSION_SOUND);
									
			exp.SetOrigin(origin);
			exp.SetOwner(owner);
									
			EntFireByHandle(exp, "Explode", "", 0.1, owner,owner);						
			ent.Destroy();						
			DispatchParticleEffect("explosion_c4_500", origin, origin);
		}		
	}
}

Создать Таймер для независимого запуска функции

thinkTimer <- null;

//Используем "*имя* <- function()" вместо "function Think()"
//чтобы создать функцию-переменную.
TimerThink <- function() 
{
	//тут будет "думающий" скрипт таймера
	//он будет выполняться каждый раз, когда созданный таймер будет обрабатывать выходы(outputs)
	
	print("Tick - ");
}

function OnPostSpawn()
{
	if(thinkTimer == null)
	{
		thinkTimer = Entities.CreateByClassname("logic_timer");		//создать таймер
		thinkTimer.ValidateScriptScope(); 							//проверить, был ли он создан
		local timerScope = thinkTimer.GetScriptScope(); 			//получить "окружение" таймера
		
		timerScope.Think <- TimerThink; 							//функция Think в "окружении" таймера теперь является копией TimerThink из "окружения" скрипта
		EntFireByHandle(thinkTimer, "AddOutput", "OnTimer !self:RunScriptCode:Think():0:-1", 0, null, null); 
																	//ent_fire можно использовать в консоли, либо в Hammer
																	//ent_fire name Addoutput "OutputName Target:Input:Delay:RepeatTimes"
		
		thinkTimer.__KeyValueFromFloat("RefireTime", 0.1); 			//ставим частоту таймера. RefireTime - опция, которую можно узнать, отключив SmartEdit в Hammer'е.
		EntFireByHandle(thinkTimer, "Enable", "", 0, null, null); 	//и наконец, запускаем таймер.
	}
}

Присоединить функцию к Энтити во время работы таймера

thinkTimer <- null;

function OnPostSpawn()
{
	//Создает таймер и ставит функцию Think для запуска при каждом тике.
	if(thinkTimer == null)
	{
		thinkTimer = Entities.CreateByClassname("logic_timer");			//создать таймер
		thinkTimer.ValidateScriptScope(); 								//проверить, был ли он создан
		local timerScope = thinkTimer.GetScriptScope(); 				//получить "окружение" таймера										
									
		timerScope.mainScriptScope <- self.GetScriptScope();			//сохраняем "окружение" скрипта в переменную "окружения" таймера
		timerScope.DoThink <- function() { mainScriptScope.Think() };	//создаем функцию DoThink в "окружении" таймера, чтобы вызывать Think в этом скрипте.
		
		thinkTimer.ConnectOutput("OnTimer", "DoThink"); 				//Ставим функцию DoThink при каждом тике таймера
		
		thinkTimer.__KeyValueFromFloat("RefireTime", 0.1); 				//ставим частоту таймера. RefireTime - опция, которую можно узнать, отключив SmartEdit в Hammer'е.
		EntFireByHandle(thinkTimer, "Enable", "", 0, null, null); 		//и наконец, запускаем таймер.
	}
}

//Функция, которая будет использоваться каждый раз при тике таймера.
function Think()
{
	print("Tick - ");
}

To do

Смотрите также

Внешние ссылки