Размещение файлов, общая структура каталогов, каталоги пользователя missions, scripts, dtaext, каталоги миссий.
Вначале кратко разберемся со средой в которой нам предстоит работать. Нас в первую очередь будет интересовать каталог UserName находящийся в папке Users (UserName — ваш ник в игре). Перейдите в указанный каталог:
/path/to/Operation Flashpoint/Users/UserName
Вот как может выглядеть его организация:
[DtaExt] | — | этот каталог можно создать ручками — он аналогичен каталогу dtaext кампании |
---|---|---|
[Missions] | — | здесь лежат созданные вами миссии, этот каталог будет существовать если вы сохраняли их в редакторе |
[MPMissions] | — | здесь лежат созданные вами сетевые миссии, этот каталог будет существовать если вы сохраняли их в редакторе |
[Saved] | — | это ваши сэйвы |
[Scripts] | — | этот каталог необходимо создать ручками — здесь лежат скрипты доступные из любой миссии. Он аналогичен каталогу scripts кампании. |
UserInfo.cfg | — | файл с вашими настройками |
description.ext | — | этот файл можно создать ручками. Он аналогичен файлу description.ext кампании. |
Как можно заметить, о некоторых каталогах сказано, что они соответствуют тем же каталогам кампаний — этим можно воспользоваться при запуске миссий из распакованных кампаний, часто проще распаковать всю кампанию в директорию «Users» и скинуть туда ваши настройки. Этот способ хорош тем, что теперь все звуки из «\DtaExt\Sound\» и классы прописанные в description.ext будут доступны из загружаемых миссий. К примеру вы распаковали оригинальную кампанию «CWC» от BIS в каталог «Users» — теперь можно зайти в редактор под юзером «1985» и быть спокойным относительно того, что игра не найдет вдруг какой либо ресурс.
Естественно все это важно учитывать и при создании своих собственных кампаний. Любой проект который возможно вырастет в пусть даже небольшую кампанию имеет смысл начинать с создания нового пользователя — это позволяет удобно разделить работу над миссиями и повседневные эксперименты в редакторе. Старайтесь не дублировать разделяемые ресурсы — пусть звуки будут размещены в «DtaExt\Sound», а скрипты — в «Scripts».
Далее перейдем в Missions — здесь находятся сами каталоги миссий. Имена каталогов состоят из непосредственно имени миссии (имя которое вы дали миссии при сохранении её в редакторе) и расширения состоящего из внутриигрового названия острова.
Например миссия с именем "my_mission" на Авероне будет лежать в папке "my_mission.Eden".
Примечание: для справки — «внутренние» имена осторовов: Малден — Abel (Авель), Аверон — Eden (Эдем), Кольгуев — Cain (Каин), Ногова — Noe (Ной); такие вот забавные параллели проводят разработчики.
поля инициализации, поля триггеров, — другие места предназначенниые для выполнения выражений на скриптовом языке.
Очень кратко пробежимся по основным возможностям редактора, связанными со скриптованием. Первым делом включим режим редактора «Advanced» («Полный» в русской версии, при первом запуске игры он «Easy» или «Легкий»). Жмем «F2» — мы в режиме установки юнитов, двойной клик по карте — перед нами окно параметров помещаемого на карту юнита. Нас будет интересовать лишь одно поле: «initialization» — здесь можно разместить любое скриптовое выражение. Название поля — «инициализация» не случайно, оно предназначено для задания начального состояния юнита и выполняется непосредственно перед началом миссии. В контексте этого поля доступна переменная _this — это ссылка на помещаемый юнит. Поместим на карту юнит с типом «man» и введем в поле инициализации следующий текст:
hint ( name _this )
Поясним: hint — команда выводящая подсказку в верхнем левом углу экрана, name — команда возвращающая имя юнита, _this — помещаемый юнит. Это выражение выведет подсказку с именем нашего юнита, запускаем миссию и смотрим.
Другой пример отобразит список оружия юнита:
hint format ["%1", weapons _this ]
Здесь появилась новая команда format, она преобразует массив возвращаемый «weapons _this» к строке. Мы не будем сейчас вдаваться в объяснения, можно сказать, что эти примеры лишь для разогрева. Все что надо сейчас запомнить — в поле инициализации можно записывать скриптовые выражения.
Пойдем дальше — «F3», даблклик — мы помещаем на карту триггер. Здесь нас будут интересовать три поля: «Condition», «On Activation» и «On Deactivation» («Условие», «По активации» и «По деактивации»)
Поле «Condition» предназначено для корректировки условия выполнения триггера. В тот момент когда выражение указанное здесь станет истинным (вернёт true) — триггер сработает. Это произойдет независимо от состояния некоторых других опций триггера. Предопределенная переменная this, присутстутствующая здесь по умолчанию, постоянно меняет своё значение — в те моменты когда условия триггера выполняются она возвращает true, в остальные — false; именно она и заствляет триггер срабатывать. Естественно, мы можем контролировать этот механизм — например записав в поле:
this && alive Pupkin
мы заставляем срабатывать триггер, только если выполняются его условия и жив некто Пупкин
Еще одна предопределенная переменная доступная в этом поле, thisList, содержит массив всех юнитов на которых настроен триггер и находящихся в пределах его геометрии. Добавим в пример с Пупкиным условие заставляющее триггер учитывать, кроме прочего, нахождение нашего героя в пределах триггера:
this && alive Pupkin && Pupkin in thisList
С полями «По активации» и «По деактивации» дело обстоит проще — выражения, заключенные в них выполняются в случае активации и деактивации триггера, соответственно; в этих полях также доступна переменная thislist.