Moderator elections are being held. See Valve Developer Community:Moderator elections for more details.
Users who would like to run for moderator must be autoconfirmed and have at least 100 edits. Users can check their own edit count at Special:Preferences.

CS:GO VScript Examples/ru

From Valve Developer Community
Jump to: navigation, search

Counter-Strike: Global Offensive Ниже приведены примеры VScript'ов для Counter-Strike: Global Offensive 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 - ");
}

Blank image.pngНужно сделать:

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

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