Примеры скриптов CS:GO
This page documents information about a game, Counter-Strike: Global Offensive, that is no longer available for purchase or download digitally.
It is covered here for historical and technical reference.
It is covered here for historical and technical reference.
Ниже приведены примеры 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 - ");
}
Нужно сделать:
Смотрите также
Внешние ссылки
- Squirrel (programming language) - Ссылка на Wikipedia про Squirrel
- Squirrel: The Programming Language - Documentation and Sample Code