Ну что можно сказать о скриптах. На них держатся все игровые сцены, когда Вы не можете управлять своим героем. В КОДе это пролетающие самолёты, взрывающиеся и идущие на дно корабли, горящик люди, выбегающие из транспортников, элементарная "автоматическая" погрузка в грузовики и перевозка главного героя на место битвы. Даже стрельба немцев и союзников друг в друга- всё это один большой сложнейший скрипт. Но поскольку мы не собираемся (я надеюсь =) ) создавать сложные миссии для одиночной игры, мы рассмотрим лишь элементарные скрипты и их правильное написание/оформление, чтобы сделать вашу mp карту более реалистичной , интересной и , главное, не скучной
Пример 1. mp_return_to_pavlov(CoD = Call of Duty)
Вроде бы существует 2 версии этой карты, но я взял первую версию. Итак, переименовываем формат .iwd в .zip/.rar , распаковываем архив, лезем в maps/mp и находим там 4 файла .gsc . Рассмотрим сначала оснвной mp_return_to_pavlov.gsc. Открыв его, видим следующий скрипт :
Code
main()
{
maps\mp\_load::main();
ambientPlay("ambient_mp_return_to_pavlov");
maps\mp\stukafly_pav::main();
maps\mp\mortar::main();
maps\mp\pavlov_fx::main();
game["allies"] = "russian";
game["axis"] = "german";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["russian_soldiertype"] = "coats";
game["german_soldiertype"] = "winterdark";
setcvar("r_glowbloomintensity0","1");
setcvar("r_glowbloomintensity1","1");
setcvar("r_glowskybleedintensity0",".25");
getent ("kellerradio","targetname") playloopsound ("radio");
getent ("adolfradio","targetname") playloopsound ("radio1");
getent ("fliegen","targetname") playloopsound ("fliegen");
getent ("feuer","targetname") playloopsound ("fire");
getent ("feuer1","targetname") playloopsound ("fire");
getent ("feuer2","targetname") playloopsound ("fire");
if((getcvar("g_gametype") == "hq"))
{
level.radio = [];
level.radio[0] = spawn("script_model", (1344, -288, 275));
level.radio[0].angles = (0, 180, 0);
level.radio[1] = spawn("script_model", (1063, -243, -29));
level.radio[1].angles = (0, 0, 0);
level.radio[2] = spawn("script_model", (-324, -2017, 378));
level.radio[2].angles = (0, 180, 0);
level.radio[3] = spawn("script_model", (-352, -2194, 91));
level.radio[3].angles = (0, 180, 0);
level.radio[4] = spawn("script_model", (1405, -2682, -35));
level.radio[4].angles = (0, 270, 0);
level.radio[5] = spawn("script_model", (1561, -2734, 419));
level.radio[5].angles = (0, 0, 0);
level.radio[6] = spawn("script_model", (-43.7422, -3189.07, 38));
level.radio[6].angles = (0, 149, 0);
}
}
1.) Замечательно. Строчка "maps\mp\_load::main()" должна быть в любом случае, так как отвечает вообще за то, чтобы карта загрузилась. Далее идут параметры "принудительной" загрузки еще 3-х .gsc файлов, которые автор счёл нужным создать. Параметр ambientPlay("ambient_mp_return_to_pavlov") отвечает за музон, играющий за кадром. То бишь это музыка, играющая на протяжении всей игры, как правило монотонная Далее идут параметры самих персонажей, то бишь можно менять русских на британцев, а немцев на американцев и получить мега бойню. Можно также менять униформу солдат и выдать американцам летние шмотки в зимнее время. Если эти строки не вводить, то все будет по дефолту. Далее автор выделил 3 строчки , "принудительно " изменяющих настройки графики , то бишь это настройка неба и чего то еще
Следующими идут 6 созданных на карте определенных "предметов", в частности это 2 рации (с заданным звуком, выходящим из этой самой рации) и 3 звуками горящих зданий/вещей. То есть что то будет гореть, но что именно вы не увидите, так как это только звук и не более того.
Далее парень дал указания для режима hq ( штаб). Здесь всё понятно. Указана модель рации , трёхмерные координаты и угол поворота рации
2) Рассмотрим файл stukafly_pav.gsc. Открыв его обнаружим следующий скрипт:
Code
main()
{
level thread planes();
}
planes()
{
level.PlaneSpeed = 5;
stuka1 = getent ("stuka1","targetname");
stuka2 = getent ("stuka2","targetname");
stuka3 = getent ("stuka3","targetname");
stuka4 = getent ("stuka4","targetname");
temp = getent (stuka1.target,"targetname");
stuka1.dest = temp.origin;
stuka1.start = stuka1.origin;
stuka1 hide();
temp = getent (stuka2.target,"targetname");
stuka2.dest = temp.origin;
stuka2.start = stuka2.origin;
stuka2 hide();
temp = getent (stuka3.target,"targetname");
stuka3.dest = temp.origin;
stuka3.start = stuka3.origin;
stuka3 hide();
temp = getent (stuka4.target,"targetname");
stuka4.dest = temp.origin;
stuka4.start = stuka4.origin;
stuka4 hide();
wait 60;
stuka1 thread plane_flyby("stuka_flyby");
stuka2 thread plane_flyby("stuka_flyby");
stuka3 thread plane_flyby("stuka_flyby");
stuka4 thread plane_flyby("stuka_flyby");
while (1)
{
wait 960;
stuka1 thread plane_flyby("stuka_flyby");
wait .15;
stuka2 thread plane_flyby("stuka_flyby");
wait .15;
stuka3 thread plane_flyby("stuka_flyby");
wait .15;
stuka4 thread plane_flyby("stuka_flyby");
}
}
plane_flyby(sound)
{
if (isdefined (sound))
self playsound (sound);
wait 15;
self show(); // Flugzeuge tauchen nun auf
self moveto(self.dest, level.PlaneSpeed, 0.1, 0.1); // Flugzeuge zum Ziel bewegen
wait level.PlaneSpeed; // Warten, bis Flugzeuge ihre Ziele erreicht haben
self hide(); // Flugzeuge wieder verstecken
self.origin = self.start;
}
Рассматривать весь скрипт нет смысла, так как составлен он довольно понятно и нужно только напрячь мозги, чтобы всё стало ясно. Скрипт начинается с
{
level thread planes();
}
Словосочетание "level thread " нужно писать обязательно . Cлово planes () можно указать любое, не имеет особого значения. То есть в начале этого скрипта даётся своего рода содержание, а потом идёт описание этого самого содержания. То есть в качестве содержания выступает скрипт planes (), а затем идёт и его описание. Можете использовать для Вашей карты этот скрипт вызова бомбёжки "штуками " , предварительно засунув в папку sound звуки пролетающих самолётов
3). В файле mortar.gsc автор использует аналогичную сцену, которую я написал я выше. Однако он использует здесть 2 дополнительные строчки эффектов
level._effect["mortar_explosion"][0] = loadfx("fx/explosions/mortarExp_mud.efx");
level._effect["mortar_explosion"][1] = loadfx("fx/explosions/mortarExp_mud.efx");
Преимущество этих параметров заключается в том, что используются эффекты взрывов ( ну и воронки/пятна на земле соответственно), которые УЖЕ ЕСТЬ в игре. Эти параметры своего рода ссылки на эффекты которые уже есть в игре. Причем вы можете прописать в любом из скриптовых файлов и в любом "содержании" . Скрипт эффекта всё равно сработает
4.) Рассмотрим последний файл, содержащий эффекты. Он представляет небольшой список различных эффектов/сцен, использующихся на карте. К ним относятся например те же дымовые испарения, поднимающиеся от земли и постоянно вращающиеся в воздухе. Соответственно если Вы будете делать такие же, указываете свои координаты, как показано в скрипте. Еще показаны эффекты горящих машин:
maps\mp\_fx::loopfx("fire_car",(2403, -1456, 158), 0.4);
И в довершении автор в "содержании" указал ссылку на звук при заминировании flak'a при режиме sd . Заметьте, что так как звук уже есть в игре, достаточно было дать на него ссылку, типа как давали ссылку на эффекты
Заключение
Я попытался дать лишь основы скриптописания, всё остальное зависит лишь от вас. Можете располагать скрипты как вас удобно. Можете запихать все скрипты в один файл , а можете их разбить на 10 gsc файлов, всё в Ваших руках. Можете создать рацию, из которой будут доносится звуки благого русского мата, всё зависит только от Вашей фантазии. Для удобства конечно лучше создавать несколько .gsc файлов. В одном будете указывать скрипты для движущихся платформ/элеваторов, в другом какие то эффекты, в третьем выборочные модели и т.д