Примеры скриптов CS:GO

From Valve Developer Community
< Ru
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
English (en)Русский (ru)中文 (zh)Translate (Translate)
Icon-delisted.png
На этой странице представлена информация об игре или программном обеспечении, Counter-Strike: Global Offensive Counter-Strike: Global Offensive, которые более не доступны для покупки или загрузки в цифровом виде.
Здесь представлена историческая и техническая справка.

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

[Нужно сделать]

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

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