Примеры скриптов CS:GO
< Ru
Jump to navigation
Jump to search
На этой странице представлена информация об игре или программном обеспечении, 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 - ");
}
[Нужно сделать]
Смотрите также
Внешние ссылки
- Squirrel (programming language) - Ссылка на Wikipedia про Squirrel
- Squirrel: The Programming Language - Documentation and Sample Code