<<<Назад <<< <<<Меню>>> >>> Далее>>>

Скриптописание

Самое простое.

Внимательно всмотритесь в следующий текст:
_unit = _this select 0
_unittwo = _this select 1

_unit DoWatch _unittwo
_unittwo DoWatch _unit
~2
_unit playmove "effectstandsalute"
_unittwo playmove "effectstandsalute"
У новичков в "науке" :) скриптописания возникнет вопрос - "ЧТО ЭТО?" Если вы хотя бы чуть-чуть знаете английский, то вы поймёте. Вот как это выглядит в переводе на русский:
_юнит = _это выбирает 0
_юнитдва = _это выбирает 1

_юнит смотрит_на _юнитдва
_юнитдва смотрит_на _юнит
~2 (проходит 2 секунды)
_юнит играет_движение "ОтдатьЧесть"
_юнитдва играет_движение "ОтдатьЧесть"
Это очень простой скрипт - Salute.sqs. Если понять это правильно, то сразу понимаешь о чём речь:
"1 юнит смотрит в сторону 2-го , 2-й смотрит в сторону 1-го и они оба отдают друг другу честь".
Правильно.
Обратите внимание на знак " _ "! Такое встречается в большинстве скриптов. Например, скрипт взрывающихся бочек Немца (В папке "ПРИМЕРЫ"). Там есть такая строка:
_bochka = _this select 0
В тестовой миссии, для правильной активации скрипта нужно в init (инициализации) бочки с ЛЮБЫМ НАЗВАНИЕМ написать:
[unit-Bochka-name] exec "Bum.sqs"
Без этого никуда. А особенно посмотрите порядок вписывания имён. _this select 0 - на первом месте, _this select 1 - на втором и т.д. Потренируйтесь в написании похожих простеньких скриптов и только потом переходите к следующей главе...

Знак ~.

В примере, приведённом выше вы заметили знак ~ (там даже было пояснение) Этот знак (~) обозначает промежуток времени, который разделяет два действия. Зубрить это НЕ надо. Можно привести огромное количество примеров, но мне кажется всё и так понятно. Время можно также уточнять вплоть до не знаю каких чисел. Например:
~0.32466484232884568931
Конечно, такая точность не требуется в скриптах. Самые часто употребляемые числа: это 1 - 20 и 1 - 0.01. Другие числа редко используются в скриптах. Ну ... может быть в видеороликах (?) ... Идём дальше.

Условия.

Очень часто нужно написать условие в скрипте. Вариантов условий очень много.
Условия бывают 2-х видов:
1) ?(условие): эффект
2) @(условие)

Первый вариант используется в том случае, если нужно написать один эффект или часть скрипта (см. ниже) Например:
?(not(alive _Man)):goto "Trevoga"
или ещё:
?(_aP distance _Target < 100):aP sidechat "Ya uzhe blizko!"
Второй вариант используется реже, совершенно противоположен первому. Если нужно написать несколько эффектов или "вживить" в это условие часть скрипта. Иногда используется вместе с первым вариантом.
Бывает также главным условием скрипта, при активации которого скрипт активизируется. Вот пример употребления второго варианта:
#Presledovanie
_enemy move getpos _Player
@(unitready _enemy)
~2
?(alive _Player):goto "Presledovanie"

В этом примере используется оба варианта условия. Получается так:
#Преследование
_враг бежит к _игроку
@(юнит готов "_враг")
~2
?(живой _игрок):активировать "Преследование"
Это простой скрипт Follow.sqs. Могу также привести ещё пример главного условия, при активации которого скрипт активизируется:
@(_Man distance _AntiInfantryMine < 2)
~0.5
_Bum = "MortarShell" camcreate getpos _AntiInfantryMine
exit
Всё элементарно, Ватсон! Потренируйтесь в написании скриптов с условиями и переходите к следующей главе под названием...

Эффекты.

Эффекты бывают разные - простые, средние, сложные ... Ну, в общем, это развёрнутая тема, она же одна из самых важных. В качестве эффектов используются действия, т.е. движение юнита, взрывы на земле, в воздухе, перемещение объектов, координаты, появление на карте объектов, сохранение игры, и т.д. и т.п.
Вот возможные движения людей.
Для тех, у кого нет стажа по картостроению пишу пример:
@(_Man in _UAZ)
~0.5
_Man move getpos _T
~10
_UAZ setdammage 0.6
_Man setdammage 0.8
_Man switchmove "UazDriverDying"

Последняя строчка и является действием. Некоторые говорят, что разницы в playmove и switchmove нет. И не правильно говорят. Дело в том, что switchmove - моментальное действие, а playmove - действие с анимацией.
Кстати, строчка _Man move getpos _T командует юниту идти (бежать, лететь, ехать ...) к нужному объекту или координатам.

Эффекты: взрывы.

Как сделать взрыв?
Просто.
chto_hochesh = "imia_vzriva" camcreate [x,y,z]
Можно также сделать взрыв относительно какого-либо объекта, например:
chto_hochesh = "imia_vzriva" camcreate getpos Unit
Тогда взрыв произойдёт на месте определённого юнита (объекта)
Только надо знать название этого взрыва. Не пытайтесь для взрыва писать стандартное название боеприпасов, типа ZsuCannon, Rocket57x192 и т.д Вот, что можно писать на месте "imia_vzriva":

Вроде все варианты боеприпасов, которые при взаимодействии с camcreate создаются в определённом месте. Хочу также добавить, что если повесить танковый снаряд в воздухе - получится имитация бомбы, т.е. снаряд полетит в сторону земли. Если эта ракета, то если её повесить в воздухе она полетит. Очень интересная вещь - пули и снаряды 23 или 30 мм. Если повесить эти боеприпасы в воздухе на высоте не более 30 метров - то они полетят в сторону земли , и по виду начнут напоминать лазер :) . Да , ещё один важный момент . Если строка выглядит как та , т.е chto_hochesh = "imia_vzriva" camcreate , то тогда chto_hochesh становится объектом. И с ним можно делать, то же, что и с обыкновенным юнитом: устанавливать азимут (градус), координаты и т.д.
Все боеприпасы класса Flare должны появляться в воздухе, иначе они вообще не появятся.
Если взрыв надо сделать в воздухе, то тогда надо сделать два снаряда/пули/ракеты и т.д. в одном и том же месте, так, чтобы они соприкоснулись (столкнулись). Тогда вы добьетесь желанного эффекта - взрыв произойдёт в воздухе (если только это не пули). Есть ещё вариант создания взрывов, который работает только в скрипте. Например:
"Shell125" camcreate [x,y,z] ; "Shell125" camcreate getpos Unit
Произойдёт то же самое, только это не будет являться объектом. Т.е появится под углом 0 градусов, и этот боеприпас нельзя будет переместить.
Есть ещё один интересный момент: после эффекта взрыва боеприпас перемещается в координаты 0,0,0 . Я в этом не уверен, но если сделать камеру, которая будет следить за полётом снаряда - после взрыва камера окажется далеко в океане. Про взрывы пожалуй всё.

Эффекты: движение/перемещение юнитов.

Есть ещё много разных эффектов.
Например, чтобы как бы сделать WayPoint "MOVE" (Указатель "движение") нужно в скрипте или в On activation ("при активации") триггера писать:
Unit_name move [x,y,z]
Опять же, если надо сделать перемещение объекта относительно другого - надо добавить getpos:
Unit_name move getpos Other_unit

Если надо моментально "телепортировать" юнит куда нибудь, то тогда пишите в скрипте или в On activation ("при активации") триггера:
Unit_name setpos [x, y, z]; Unit_name setpos ( getpos Other_unit)
Есть ещё несколько вариантов перемещений юнитов, которые описаны тут. Там также описываются большинство эффектов.

Эффекты: сохранение игры.

Как сохранить игру скриптом или триггером?
Очень просто: нужно только в скрипте или в On activation ("при активации") триггера писать:
savegame
Употребляйте эту команду по назначению. Не советую её часто использовать в скриптах или миссиях - теряется играбельность . А вот перед "большой дракой" или второй частью миссии его (savegame) как раз лучше использовать, для удобства. Если вы делаете сложно проходимую миссию, то тогда вообще забудьте про команду savegame.

Эффекты: создание юнитов в процессе игры.

Cоздать юнит в процессе игры?
Это немного сложно. Тоже делается через команду camcreate, которая используется при взрывах. Тогда, пишите в скрипте или в On activation ("при активации") триггера:
chto_hochesh = "Nazvanie_unita" camcreate [x,y,z]; chto_hochesh = "Nazvanie_unita" camcreate getpos Other_unit
Например:
US_IFV = "M113" camcreate getpos X_unit
Правда это весьма неудобно тем, что объект не двигается, ко всему относится скептически (даже если в него пущена ракета :)) не имеет ни союзников, ни врагов, в него нельзя влезть (если это танк или машина) и т.д.
В общем, юнит получается бесполезным. Правда, если писать это в On activation ("при активации") триггера, то тогда он перейдёт на ту сторону, которая активировала триггер. AI созданного в процессе игры юнита можно немного расшевелить используя некоторые команды, которые описаны тут.

Эффекты: включение звуков и музыки.

В скрипте пишите:
playmusic "music_name"
Большинство названий музыки - от "track1" до "track16". И ещё "7thlifeless" и "7thdecide". Есть также несколько названий, но я их не помню (хотя они реже употребляются. Для большей информации о музыке зайдите сюда. Чтобы сделать музыку громче или тише - пишите: 10 fademusic 1
Где 10 - это время, за которое громкость повышается/понижается, а 1 - это громкость музыки. Соответственно 0 - выключенный звук, а 1 - полная громкость. Если потом надо вставить другую музыку, то не забывайте опять написать fademusic но с 1 вместо нуля, это включит звук.
Звуки включаются так:
playsound "sound_name"
Звуки чаще всего употребляются с помощью триггеров в меню (нижний правый угол) "эффекты". Там и настраиваются звуки. Названия звуков можно определить так:
Делаете любой триггер и устанавливаете в меню "эффекты" нужный звук. Сохраняете миссию под любым названием. Выходите из игры или нажимаете на клавиатуре Alt+Tab . Открываете блокнот (NotePad) . Ищете свою миссию (*.sqm файл в папке с её названием) и открываете блокнотом. Ищете тот триггер в тексте. И внимательно читаете все его эффекты. Затем копируете (выделяйте , затем нажмите Ctrl+C )название этого звука в playsound "sound_name", то есть вместо sound_name (для вставки нажмите Ctrl+V). Это, пожалуй, всё по звукам.

<<<Назад <<< <<<Меню>>> >>> Далее>>>