Инструкция по использованию редактора — различия между версиями
VolgaIgor (обсуждение | вклад) м (→Панель инструментов и функционал) |
VolgaIgor (обсуждение | вклад) м (→Тематические ссылки) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 964: | Строка 964: | ||
== Тематические ссылки == | == Тематические ссылки == | ||
− | |||
− | |||
* [[Создание object group из существующих в игре объектов]] | * [[Создание object group из существующих в игре объектов]] | ||
[[Категория:War_Thunder_CDK]] | [[Категория:War_Thunder_CDK]] | ||
[[Категория:Пользовательские миссии]] | [[Категория:Пользовательские миссии]] |
Текущая версия на 19:23, 15 ноября 2018
Содержание
- 1 С чего начать
- 2 Первая миссия. Полет по маршруту
- 3 Вторая миссия: сопровождение бомбардировщиков
- 3.1 Первоначальная настройка миссии
- 3.1.1 Выставление самолета игрока
- 3.1.2 Создание бомбардировщиков
- 3.1.3 Создание маршрута движения
- 3.1.4 Задание полетного маршрута бомбардировщикам
- 3.1.5 Отслеживание полета до точки назначения
- 3.1.6 Назначение маркера слежения на бомбардировщики
- 3.1.7 Добавление иконки с числом бомбардировщиков
- 3.1.8 Выдача задания игроку
- 3.1.9 Создание самолетов противника
- 3.1.10 Атака самолетов противника
- 3.1.11 Проверка бомбардировщиков на смерть
- 3.1 Первоначальная настройка миссии
- 4 Третья миссия. Бомбардировка
- 4.1 Расстановка самолетов игрока и настройка миссии
- 4.2 Создание союзников
- 4.3 Направление союзников к порту
- 4.4 Создание первой точки полетного маршрута и выдача задания
- 4.5 Достижение первой точки полета
- 4.6 Расстановка английских кораблей
- 4.7 Выдача нового задания
- 4.8 Добавление английских кораблей в качестве целей
- 4.9 Бомбежка союзными самолетами порта
- 4.10 Проверка удачной бомбежки
- 5 Четвертая миссия. Dog Fight
- 6 Пятая миссия. Защита завода
- 6.1 Создание игрока и настройка миссии
- 6.2 Создание бомбардировщиков противника
- 6.3 Создание целей для бомбардировки на заводе Сталинграда
- 6.4 Задание на защиту завода
- 6.5 Помечаем бомбардировщики в качестве целей
- 6.6 Показ счетчика строений завода
- 6.7 Проверка на гибель всех бомбардировщиков
- 6.8 Проверка достижения завода самолетами противника
- 6.9 Эвакуация бомбардировщиков
- 6.10 Проверка успешности бомбардировки
- 7 Украшения миссии
- 8 Команды управления самолетами
- 9 Настройка сложности миссий
- 10 Сквады
- 11 Аэродромы
- 12 Время выполнения задания
- 13 Редактирование параметров объектов
- 14 Список всех событий
- 15 Список всех условий проверки
- 16 Список всех команд
- 17 Усложнение существующих миссий
- 18 Тематические ссылки
С чего начать
Любая миссия состоит из двух частей: локации, на которой будет происходить действие миссии, и непосредственно самой миссии. Этот, казалось бы очевидный факт, на самом деле может внести некоторую сумятицу, так как при запуске редактора вы сначала должны открыть локацию, а только потом открыть, или создать, саму миссию.
Собственно на языке редактора локации называются проектами и при запуске редактора диалоговое окно как раз и предложит открыть один из проектов или создать новый. Так как создание новых карт не входит в рамки текущего обучения, выбирайте опцию «open project» или воспользуйтесь списком недавно открытых локаций.
Первая миссия будет проходить в локации «bulge», поэтому для дальнейшей работы вам будет лучше всего открыть именно ее.
Панель инструментов и функционал
Итак вы запустили редактор и открыли проект. После того, как произойдет загрузка проекта вы увидите панель инструментов:
Наш основной инструмент для работы — это закладка «Mission Editor». Если она не открыта у вас, то откройте ее. Как вы можете видеть на этой закладке находится большое количество все-возможных кнопок. Ниже вы можете увидеть таблицу с описанием этих кнопок.
Выделение объекта (Select). При нажатии на эту кнопку редактор переходит в режим выделения объекта. Так же можно нажать на клавиатуре клавишу «Q» при активном окне с изображением локации, чтобы перейти в этот режим. | |
Перемещение объекта (Move). При нажатии на эту кнопку редактор переходит в режим перемещения объекта. Вокруг объекта рисуются оси трех цветов, и стрелки, потянув за которые объект можно переместить по одной из осей. Так же можно нажать на клавиатуре клавишу «W» при активном окне с изображением локации, чтобы перейти в этот режим. Если одновременно с перемещением объекта держать нажатой клавишу «Shift» на клавиатуре, то редактор не переместит объект, а предложит создать его копию с новым именем. | |
Перемещение объекта по поверхности (Move over surface). При нажатии на эту кнопку редактор переходит в режим перемещения объекта по поверхности локации. В остальном данный режим идентичен простому перемещению. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+Alt+W» при активном окне с изображением локации, чтобы перейти в этот режим. Если одновременно с перемещением объекта держать нажатой клавишу «Shift» на клавиатуре, то редактор не переместит объект, а предложит создать его копию с новым именем. | |
Вращение объекта (Rotate). При нажатии на эту кнопку редактор переходит в режим вращения объекта. Вокруг объекта появляются круги трех цветов, потянув за которые игрок может повернуть объект по одной из трех осей. Так же можно нажать на клавиатуре клавишу «E» при активном окне с изображением локации, чтобы перейти в этот режим. Если одновременно с перемещением объекта держать нажатой клавишу «Shift» на клавиатуре, то редактор не повернет объект, а предложит создать его копию с новым именем. | |
Изменение размеров объекта (Scale). При нажатии на эту кнопку редактор переходит в режим изменения размеров объекта. Вокруг объекта появляются оси трех цветов и стрелки, потянув за которые можно изменить размеры объекта относительно выбранной оси. Так же можно нажать на клавиатуре клавишу «R» при активном окне с изображением локации, чтобы перейти в этот режим. Если одновременно с перемещением объекта держать нажатой клавишу «Shift» на клавиатуре, то редактор не изменит размер объекта, а предложит создать его копию с новым именем. | |
Бросание объекта (Drop object). При нажатии на эту кнопку, если игроком был выделен какой-либо объект, и объект находился выше уровня поверхности локации, объект поместится на поверхность локации, упав на нее. Этот инструмент полезен для размещения объектов миссии на земле. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+Alt+D» при активном окне с изображением локации, чтобы применить этот инструмент к выделенному объекту или объектам. | |
Выделение объекта по имени (Select object by name). Нажатие на эту кнопку откроет окно со списком всех объектов миссии, где эти объекты можно выбрать для дальнейшей манипуляции с ними. Так же можно нажать на клавиатуре клавишу «H» при активном окне с изображением локации, чтобы открыть окно со списком объектов. | |
Показ панели свойств объекта (Show/Hide object props panel). Нажатие на эту кнопку откроет окно со свойствами выделенного объекта (например самолета). Так же можно нажать на клавиатуре клавишу «P» при активном окне с изображением локации, чтобы открыть окно свойств объекта. | |
Показ панели редактирования слоев (Edit layers). Нажатие на эту кнопку откроет окно редактирования слоев. Различные объекты миссии можно помещать в различные слои для удобства. | |
Показ имен объектов (Show units/areas names). Нажатие на эту кнопку включит отображение имен объектов в основном окне редактора. Повторное нажатие на эту кнопку скроет имена объектов. | |
Показ точек пути (Show all waypoints). Многим объектам миссии можно назначать путь, по которому они должны двигаться. Для того чтобы увидеть путь, назначенный объекту его необходимо выделить. А можно нажать на эту кнопку и тогда в основном окне редактора отобразятся все пути, назначенные всем объектам. Повторное нажатие на эту кнопку скрывает отображение путей. | |
Показ иконок юнитов (Show units icons). Нажатие на эту кнопку позволяет включить или выключить отображение иконок над юнитами (корабли, самолеты, танки и др) миссии. Желательно всегда держать эту кнопку включенной, для облегчения работы. | |
Показ моделей юнитов (Show units assets). Нажатие на эту кнопку позволяет включить или выключить отображение моделей, назначенных юнитам миссии. Желательно не держать эту кнопку включенной постоянно, так как отображение большого количества моделей может снизить быстродействие работы редактора. | |
Отображение локальных осей координат объектов (Draw object Axis). Нажатие на эту кнопку включить или выключит отображение локальных осей координат для объекта. Локальные оси координат выглядят как тонкие линии трех цветов, исходящих из центра объекта. По направлению этих осей можно, например, определить куда полетит самолет после старта миссии, и заранее развернуть его в нужном направлении. | |
Ограничить выделение зонами (Select only zones). Нажатие на эту кнопку ограничит возможность выделения объектов только специальным их типом: зонами. Если вы попробуете выделить объект не являющийся зоной, вы не сможете этого сделать. Повторное нажатие на эту кнопку выключит данный режим. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+1» при активном окне с изображением локации, чтобы перейти в этот режим. | |
Ограничить выделение эффектами (Select only effects). Нажатие на эту кнопку ограничит возможность выделения объектов только специальным их типом: эффектами. Если вы попробуете выделить объект не являющийся эффектом, вы не сможете этого сделать. Повторное нажатие на эту кнопку выключит данный режим.
Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+2» при активном окне с изображением локации, чтобы перейти в этот режим. | |
Ограничить выделение юнитами (Select only units). Нажатие на эту кнопку ограничит возможность выделения объектов только специальным их типом: юнитами. Если вы попробуете выделить объект не являющийся юнитом, вы не сможете этого сделать. Повторное нажатие на эту кнопку выключит данный режим. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+3» при активном окне с изображением локации, чтобы перейти в этот режим. | |
Ограничить выделение точками пути (Select only waypoints). Нажатие на эту кнопку ограничит возможность выделения объектов только специальным их типом: точками пути. Если вы попробуете выделить объект не являющийся точкой пути, вы не сможете этого сделать. Повторное нажатие на эту кнопку выключит данный режим. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+4» при активном окне с изображением локации, чтобы перейти в этот режим. | |
Создание точечной зоны (Create point zone). Нажатие на эту кнопку включает режим установки новой точечной зоны. Чтобы установить зону кликните курсором мыши по поверхности локации в основном окне редактора. Установка новых зон будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. Точечные зоны удобно использовать для обозначения точек маршрута, по которому надо будет пролететь игроку. | |
Создание сферической зоны (Create sphere zone). Нажатие на эту кнопку включает режим установки новой сферической зоны. Чтобы установить зону кликните курсором мыши по поверхности локации в основном окне редактора, и не отпуская нажатую кнопку мыши потяните курсор в сторону, чтобы задать радиус сферы. Установка новых зон будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. Сферические зоны удобно использовать для обозначения особых областей в воздушном пространстве, или каких-либо логических образований, используемых логикой миссии. | |
Создание цилиндрической зоны (Create cylinder zone). Нажатие на эту кнопку включает режим установки новой цилиндрической зоны. Чтобы установить зону кликните курсором мыши по поверхности локации в основном окне редактора, не отпуская нажатую кнопку мыши потяните курсор в сторону, чтобы задать радиус цилиндра, после чего отпустите кнопку мыши и поведите курсор вверх, чтобы задать высоту цилиндра. Нажмите на кнопку мыши еще раз, чтобы закончить создание цилиндра. Установка новых зон будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. | |
Создание прямоугольной зоны (Create box zone). Нажатие на эту кнопку включает режим установки новой прямоугольной зоны. Чтобы установить зону кликните курсором мыши по поверхности локации в основном окне редактора, не отпуская нажатую кнопку мыши потяните курсор в сторону, чтобы задать длину зоны, отпустите кнопку мыши и поведите курсор в сторону, чтобы задать ширину зоны, нажмите кнопку мыши и, не отпуская ее, поведите курсор вверх, чтобы задать высоту зоны. Отпустите кнопку мыши, чтобы закончить создание цилиндра. Установка новых зон будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. | |
Создание эффекта (Create effect). Нажатие на эту кнопку включает режим установки нового эффекта. Чтобы установить эффект кликните курсором мыши по поверхности локации в основном окне редактора, и не отпуская нажатую кнопку мыши потяните курсор в сторону, чтобы задать радиус сферы эффекта. Установка новых эффектов будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. | |
Создание юнита (Create unit). Нажатие на эту кнопку включает режим установки нового юнита. Чтобы установить юнита кликните курсором мыши по поверхности локации в основном окне редактора. Установка новых юнитов будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. Тип устанавливаемого юнита зависит от того, что выбрано в соседнем поле, описание которого находится ниже в таблице. | |
Создание точки пути (Create waypoint). Нажатие на эту кнопку включает режим установки новой точки пути. Чтобы установить точку пути кликните курсором мыши по поверхности локации в основном окне редактора. Установка новых юнитов будет продолжаться при каждом клике, пока вы самостоятельно не выключите этот режим. Для того, чтобы назначить точки пути какому-то конкретному юниту, необходимо выделить юнита перед установкой точек. | |
Выбор типа создаваемого юнита. Данное поле представляет собой список из нескольких пунктов. Выбор пункта из списка, с последующим использованием «Create unit» позволит поставить на карту юнит данного типа. Существуют следующие типы:
| |
Новая миссия (New mission). Нажатие на эту кнопку приводит к созданию новой миссии. | |
Открыть миссию (Open mission). Нажатие на эту кнопку приводит к появлению диалогового окна открытия файла. | |
Сохранить миссию (Save mission). Нажатие на эту кнопку приводит к появлению диалогового окна сохранения файла, если миссия сохраняется в первый раз или же просто сохраняет миссию, если ранее она уже сохранялась. Так же можно нажать на клавиатуре сочетание клавиш «Ctrl+M» чтобы сохранить миссию. | |
Сохранить миссию как...(Save mission as..). Нажатие на эту кнопку приводит к появлению диалогового окна сохранения файла с просьбой ввести новое имя файла. | |
Запуск миссии (Run mission). Нажатие на эту кнопку свернет редактор (но не закроет его) и запустит игру с автоматическим стартом открытой миссии. | |
Показ окна свойств триггера (Properties and Trigger/Mission Obj info) Нажатие на эту кнопку откроет окно редактирования свойств триггера или обжектива миссии. |
Перемещение камеры
Откройте в редакторе локацию Bulge и дождитесь ее окончательной загрузки. Скорее всего вы увидите, что камера смотрит на ландшафт под не самым удобным углом. Для того, чтобы у вас появилась возможность «летать» камерой над ландшафтом, приближаться и удаляться от него, крутить камеру и совершать иные действия необходимо активировать режим свободной камеры.Для этого кликните курсором мыши в пределах основного окна редактора и нажмите клавишу «Пробел». Сразу после нажатия пробела вы увидите, что курсор мыши куда-то исчез. Поздравляем, вы только что активировали режим свободной камеры! Теперь, двигая мышкой вы заставите камеру изменять ракурс, клавишами «WASD» заставите камеру двигаться в выбранном направлении, а удерживая при этом клавишу «Shift» на клавиатуре, заставите камеру реагировать на все эти действия заметно проворнее.
Если движение камеры все еще кажется вам слишком медленным в основном меню редактора выберите: «Settings->Cameras», чтобы попасть в настройки камеры. В появившемся окне перейдите в закладку «Free Camera» и измените параметр «Move» и «Turbo, ms» которые отвечают за движение камеры по нажатию «WASD» и «WASD» с удерживаемым «Shift» соответственно. Когда вы закончите изменять параметры закройте это окно и проверьте скорость движения. Если вас все еще что-то не устраивает — снова отредактируйте параметры камеры.
Выключение лишней информации
По умолчанию в окне редактора отображается как модель ландшафта, так и карта высот. В обычной ситуации по созданию миссии информация о карте высот не нужна, и ее можно отключить. Для этого кликните мышью в пределах главного окна редактора и нажмите клавишу «F11». Перед вами появится окно видимости плагинов редактора. Найдите строку «(filter) HeightMap» и снимите галочку с поля рядом с ним. Это отключит отображение карты высот, оставив показ самого ландшафта со всеми текстурами.
Ослабление интенсивности освещения
Если освещение локации кажется вам слишком высоким, или слишком низким, вы можете изменить интенсивность ее освещения. Для этого внимательно посмотрите на панель инструментов. Как вы видите она состоит из нескольких закладок. Сейчас активная закладка «Mission Editor». Перейдите в закладку «Environment», кликнув по ней. Панель инструментов изменилась, но главное, что открылось окно с настройками освещения. Найдите в этом окне параметр «Sun #1 color multiplier» и измените его значение. Отметье, как при изменении значений в этом поле меняется освещенность ландшафта. Выберите то значение, которое вас устраивает и вернитесь в закладку «Mission Editor».
Создание самолета игрока
Если вы внимательно ознакомились со списком доступных команд, то, наверняка, догадались что вам предстоит сделать. Итак, выбрав в поле «Выбор типа создаваемого юнита» значение «armada», воспользуемся кнопкой «Созданию юнита» и разместим самолет игрока где-нибудь на локации. На основном экране должна появиться иконка самолета зеленого цвета с именем «armada_01». Выходим из режима создания новых юнитов, выделяем самолет и нажимаем на кнопку «Показ панели свойств объекта», чтобы вызвать окно, в котором мы сможем редактировать свойства нашего юнита. В появившемся окне в самом его верху мы видим поле «Name:» со значением «armada_01» давайте вместо этого имени введем свое имя: «player», чтобы по имени мы сразу смогли определить, что это самолет игрока. Под этим полем находится поле «Type» в котором, при желании можно сменить тип юнита на другой, чего мы делать не будем. Еще ниже находятся три поля озаглавленные как «Position». В первом поле указывается координата объекта по оси Х, во втором — по оси Y (высота над поверхностью) и в третьем — по оси Z. Все координаты считаются от начала координат загруженной локации. Выставьте высоту самолета на 500 метров, чтобы оказаться в непосредственной близости к поверхности. Проследите за тем, чтобы в результате изменения высоты самолет не оказался под поверхностью уровня, если вы, к примеру, изначально разместили его над высоким холмом. Скорее всего после того как вы изменили высоту самолета, он исчез с вашего экрана. Но это не беда. Нажимаем на кнопку «Выделение объекта по имени», в появившемся окне выбираем «player» нажимаем кнопку «Ok» для закрытия этого окна и нажимаем на клавиатуре клавишу «Z», которая переносит камеру редактора к текущему выделенному объекту. Вот мы и нашли нашу пропажу.
Выделим самолет еще раз и откроем окно его свойств. Ниже поля «Position» находится поле «Class», в свою очередь состоящее из двух полей: непосредственно «Class», в котором мы можем задать тип самолета, на котором будет лететь игрок в миссии, и его вооружение. Выберите самолет «yak-9t» и назначьте ему вооружение «Yak9_default». Еще ниже через несколько полей находится раздел «Properties». Заголовок этого раздела находится на сером поле, что означает, что раздел можно сворачивать и разворачивать. Попробуйте свернуть и развернуть этот раздел. Как вы заметили в развернутом состоянии этот раздел не помещается в пределах экрана и некоторые его поля не видны. Чтобы получить доступ к этим полям просто покрутите колесико мыши и отметьте как прокручивается окно свойств объекта.
В самом верху раздела «Properties» находится поле «army». Это поле указывает на то какой стороне будет принадлежать данный объект. Желательно, чтобы игрок и союзные войска находились в армии с индексом «1», а их противники — в армии с индексом «2». Измените индекс армии игрока на «1» прямо сейчас.
Ниже этого поля находится еще один раздел, который можно сворачивать и разворачивать под названием «plane». Этот раздел отвечает за то в какой формации будут двигаться юниты. Оставьте все поля без изменений — вы сможете поиграться с ними позже самостоятельно. Сверните раздел и обратите внимание на поле, расположенное ниже. Это поле называется «count» и определяет сколько юнитов будет находиться в эскадрилье. Сейчас там стоит цифра «1», и это означает, что если мы запустим миссию, то окажемся в воздухе на своем самолете и вокруг нас не будет ни души. А вот если мы изменим цифру на «2», то у нас появится напарник, который будет лететь тем же курсом что и мы. Давайте изменим эту цифру на «4», доведя количество самолетов воздухе до четырех. Как вы, наверняка, знаете летчики не летают в одиночку или в составе кучи малы, а бьются на пары или, реже, тройки. Даже если летит большое количество самолетов, внутри своей формации они все равно побиты на ведущего и ведомого или ведомых. Задача ведомого — защищать своего ведущего. Чтобы побить наши 4 самолета на 2 таких пары необходимо нажать на кнопку «+ numInWing», находящуюся сразу под полем «count». Нажатие добавляет параметр «numInWing», которому теперь мы можем изменять значение. Выставьте этот параметр в «2».
Таким образом мы разместили самолет на карте, задали ему высоту, назначили тип самолета, указали количество и разделили самолеты на пары.
Еще раз выделите самолет игрока, или просто посмотрите на него, если он уже выделен. Вы видите что из самолета тянутся три отрезка красного, зеленого и синего цветов. Так вот направление красного отрезка показывает то в какую сторону полетит самолет игрока, и следующие за ним самолеты при запуске миссии. С помощью кнопки «Вращение объекта» поверните самолет так, чтобы красный отрезок смотрел в нужную вам сторону.
Попробуйте сохранить миссию. При попытке сохранения, редактор выдает ошибку.
Описание ошибки
В самом верхнем ряду кнопок в окне редактора находится кнопка открытия консоли (Show/hide console). Нажатие на нее откроет окно консоли, в котором красным цветом будет написана наша ошибка:
«[MissionSettings] Target [unit] '' not found!».
Первый пункт ошибки «[MissionSettings]» говорит о том, где произошла ошибка — в настройках миссии.
Несмотря на то что в данном конкретном случае ошибка малоинформативна, обычно тут идет указание на конкретное место, в котором произошла пресловутая ошибка.
Пока же придется поверить, что ошибка возникла из-за того, что игра не может понять где игрок. Чтобы исправить эту ошибку нам придется научиться создавать игрока.
Теперь нам надо указать игре на самолет игрока.
Для этого нажмите на кнопку «Свойства миссии». Перед вами откроется окно состоящее из нескольких полей и разделов, которые можно сворачивать и разворачивать. Разверните раздел «Mission settings» и внутри него найдите еще один раздел «player_teamA». Разверните его, если он свернут. В поле «wing» этого раздела нажмите на кнопку «<none>» и в появившемся окне выберите «player».
Все. Вы только что указали игре на то какой самолет следует рассматривать как самолет игрока. Сохраните миссию и запустите ее для проверки.
Первая миссия. Полет по маршруту
Приведен простой пример создания этой миссии. С более полным можно ознакомиться в расширенной статье.
Настала пора сделать нашу первую миссию. Пусть это будет простая миссия, в которой надо будет просто пролететь по некоторому маршруту.
У вас уже должна быть открыта локация «Bulge» и выставлен самолет игрока. Давайте продолжим развивать эту миссию.
Первоначальная настройка миссии
Перед тем как начать расставлять самолеты нам необходимо задать базовые свойства миссии.Откройте окно свойств миссии и распахните раздел, озаглавленный как Mission Settings. Найдите в нем еще один раздел: «mission» и распахните его. Здесь Вам необходимо:
- В поле «name» ввести имя миссии на английском языке. Это имя должно быть уникальным для всей игры и является идентификатором миссии. Не должно существовать нескольких миссий с одним и тем же названием.
- В поле «level» выбрать карту которая будет грузиться игрой при выборе миссии. В нашем примере это должна быть карта «Bulge»
- Выбрать тип миссии (в Вашем случае это singleMission)
- В списке restoreType выставить attempts, если хотите, чтобы игрок имел несколько попыток пройти миссию (после гибели самолета игрока он восстанавливается в некоторой точке неподалеку от места гибели), или tacticalControl, что позволит игроку, в случае гибели самолета, занять самолет одного из своих напарников, если они, конечно, еще живы.
- В списке «campaign» необходимо выбрать в «western», так как миссия происходит на западном фронте. От этого выбора зависит в каком разделе одиночных миссий будет игра ваша миссия.
- В поле «environment» выберите какой тип неба будет в миссии.
- В поле «weather» выставьте тот тип погоды, который вам больше понравится.
После произведенных настроек можно свернуть весь список «Mission Settings».
Создание ключевых точек маршрута
Давайте наметим маршрут, по которому игроку придется пролететь. Для этого, с помощью кнопки «Создание точечной зоны» две точки, стараясь так чтобы они находились над дорогами. Измените имена этих точек на «waypoint01»-«waypoint02», и поднимите их на высоту 1000 над поверхностью ландшафта. Сохраните миссию.
Задание начальной точки маршрута
Для того, чтобы показать игроку куда лететь надо как-то обозначать ту точку маршрута, которой ему необходимо достичь. Для этого в разделе «Triggers / Mission Ob. Navigation» нажмите кнопку «Trigger» для создания триггера. Именно в триггерах будет задаваться вся логика миссии. Выберите только что созданный триггер и в окне справа измените его «Name:» на «start_mission». Под именем триггера вы можете увидеть поле «Enabled» со включенной галочкой. Это означает что триггер будет активен сразу после начала миссии.Ниже в этом же окне вы можете увидеть поле «Elements», в котором есть три пустых дерева: «Events», отвечающее за то когда триггер пытается исполниться; «Conditions», отвечающее за то, какие существуют условия проверки выполнения триггера; и «Actions», отвечающее за то, что именно происходит в триггере.
Сейчас в дереве «Events» находится событие «periodicEvent». Выделите его и нажмите кнопку «Delete», расположенную снизу поля «Elements», для того, чтобы удалить. Теперь нажмите кнопку «Event», чтобы добавить новое событие. В появившемся окне доступных событий выберите «initMission». Теперь данный триггер попробует выполниться сразу после старта миссии. Никаких условий для проверки выполнения триггера нам не надо, поэтому просто добавим новую команду, нажав на кнопку «Action». В появившемся окне выберите «missionMarkAsWaypoint», и настройте ему параметры:
- В поле «target» выберите первую точку маршрута, через которую надо пролететь игроку «waypoint01»
- Включите галочку напротив поля «visible», что отобразит точку в пространстве игры и на карте
- Включите галочку напротив поля «primary», что дополнительно пометит игроку точку, как основную точку маршрута
- Сохраните миссию, запустите ее и проверьте, что все работает как надо.
Отслеживание достижения начальной точки маршрута
Теперь необходимо отследить факт достижения игроком первой точки маршрута, для того, чтобы спрятать первую точку, пометить вторую точку в качестве основной и показать третью точку. Для этого создадим новый триггер и назовем его «to_waypoint02». Оставим ему включенной галочку «Enabled», чтобы проверка началась сразу же после старта миссии. В списке «Events» оставим событие «periodicEvent», так как нам подходит проверка на запуск триггера раз в секунду, что даст нам проверку на достижение точки маршрута раз в секунду. В отличие от предыдущего триггера нам будет необходимо добавить условие выполнения, чтобы триггер сработал только если игрок приблизится к точке маршрута. Для этого нажмите кнопку «Condition» и в появившемся окне выберите «playerDistanceBetween», заполнив поля:- В поле «target» укажите ту точку, приближение к которой необходимо определить. Это будет «waypoint01»
- В поле «value» укажите дистанцию, на которую необходимо приблизиться к точке, например «500» метров
- В поле «math» оставьте «2d», чтобы при проверке не учитывалось расстояние по высоте
Остальные поля оставьте такими, какие они есть, подробнее они будут рассмотрены в других примерах
Теперь, когда мы задали условие выполнения миссии давайте создадим набор команд, который должен будет выполниться. Первой командой будет выключение отображения той точки маршрута, к которой приблизился игрок. Для того, чтобы добавить эту команду нажмите кнопку «Action» и в появившемся списке выберите «missionMarkAsWaypoint» с параметрами:
- В поле «target» выберите точку маршрута к которой приблизился игрок: «waypoint01»
- Выключите галочку напротив поля «visible», что отобразит точку в пространстве игры и на карте
Теперь давайте покажем игроку следующую точку маршрута. Для этого добавим команду «missionMarkAsWaypoint», и настройте ему параметры:
- В поле «target» выберите первую точку маршрута, через которую надо пролететь игроку «waypoint01»
- Включите галочку напротив поля «visible», что отобразит точку в пространстве игры и на карте
- Включите галочку напротив поля «primary», что дополнительно пометит игроку точку, как основную точку маршрута
Сохраните миссию, запустите ее и проверьте, что все работает как надо.
Завершение миссии
Создайте еще один триггер с именем «to_the_end» и снимите галочку поля «Enabled», находящегося сразу под именем триггера. Это не позволит триггеру начать работу сразу после старта миссии.
Теперь давайте включим этот триггер после того, как достигнем первой точки маршрута. Для этого в триггер «to_waypoint02» добавьте новую команду: «triggerEnable», которой в качестве «target» укажите «to_the_end». Таким образом обработка триггеров будет происходить последовательно. Отключать тот триггер, который уже отработал, в данном примере нет необходимости, потому что они работают у нас строго один за другим, а выполнив все команды, которые содержатся внутри, самостоятельно выключаются.
В триггер «to_the_end» добавьте команду «missionMarkAsWaypoint», в котором отключите отображение последней точки нашего маршрута, после чего добавьте команду «missionCompleted». Сохраните миссию и запустите ее, чтобы убедиться, что все сделано правильно.
Создание задания для игрока
Задание всей миссии у нас будет одно: «пролететь по маршруту». Для того, чтобы его добавить необходимо создать текстовый документ, названный так-же, как назван файл, в который вы сохранили миссию, но с расширением «.csv» и префиксом "usr_". Например: "usr_sample01_bulge_simple.csv".
Откройте этот файл с помощью текстового редактора и сохраните его в кодировке «UTF-8». Теперь добавьте в этот файл строку:
«"follow_to_waypoints";"Follow to checkpoints";" Проследуйте по маршруту"»
и сохраните его еще один раз. Строка, которую вы добавили состоит из трех частей, заключенных в кавычки и разделенных между собой точкой с запятой. Первая часть «follow_to_waypoints"» - уникальный идентификатор задания. В пределах одного файла не должно быть второго идентификатора с таким-же именем. Вторая часть «"Follow to checkpoints"» - текст задания на английском языке. Третья часть «"Проследйте по маршруту"» - текст задания на русском языке.
Теперь вернитесь в редактор игры, откройте окно свойств миссии и найдите раздел «Triggers / Mission Ob. Navigation». Внизу этого раздела вы увидите ряд кнопок. Нажмите на «Mission Obj» и в появившемся окне выберите «abstractionMissionObjective». Вы создадите новую цель миссии. Выделите только что созданную цель миссии и в окне справа измените ее имя на имя идентификатора из текстового файла без кавычек: «follow_to_waypoints».
Сохраните миссию и запустите ее. Убедитесь, что при старте миссии вы получаете задание миссии.
Выполнение задания пролета по маршруту
Теперь давайте перейдем в финальный триггер «to_the_end» и добавим в него команду, которая пометит задание выполненным. Для этого из списка команд выберите «moSetObjectiveStatus», указав ему в качестве «target» задание с идентификатором «follow_to_waypoints», и выставив ему «status» равный «2», что соответствует выполненному заданию. Кнопкой «Up», расположенной под полем «Elements» со списком команд, передвиньте команду «moSetObjectiveStatus» на несколько пунктов выше, чтобы она оказалась выше «missionCompleted».
Туда-же добавьте команду «wait», изменив значение «time» на «3» секунды. Это делается для того, чтобы между появлением сообщения о выполнении задания и последующем сообщении окончания миссии прошло некоторое время и сообщения не наползали друг на друга. Передвиньте эту команду так, чтобы она оказалась между «moSetObjectiveStatus» и «missionCompleted».
Поздравляем, вы сделали свою первую миссию. Сохраните и запустите ее для проверки.
Вторая миссия: сопровождение бомбардировщиков
Теперь, когда мы уже знаем основы редактора миссий можно попробовать создать что-то посложнее. В этом разделеле, мы попробуем создать миссию по сопровождению бомбардировщиков, летящих уничтожать наземные цели.
- Предлагаем пользователю простой сюжет миссии, что-то вроде:
Берлин 1945 год, советские войска наступают с востока на город, все ближе приближаясь к его границе.
Люфтваффе бросает все оставшиеся силы на защиту города.
Вы так же можете выбрать другой сюжет для вашей миссии, изменив локацию или самолеты.
Задача игрока в миссии будет сопроводить бомбардировщики до их цели, защищая от возможных атак противника.
Откройте карту «berlin» и создайте новую миссию.
Первоначальная настройка миссии
Не забудьте настроить обязательные поля миссии: «name», «level», «type» и другие. Если вы забыли, как это делается то можете посмотреть это в соответствующем разделе первой миссии.
Выставление самолета игрока
После того, как настройка миссии завершена наступило время создать самолет игрока. По сюжету играть в миссии предстоит за немцев, поэтому выберите в качестве типа самолета какой-нибудь самолет конца войны, например «Bf-109-k4». И не забудьте поменять ему индекс армии на «1».
После того, как вы закончили с созданием самолета не забудьте указать, что именно на нем будет летать игрок. Как вы помните, делается это в настройках миссии.
Создание бомбардировщиков
Теперь, когда мы закончили с первоначальными настройками миссии и поставили игрока, перейдем к основному элементу нашей миссии — формации бомбардировщиков.
Создадим формацию бомбардировщиков: именно их мы будем сопровождать во время миссии и обеспечивать безопасность. Делается это точно по тому же принципу, что и создание самолета игрока, но так как в настройках миссии вы не указываете что данный самолет будет самолетом игрока, то управлением им автоматически возьмет искусственный интеллект.
Так как союзные самолеты являются бомбардировщиками, в качестве класса самолета укажите им например какой-нибудь немецкий бомбардировщик последних серий. Разместите его в непосредственной близости от самолета игрока, при этом чуть ниже, чтобы получить построение бомбардировщиков и истребителей прикрытия.
Бомбардировщики являются союзными игроку самолетами, а значит их индексы армий должны совпадать — выставьте бомбардировщикам значение индекса армии в «1».
Создание маршрута движения
Мы создали формацию бомбардировщиков, теперь надо задать им маршрут по которому они будут лететь к цели и обратно.
Для того, чтобы задать бомбардировщикам точку, в которую они полетят, вам будет нужно создать точечную зону где-то на карте, достаточно удаленную от игрока, чтобы полет до нее занял несколько минут реального времени. Назовите эту точку «bombing_point», и поднимите ее на высоту достаточную для того, чтобы самолет игрока и бомбардировщики не летели на бреющем полете и имели запас высоты для воздушного боя, если на них нападут по пути.
Задание полетного маршрута бомбардировщикам
Для того, чтобы отдать команду бомбардировщикам лететь в точку «bombing_point», необходимо дать им команду на движение в сторону этой точки.Для этого воспользуемся командой «unitMoveTo». Эта команда позволяет указать любому юниту, кроме того, которым управляет игрок точку, в которую ему необходимо следовать.
Создайте новый триггер с именем «start_mission», который будет являться триггером запуска миссии. Измените ему поле «Events» с «periodicEvent» на «initmission», как вы уже делали при создании первой миссии. Теперь добавьте в этот триггер команду «unitMoveTo» с параметрами:
- В поле «object» укажите бомбардировщиков «ally_bombers»
- В поле «target» укажите точку полета «bombing_point»
- Найдите поле «shouldKeepFormation» (оно находится ближе к концу списка) и включите галочку рядом с ним, чтобы самолеты летели строем.
Сохраните миссию и запустите ее для проверки. На данном этапе в миссии должен быть ваш самолет, а так же формация бомбардировщиков которая летит до точки «bombing_point».
Отслеживание полета до точки назначения
Задача игрока в нашей миссии — сопроводить бомбардировщики до первой точки в их маршруте, а значит нам нужно узнать когда формация бомбардировщиков будут поблизости от нее. Для этого нам необходимо постоянно проверять не достигли ли ее они еще. Чтобы включить эту проверку необходимо создать новый триггер. Назовем этот триггер «is_bombers_reach_first_point». Добавим в него новое условие проверки «unitDistanceBetween», с параметрами, где выставим расстояние между бомбардировщиками и точкой маршрута в 1000 метров. В качестве команды, которая будет выполняться в случае успешной проверки, добавим «moSetObjectiveStatus», указав, в качестве задания «flyToFirstWaypoint» (смотрите ниже "Выдача задания игроку") и присвоив ему статус «2», что означает выполненное задание. Теперь необходимо опять сделать паузу между сообщением о выполнении задания и окончанием миссии, а значит необходимо добавить команду «wait» на 3 секунды, и затем «missionCompleted».
Назначение маркера слежения на бомбардировщики
Итак, бомбардировщики летят к своей цели, но заметить их чрезвычайно сложно. Надо каким-то образом дать игроку возможность отслеживать их перемещения. Для этого, в триггере начала миссии «start_mission» создадим еще одну команду: «unitSetIndication», указав, в качестве «target» бомбардировщиков. Над бомбардировщиками появились галочки и теперь их лучше видно. Так же на карте миссии иконки бомбардировщиков начинают мерцать, что облегчает их идентификацию. Цвет галочек над бомбардировщиками, так же как и цвет их точек на карте зависит от того являются ли они союзными игроку, или его врагами, а так же входят ли они в крыло игрока.Так союзные игроку юниты отображаются голубым цветом, вражеские — красным, а юниты, которые входят в крыло игрока — зеленым.
Добавление иконки с числом бомбардировщиков
Так как основная задачи игрока заключается в сопровождении бомбардировщиков, необходимо показывать игроку успешность выполнения этой задачи. Для этого необходимо добавить в левый нижний угол экрана иконку с указанием количества бомбардировщиков.Для этого в триггер начала миссии добавим команду «missionSetTargetIndicator», настроив ее:
- В «traget» укажем «ally_bombers»
- В «icon» укажем «air», чтобы для иконки использовалось изображение самолета
- В «icon_army» укажем «1», чтобы иконка была синего цвета, характеризующего союзников, а не красного, характеризующего противников
Сохранившись, и запустив миссию, мы увидим индикатор самолета сопровождения в левой нижней части экрана, а так же увидим, что его иконка мигает на мини-карте и карте локации и его теперь легко можно обнаружить. Но, индикатор внизу экрана, добавленный таким образом обновится только 1 раз — в момент своей установки. Так как нам нужно чтобы он обновлялся постоянно, и в случае гибели самолета, отобразил это событие, то придется переделать эту часть.
Для этого переходим в триггер начала миссии, выделяем команду «missionSetTargetIndication» и нажимаем кнопку «Copy», располагающуюся ниже списка команд триггера. После этого нажимаем кнопку «Delete», чтобы удалить его. Создаем новый триггер с названием «update_indicator», в поле «Actions» вставляем скопированную команду, нажатием на кнопку «Paste». Выделяем триггер и ставим галочку «enableAfterComplete». Это позволит скрипту запускаться с периодичностью, указанной в его поле «Events» даже после того, как все команды триггера будут выполнены до тех пор, пока мы сами не остановим его выполнение.
Теперь, в случае гибели самолета сопровождения, его индикатор изменится.
Выдача задания игроку
Теперь, когда мы создали первую часть миссии, было бы неплохо дать игроку некоторую подсказку о том, что ему необходимо сделать. Для этого выдадим ему задание. Создайте новый «Mission Objective» с именем «flyToFirstWaypoint». Для этого посмотрите на ряд кнопок, где находится кнопка создания нового триггера миссии, и воспользуйтесь кнопкой «Mission Obj».Создание самолетов противника
Сопроводить самолет, это, конечно, весело, но если по пути вам встретится несколько врагов — будет значительно веселее. Добавление самолетов противника происходит точно так же как и добавление самолетов союзников, и все отличие заключается только в индексе армии, отличном от индекса армии игрока.
Пусть на половине пути к точке окончания миссии игрок будет атакован истребителями противника, имеющими преимущество по высоте. Для этого создайте между самолетом игрока и точкой назначение звено советских истребителей «la5fn», и поднимите их на несколько сотен метров выше самолета игрока. Не забудьте выставить индекс армии равный «2», а так же увеличить количество самолетов, чтобы они представляли собой реальную угрозу по выполнению игроком его задания.
Атака самолетов противника
Сразу после начала миссии истребители противника должны получить какое-либо задание, чтобы не лететь по прямой в неизвестном направлении. Давайте добавим команду атаки истребителями противника самолетов игрока. Для этого в триггер начала миссии «mission_start» добавим команду «unitAttackTarget», с параметрами:
- В поле «object» выберите того, кто будет атаковать - «enemiesLA»
- В поле «target» выберите две цели для атаки: самолет игрока и бомбардировщики
- Включаем поле «fireRandom» и выставляем ему галочку, чтобы самолеты противника выбирали себе случайные цели при атаке
Таким образом самолеты противника будут атаковать и бомбардировщики и истребители противника, так как в качестве цели для атаки мы указали обоих.
Проверка бомбардировщиков на смерть
Теперь, когда мы добавили атаку самолетов противника, бомбардировщики могут не долететь до своей цели, а значит нам нужно поставить условие проигрыша миссии, которое заключается в гибели всех бомбардировщиков. Для этого создайте новый триггер, с названием «check_for_bombers_dead» и добавьте ему условие проверки «unitWhenStatus» с параметрами:
- В «object» выбираем бомбардировщиков
- В «object_type» выбираем «isKilled», что означает что сработает в случае смерти самолета сопровождения
- В «check_objects» выбираем «all», для того чтобы условие сработала в случае смерти всех самолетов сопровождения, а не одного из них
Эта команда проверяет наличие у указанного юнита некоторого статуса, например, в приведенном примере статуса гибели.
В этот же триггер добавляем команду: «moSetObjectiveStatus» со значениями:
- В «target» указать задание «flyToFirstWaypoint»
- В «status» выставить «3», что соответсвует провалу задания
Добавляем команду «wait», со значением в 3 секунды, чтобы сообщение о провале задания не налезало на последующее сообщение о провале миссии. Добавляем команду «missionFailed».
Поздравляем, ваша вторая миссия готова!
Сохранитесь и запустите миссию. Если в миссии что-то работает не так как ожидалось, попробуйте перечитать нужную главу создания миссии или сравните ее с примером «sample02_berlin_simple».
Если она показалась вам слишком легкой или слишком сложной попробуйте изменить количество вражеских истребителей или бомбардировщиков.
Пример третьей миссии смотрите в прикреплённом документе (ниже)
Третья миссия. Бомбардировка
В предыдущих миссиях вы научились создавать самолет игрока, самолеты союзников и противников, а так же выдавать им приказы на следования по маршруту. Теперь-же давайте создадим миссию, в которой игроку самому придется лететь на бомбардировщике, и добавим новый элемент: бомбардировку.
По сюжету миссии игроку предстоит, в составе крыла бомбардировщиков HE-111 уничтожить английские корабли, стоящие в порту.
Откройте карту «britain» и создайте новую миссию.
Расстановка самолетов игрока и настройка миссии
Так как основной задачей миссии является бомбардировка. Давайте создадим самолет игрока в непосредственной близости от точки бомбардировки, для того, чтобы ему не пришлось тратить слишком много времени для ее достижения.
На побережье Англии найдите большой порт. Именно он и будет целью бомбардировки. Теперь создайте самолет игрока на подлете к этому порту и укажите ему использовать бомбардировщик «he111-h2». Так как бомбежка порта силами одного самолета будет выглядеть очень странно увеличьте количество самолетов в крыле игрока, но не делайте их слишком много.
Выставьте все необходимые поля миссии в требуемые значения, в качестве времени суток выберите вечер, а в качестве погоды «haze». Укажите миссии на каком самолете будет лететь игрок.
Создание союзников
Чтобы облегчить задачу игрока по бомбардировке порта, а так же сделать миссию более зрелищной стоит добавить самолеты союзников. Для этого переместите самолет игрока с зажатой клавишей «Shift» в сторону порта, и в появившемся окне введите новое имя: «ally_bombers». Таким образом вы создали клон эскадрильи игрока с теми же параметрами, но другим названием. Измените количество самолетов на 8, а количество самолетов в одном крыле на 2. Разместите самолет союзников в непосредственной близости с самолетом игрока, так чтобы при запуске миссии игрок видел перед собой звено союзных бомбардировщиков.
Не забудьте изменить индекс армии игрока и самолетов союзника на «1», а так же развернуть оба самолета так, чтобы они сразу после запуска миссии летели в сторону порта.
Направление союзников к порту
Как уже говорилось в описании предыдущей миссии предоставленные самим себе союзные самолеты будут лететь в неизвестном направлении, а значит им необходимо дать команду на движение к цели. Для этого создайте над портом точечную зону с именем «enemy_port». Чтобы направить самолеты союзников к этой точке необходимо добавить команду в один из триггеров миссии. Так как ни одного триггера мы еще не создавали, а выдать направление для движения нам необходимо сразу после запуска миссии, давайте создадим триггер «start_mission», указав ему, чтобы он запускался при старте миссии, а не с периодичностью в одну секунду.
Теперь необходимо добавить в это триггер команду, которая позволит союзным самолетам взять курс на порт. Воспользуйтесь командой «unitMoveTo», и не забудьте включить «shouldKeepFormation», чтобы самолеты летели строем.
Создание первой точки полетного маршрута и выдача задания
Для того, чтобы игроку было очевидно куда лететь, добавим первую точку маршрута и выдадим ему первое задание. Для этого в триггере «start_mission» включите отображение точки над портом в качестве путевой точки, воспользовавшись командой «missionMarkAsWaypoint». В результате выполнения этой команды при запуске миссии вы увидите впереди точку назначения.
Теперь добавим задание, которое будет выдаваться игроку в начале миссии. Для этого добавим «Mission Object» типа «abstractMissionObjective» с именем «reachEnemyPort». В файл «missions_objectives.csv» добавим строку «"reachEnemyPort";"Follow to the checkpoint";"Проследуйте к отмеченной зоне"». После этого сохраним файл в кодировке «UTF-8».
Достижение первой точки полета
Для того, чтобы завершить первое задание, связанное с полетом до вражеского порта, и выдать игроку новое задание, связанное непосредственно с бомбежкой, необходимо проверить достиг ли игрок английского порта или нет. Для этой проверки создадим новый триггер «check_for_reaching_first_point», где с помощью условия проверки «unitDistanceBetween» необходимо проверить чтобы расстояние между сквадом игрока и английским портом составляло не больше 3500 метров.
После этого необходимо пометить первое задание игрока выполненным. Делается это с помощью команды «moSetObjectiveStatus» с «target» «reachEnemyPort» и «status» равным «2».
Расстановка английских кораблей
Пришло время добавить в миссию объекты бомбардировки: английские корабли, стоящие в порту. Для этого с помощью кнопку «Create Unit», убедившись, что в поле справа выбрано «ships», расставляем в порту несколько кораблей. Потом, с помощью той-же кнопки создаем новый «squad», изменяем его имя на «english_ships», и добавляем в него все, только что созданные нами, корабли. Теперь выделяем каждый корабль и меняем его «class» на любой понравившийся из списка, начинающийся на «hms» (английские корабли). Убедитесь, что все корабли относятся к армии с индексом «2».
Как вы видите постановка кораблей практически не отличается от постановки самолетов.
Выдача нового задания
Когда игрок достигает территории порта ему необходимо выдать новое задание. Для этого в файл текстового описания миссии с расширением «csv» добавим строку: «"destroyEnemyShips";"Destroy enemy ships";"Уничтожьте корабли противника"».
После этого необходимо добавить новый «Mission Object», выбрав, как всегда «abstractMissionObjective». Назовем его «destroyEnemyShips» и снимем галочку «enabled», расположенную сразу после имени, для того, чтобы задание не выдалось игроку сразу со стартом миссии.
В триггере «check_for_reaching_first_point» мы выставляли первое задание для игрока выполненным. Второе задание для игрока мы выдадим в этом же триггере, а значит, чтобы сообщения о выполнении задания и получении нового задания не накладывались друг на друга необходимо добавить команду «wait» на 3 секунды.
После этой команды необходимо вставить команду, которая выдает игроку новое задание. Воспользуйтесь командой «moAddMissionObjective», в качестве «traget» указав задание «destroyEnemyShips».
После этой команды необходимо вставить команду, которая выдает игроку новое задание. Воспользуйтесь командой «moAddMissionObjective», в качестве «traget» указав задание «destroyEnemyShips».
Добавление английских кораблей в качестве целей
Когда игрок достигает порта, неплохо было бы указать корабли, стоящие в порту, в качестве целей, а заодно вывести учет их количества в левый нижний угол экрана.
Для этого в триггере «check_for_reaching_first_point» добавим команду «setUnitIndication», которому в качестве «target» необходимо указать «english_ships».
Создадим триггер «update_indicator», которому необходимо снять галочку «enabled» и поставить галочку «enableAfterComplete». В этот триггер добавим команду «missionSetTargetIndication», где в качестве «target» указать «english_ships».
В триггер «check_for_reaching_first_point» добавим «triggerEnable», которому в качестве «traget» необходимо указать «update_indicator».
Таким образом мы промаркировали корабли как цели, а так же включили отображение, оставшихся в живых кораблей.
Бомбежка союзными самолетами порта
Так как не все союзные самолеты находятся под управлением игрока было бы неплохо заставить их бомбить порт, а не просто летать над ним. Для этого воспользуемся командой атаки, которую мы использовали в миссии по сопровождению бомбардировщиков, когда заставляли истребители противника атаковать союзных бомбардировщиков.
Команду на атаку следует добавить в тот же триггер, в котором мы проверяли достижения порта. Перейдите в триггер «check_for_reaching_first_point» добавьте команду «unitAttackTarget», где в качестве «object» укажите сквад игрока, а в качестве цели для атаки — сквад английских кораблей.
Теперь, если сохраниться и запустить миссию, мы получим практически ее финальный вариант, в котором события развиваются согласно задуманным планам, и все, что нам остается доделать — это отследить условие победы. Чем мы и займемся.
Проверка удачной бомбежки
Пора создать триггер, который будет отслеживать уничтожение всех кораблей в порту. Для этого создаем новый триггер с названием «is_bombarding_was_succesful».
Условием проверки для этого триггера надо поставить достижение количества оставшихся английских кораблей какого-то значения. Делается это с помощью «unitWhenCountMatches» с параметрами:
- в «object» выбрать сквад «english_ships»
- в «object_type» выбрать «isAlive»
- в «func» выбрать «less»
- в «value» выставить значение «3»
Данное условие проверяет сквад английских кораблей на то что количество оставшихся «живых» кораблей является значением меньше трех.
Предположим, что корабли под управлением НПС так и не сумели потопить ни одного корабля, а игрок смог. Давайте добавим второе условие проверки — смог ли игрок потопить достаточное количество кораблей, чтобы миссия считалась выигранной?
Для этого необходимо добавить еще одно условие «unitWhenCountMatches», но выставить ему параметры:
- в «object» выбрать «english_ships»
- в «object_type» выбрать «isKilledByPlayer»
- в «func» выбрать «more»
- в «value» выставить значение «1»
Как вы видите условие проверки осталось тем же, что и на проверку оставшихся в живых кораблей. Но теперь мы проверяем количество кораблей, которые были уничтожены именно игроком, и если игрок уничтожил больше одного корабля, то условие считается выполненным.
Так как у нас есть два условия проверки нам необходимо выбрать как именно будет происходить проверка. Необходимо ли чтобы для успешной проверки были выполнены оба условия, или подойдет только одно из них и не важно какое? Обратимся к полю «conditionsType», расположенному под именем триггера. Сейчас значением этого поля является «ALL», что означает, что для успешной проверки необходимо выполнение всех условий. Давайте изменим его на «ANY», что позволит проверке быть успешной в случае если хотя бы одно из условий будет пройдено.
Теперь, когда условия выполнения триггера выполнены, добавьте команду, которая пометит задание по уничтожению вражеских кораблей выполненным и завершит миссию. Не забудьте вставить задержку между сообщениями о выполнении задания и сообщением о выполнении миссии.
Сохранитесь и проверьте полученную миссию. Если у вас возникают какие-то ошибки, или миссия работает не правильно, проверьте ее на соответствие миссии «sample03_britain_simple».
Четвертая миссия. Dog Fight
Давайте создадим миссию, которая целиком и полностью будет посвящена воздушному бою. По сюжету миссии игроку на паре американских истребителей необходимо пролететь вглубь острова Сицилия, для того, чтобы оценить силы противника. Залетев в глубь острова игрок подвергнется неожиданной атаке со стороны немецких истребителей.
Откройте карту «Sicily» и создайте новую миссию.
Создание самолета игрока и миссии
Самостоятельно выставьте самолет игрока и заполните все необходимые параметры миссии. Если вы что-то забыли, то посмотрите как вы делали это в предыдущих миссиях. Так же создайте первый триггер миссии с именем «mission_start» и заставьте его запускаться в момент запуска миссии.
Создание самолетов противника
Посмотрите в какую сторону повернут самолет игрока, и, сзади и выше игрока, создайте самолет противника, назначив ему численное преимущество. Постарайтесь расположить самолеты так, чтобы сымитировать внезапную атаку с задней-верхней полусферы на игрока.
Атака на игрока
Так как весь смысл нашей миссии заключается в том, что на игрока нападают, и он вынужден защищаться, в триггер начала миссии необходимо добавить команду атаки немецких истребителей на самолет игрока. И не забудьте про поле «fireRandom», если количество самолетов в крыле игрока больше одного.
Выдача нового задания
Откройте «missions_objectives.csv» и добавьте в него строку «"destroyAllEnemies";"Destroy all enemy fighters";"Уничтожте все вражеские истребители"», после чего сохраните его.
Добавьте в миссию новый «Mission Objective» с именем «destroyAllEnemies».
Выставление маркеров на истребители противника
Так как у игрока есть цель миссии — уничтожение всех самолетов противника, то эту цель надо как-то отметить. Добавьте индикацию над самолетами противника, и выведите их количество в левом-нижнем углу, чтобы игрок видел насколько эффективно он сражается.
Проверка выполнения миссии
Последним шагом для завершения работы над миссией является проверка условия выполнения задачи миссии. Создайте новый триггер, в котором проверьте уничтожение всех самолетов противника по аналогии как вы делали это в миссии с бомбардировкой порта.
В качестве команд для этого триггера поставьте команды выполнения задание и завершения миссии.
Сохранитесь и проверьте миссию. Если у вас возникают какие-то затруднения, сверьте вашу миссию с миссией «sample04_sicily_simple».
Пятая миссия. Защита завода
Последняя, пятая, миссия будет посвящена отражению атак бомбардировщиков на наземные объекты. Сюжет миссии построен на том, что игрок находится на патрулировании в воздухе над заводом Сталинграда, когда ему передаеют сообщение о большом количестве вражеских бомбардировщиков. Приближающихся к этому заводу.
Откройте карту «stalingrad» и создайте новую миссию.
Создание игрока и настройка миссии
Создайте самолет игрока, заполните все необходимые поля миссии и создайте триггер начала миссии.
Найдите на карте город Сталинград и завод рядом с ним. Так как по сюжету миссии игрок находится на патрулировании в окрестностях завода, передвиньте самолет игрока так, чтобы он находился рядом с заводом.
Создание бомбардировщиков противника
На расстоянии нескольких километров от завода создайте большое количество немецких бомбардировщиков и разверните их так, чтобы они летели в сторону Сталинграда. Создайте им точку над заводом, к которой они будут стремиться и дайте команду лететь в эту точку.
Создание целей для бомбардировки на заводе Сталинграда
Для того, чтобы бомбардировщикам было что бомбить, необходимо добавить им цели. Для этого переместим камеру в область завода рядом со Сталинградом и нажмем кнопку «Create unit», убедившись, что в области справа выбрано «structures». Поместим структуру на крышу одного из зданий завода. Изменим имя структуры на «bomb_target01», в качестве «class» укажем «dummy», и обязательно выберем «army» совпадающую с «army» игрока. Теперь давайте сделаем копии этой структуры, так же как мы делали копии самолетов, когда создавали истребители прикрытия для бомбардировщиков, и расставим их по крышам зданий завода. Не переусердствуйте, не надо создавать больше 16 целей, так как вместимость одного сквада ограничена 16-тью элементами. Теперь выделим все созданные структуры, и поднимем их на 100 метров вверх. После этого нажмите кнопку «Drop unit», расположенную на панели инструментов «Mission Editor». Это поместит выбранные структуры ровно на поверхность уровня, чтобы бомбы могли их уничтожать.
Задание на защиту завода
Теперь же надо объявить игроку цель его следующего задания. Для этого в нашем «cvs» файле добавьте строку «"bombers_engaged";"Defend plant, attack enemy bombers";"Защитите завод от атак вражеских бомбардировщиков"». В саму миссию добавьте новый «Mission Objective» с именем «bombers_engaged».
Помечаем бомбардировщики в качестве целей
Для отображения эффективности по отражению атаки на завод пометьте бомбардировщики, а так же включите отображение их количества в левой-нижней части экрана.
Показ счетчика строений завода
Однако защита завода заключается в том, чтобы не дать противнику разрушить слишком много зданий. Чтобы показать игроку сколько зданий еще осталось выведем счетчик целых зданий. Для этого в том триггере, в который вы добавили показ счетчика бомбардировщиков добавьте еще одну команду «missionSetTargetsIndicator», настроив параметры:
- в поле «target» укажите «bomb_targets»
- в поле «target_type» оставьте «isAlive», так как нам необходимо показывать количество еще целых зданий
- в поле «icon» выберите «building», чтобы на счетчике отображалась иконка здания
- в поле «icon_army» выберите индекс той армии, что назначена игроку
Сохранитесь и проверьте, что все работает.
Проверка на гибель всех бомбардировщиков
Игрок может уничтожить всех вражеских бомбардировщиков еще до того, как они достигнут завода. Поэтому сразу после того, как игрок получает задание по защите завода, необходимо начать проверку количества оставшихся бомбардировщиков.
Для этого создадим новый триггер «check_for_mission_completed». В поле «events» этого триггера удалим «periodicEvent», и вместо него добавим «timeExpires», выставив «time» в 30 секунд.
Добавляем триггеру условие проверки «condition» «unitWhenStatus», и настроив параметры:
- в качестве «target» необходимо указать немецкие бомбардировщики «enemy_bombers»
- в «object_type» необходимо указать «isKilled»
- в «check_object» необходимо указать «all»
Это позволит триггеру сработать только в том случае, если все бомбардировщики будут убиты.
Добавим команду «missionCompleted». Теперь, в случае если все бомбардировщики погибнут, миссия завершится.
Но так же миссия будет считаться пройденной успешно, если игрок не дал бомбардировщикам отбомбиться по заводу. Так как у нас будет отдельный триггер, который будет отслеживать провал миссии, здесь мы добавим еще одно условие проверки: на то, что у бомбардировщиков не осталось бомб. Ведь, если у бомбардировщиков нет бомб, они больше не могут бомбить цели, и если миссия еще не провалена, значит игрок добился успеха.
Добавьте условие «unitWhenStatus», указав в качестве «object» бомбардировщики, в «object_type» выбрать значение «noBombs», и в «check_object» выбрать значение «all». Таким образом когда у всех бомбардировщиков закончатся бомбы, условие выполнения триггера будет успешным.
Но в данном триггере у нас два условия проверки. Одно — на гибель всех бомбардировщиков, а второе — на нехватку бомб. А между тем нам не важно какое из двух этих условий наступило, так как любое из них приводит нас к выигрышу. Выше поле «Elements», в которое вы добавляли условия проверки найдите поле «conditionsType» и выберите значение «ANY».
В качестве команд для этого триггера выберите команду, помечающую задание выполненным и команду завершения миссии.
Проверка достижения завода самолетами противника
Самое время ввести проверку на то, достигли ли бомбардировщики противника территории завода, и не пора ли начинать его бомбить. Добавьте триггер, который будет обрабатывать эту проверку и дайте бомбардировщикам команду на атаку, в случае если они приблизятся к заводу.
Эвакуация бомбардировщиков
Чтобы бомбардировщики, чьи боеприпасы закончились, не кружились над заводом, необходимо дать им команду к эвакуации. Для этого сначала необходимо создать точку эвакуации. С помощью кнопки «Create point zone», расположенной на панели инструментов закладки «Mission Editor» создайте новую зону, примерно там же, где находится начальная позиция бомбардировщиков, поднимите ее на высоту 500 метров и назовите «evacuate_point».
Теперь перейдите в триггер, в котором вы дали бомбардировщикам приказ на атаку завода и добавьте команду на полет к точке эвакуации.
Переместите эту команду на строку выше чем приказ об атаке. В результате этого бомбардировщики, достигнув территории завода, получат приказ на эвакуацию, а так же приказ на атаку. Так как приказ на атаку имеет приоритет, то они сначала начнут атаковать цель, а когда боеприпасы закончатся, начнут паническое бегство.
Проверка успешности бомбардировки
Время окончания бомбардировки нами определено, теперь надо узнать ее результаты. Для этого создайте новый триггер и в условиях проверки проверьте не достигло ли количество целых зданий завода какого-либо значения. Например восьми.
Если проверка была успешной добавьте команду «moSetObjectiveStatus», в поле «status» выбрав значение «3», что соответствует провалу миссии. Добавьте команду «wait», чтобы сообщение о провале задания не мешало сообщению о провале миссии и завершите все командой «missionFailed».
Сохранитесь и проверьте миссию. Если вы испытываете какие-либо затруднения, сверьте ее с миссией «sample05_stalingrad_simple».
Украшения миссии
Так как игрок большую часть предыдущей миссии летит на бреющем полете, было бы неплохо показать ему какое-либо движение по маршруту следования. Давайте научимся создавать наземную технику, радары и зенитные орудия.
Создание танка
В миссии с пролетом по кругу выберите участок между двумя точками маршрута игрока и создайте на этом участке один «tracked_vechicle». Выделите его и откройте окно свойств объекта. Смените этому объекту имя на «germ_tanks01», и выставьте ему модель «germ_tigerI». Выставьте получившемуся танку правильный индекс армии, не совпадающий с индексом армии игрока, а количество танков в отряде установите равным 10.
В миссии с пролетом по кругу выберите участок между двумя точками маршрута игрока и создайте на этом участке один «tracked_vechicle». Выделите его и откройте окно свойств объекта. Смените этому объекту имя на «germ_tanks01», и выставьте ему модель «germ_tigerI». Выставьте получившемуся танку правильный индекс армии, не совпадающий с индексом армии игрока, а количество танков в отряде установите равным 10.
Создание колесной техники или пехоты ничем не отличается от создания танков, просто необходимо выбрать другой тип создаваемого юнита.
Создание точек пути
Выделите танк, нажмите на кнопку «Создание точек путей» и поставьте несколько точек на пути предполагаемого движения танка. При постановке первой точки обратите внимание на изменившееся окно свойства объекта. Первое поле — имя точки путей, и вы можете изменить его, при желании. Далее идет тип точки, оставьте его в значении «normal», координаты точки и раздел «Properties». В этом разделе существует всего два параметра: «speed», отвечающий за скорость движения объекта. Измените его в 30, так как у нас все-таки танки, а не самолеты, и «move_type», отвечающий за то как объект будет двигаться к этой точке. Нас интересуют только два типа движения: «MOVETO_STRAIGHT», заставляющий объект двигаться к точке пути по прямой и «MOVETO_ZIGZAG», заставляющий объект двигаться зигзагами.
Поставьте еще несколько точке путей, каждой из них настроив параметры передвижения.
Если вы решите изменить параметры передвижения уже после того, как установили точку, существует два способа редактирования этих параметров. Первый заключается в том, что вы выделяете объект которому назначен путь (или включаете режим отображения всех точек пути), видите появившиеся точки, выделяете одну из них и редактируете. Второй способ заключается в выделении объекта, нахождении в окне его свойств раздела «Waypoints» выделении в этом разделе точки пути и прокрутке окна свойств объекта вниз, до раздела «Waypoint Props», где так же есть возможность редактировать параметры точки.
Движение объекта при приближении игрока
Если вы хотите чтобы игрок гарантировано встретил танки на своем маршруте, возможно вы захотите сделать так, чтобы они начинали свое движение только когда игрок приблизится к ним на некоторое расстояние.
Назначьте танкам путь, по которому вы хотите, чтобы они двигались, после чего выделите первую точку пути и измените ей параметр скорости на «0». Теперь давайте создадим триггер с именем «check_for_tanks_near» и добавим в него условие проверки выполнения триггера - проверку дистанции между игроком и танками за 1000 метров. В качестве команды добавим «unitSetProperties», где в качестве цели команды выберем танк, найдем поле «speed», и выставим ему значение в 30.
Если вы сейчас работаете с предыдущей миссией, то, чтобы не плодить количество триггеров можно привязать проверку дистанции, и выставление скорости не к танкам, а, точкам маршрута игрока. Выберите точку маршрута которая будет находиться по ходу движения игрока к танкам. Проверки дистанции для всех точке маршрута у нас уже существуют, так что находим триггер, в котором мы проверяем дистанцию до этой маршрутной точки и добавляем в него команду установки скорости.
Именно так и сделано в миссии «sample01_bulge».
Создание зенитных орудий
Для создания атмосфера того, что игрок находится на войне можно добавлять зенитные орудия. Если действие миссии предполагается делать на линии фронта можно добавить зенитных орудий на стороне игрока и на стороне противника, если в тылу врага, то на стороне противника, и соответственно, если в тылу территории стороны игрока — то на стороне игрока.
Не пренебрегайте зенитными орудиями, так как разрывы в воздухе сильно оживляют атмосферу игры. Воспользуйтесь кнопкой создания юнита, выбрав тип создаваемого юнита как «air_defence» и поставьте несколько зенитных установок в желаемых позициях. Выберите им тип зенитной установки, выставьте правильны индекс армии. Собственно на этом создание зенитных орудий заканчивается.
Если вы хотите поставить на карту радары, то делается это по аналогии с зенитными орудиями.
Создание эффектов
Для миссий, проходящих не высоко над землей вам наверняка захочется добавить несколько эффектов, для оживления ландшафта. Например, дымы горящего города, в котором сейчас идут бои.
Для создания эффекта воспользуйтесь кнопкой «Создание эффекта», а в окне его свойств отредактируйте имя эффекта и из списка доступных эффектов выберите тот эффект, который вам нужен. Поле «radius» указывает на радиус в котором этот эффект появится. Поле «Density» влияет на заметность эффекта, и чем значение этого поля выше, тем заметнее эффект.
Создание роликов на движке игры
Если у вас возникло желание создать ролик на движке игры, вы можете воспользоваться командой «showSmartCutscene». У этой команды есть следующие параметры:
- параметр «sceneType» выбирает тип сцены, который будет использоваться при показе ролика. Например «on_the_march» хорошо показывать если вы хотите показать юниты, двигающиеся в строю, а «unit_attack_unit» - если хотите показать атаку одного юнита на другой
- параметр «startSubType...» (окончание названия параметра зависит от того какой тип сцены вы выбрали) показывает вид, который будет использоваться по умолчанию. Например если в сцене «on_the_march» выбрать вид «far», то юниты будут показываться издали
- поля «object» и «target» - в них необходимо указать на кого будет центрироваться камера в процессе показа ролика. Если объекта два, то в зависимости от выбранного вида, камера может переключаться между двумя этими юнитами или стараться показать их обоих
- поле «duration» - влияет на длину ролика и измеряется в секундах
Остальные поля являются опциональными и чтобы разобраться с тем, как они работают, вы можете поэкспериментировать сами.
Создание брифинга
Чтобы перед запуском миссии игроку была показана карта миссии с задачами миссии необходимо создать для этой миссии брифинг.
Для этого откройте окно свойств миссии и найдите скрытый раздел, представленный кнопкой «+ briefing». Нажмите на эту кнопку чтобы сделать радел активным и развернуть его. После развертывания раздела вы увидите три поля с именами «place_loc», «date_loc» и «objective_loc». Оставьте эти поля пустыми.
Чуть ниже находится неактивный раздел «parts». Нажмите на кнопку «+ parts», чтобы активировать этот раздел и распахнуть. В этом разделе найдите еще один неактивный раздел «slide» и так же активируйте его. Включите галочку поля «map», чтобы отображать настройки, которые вы произведете ниже, на карте во время брифинга.
Теперь, если вы хотите показать траекторию полета, активируйте раздел «arrow». Поле «width» указывает ширину рисуемой линии траектории полета. Оптимальным значением будет «3». Поле «side» определяет цвет линии траектории полета: для игрока она будет зеленой, для союзников — синей, для противника — красной. Поля «point» определяют точки маршрута, через которые будет рисоваться линия траектории. Первой точкой надо всегда указывать сам юнит, который должен будет пройти по траектории, чтобы линия начинала рисоваться от него. Последнюю-же точку маршрута необходимо указать дважды, чтобы миссия поняла, что это конечная точка.
Активируйте раздел «icon», чтобы добавить на карту брифинга иконку юнита. В поле «icontype» выбирается вид иконки, в поле «side» - принадлежность одной из игровых сторон, а в поле «target» необходимо указать юнит, который эта иконка будет символизировать на карте.
Поле «lookAt» работает только для самолетов. В этом поле необходимо указать точку, в которую будет повернута иконка самолета на карте брифинга.
Так как на одной карте брифинга вы скорее всего захотите показать информацию больше чем по одному юниту, то просто сделайте столько разделов «slide», сколько вам надо.
Команды управления самолетами
Во время создания миссий вы часто будете создавать самолеты и давать им различные команды. Основные команды по управлению самолетами перечислены в этом разделе.
Усыпление самолетов
Очень часто самолет или группа самолетов нужны не сразу, а только в определенный момент. Например, игрок получает задание долететь до некоторой точки, а когда он до нее долетает, его атакуют самолеты противника. Конечно, можно разместить самолеты противника на расстоянии от этой точки так, чтобы когда игрок прилетит к ней, они бы тоже вскорости были там. Но такой подход плох тем, что если игрок не будет спешить лететь к точке, куда ему сказано прибыть, то самолеты противника достигнут ее раньше игрока, и начнут крутиться над ней, портя всю задумку миссии.
Для того чтобы этого не случалось самолеты необходимо усыпить.
Делается это, как правило, в самом первом триггере миссии, где вы задаете начальные условия миссии. Создайте самолет, который вы хотите усыпить, выставьте ему имя, армию и тип самолета, после чего в начальный триггер вашей миссии добавьте команду «unitPutToSleep», и в качестве цели этой команды укажите выбранный вами самолет.
Теперь при запуске миссии усыпленный самолет будет невидим для игрока, и не будет никак обрабатываться игрой. Фактически они будут висеть на месте в той точке, куда вы их поместили, но будут не осязаемы и не видимы.
Пробуждение самолетов
Рано или поздно наступит момент когда вам захочется разбудить самолеты, которые вы усыпили при начале миссии, чтобы они начали выполнять свою функцию. Например, игрок достиг точки патрулирования, где по вашей задумке на него и должно произойти вероломное нападение.
Надеемся, что вы поместили нападающие самолеты близко от искомой точки, чтобы игроку не пришлось тратить слишком много времени на их ожидание.
Для того, чтобы разбудить их перейдите в триггер который отвечает за выполнение условия их пробуждения и добавьте в него команду «unitWakeUp», в качестве цели указав самолет, который требуется разбудить.
Задача на атаку
Самолеты под управлением АИ, размещенные в воздухе упадут рано или поздно, если не давать им никаких команд. Они просто будут лететь по прямой, постепенно снижая высоту, что и приведет их к такому печальному концу. Для того, чтобы подобного не происходила у каждого самолета, управляемого АИ все время должна быть хотя бы одна активная команда. Например, команда на атаку.
Перейдите в триггер, в котором вы хотите начать атаку самолетов на их цель и добавьте команду «unitAttackTarget». В поле «object» выберите того, кто будет атаковать, а в поле «target» - цель для атаки.
Обязательно найдите поле «fireRandom» и включите галочку напротив него. Это позволит самолетам атаковать не одну и ту же цель, а выбирать себе цели в случайном порядке.
Задача на полет
Для того, чтобы выдать самолетам под управлением АИ задание на полет необходимо указать цель полета — какую-либо точку или другой самолет. Когда самолет, которому вы дали задание на полет, достигнет цели своего полета, он начнет кружиться вокруг нее в некотором радиусе.
Для того, чтобы выдать задание, необходимо добавить команду «unitMoveTo», где в качестве «object» необходимо указать самолет, который полетит к цели, а в «target» - цель полета. Если прокрутить окно ниже, то можно найти параметр «speed», и задать в нем скорость, с которой самолет будет стараться лететь к цели своего полета. Если скорость не задана, то он будет лететь с максимальной скоростью.
Настройка сложности миссий
Существует несколько путей настройки сложности миссии. Самый простой из них — изменение количества противников или союзников мы рассматривать не будем, а вместо этого рассмотрим те из них, что задаются из настроек юнитов.
Настройка точности стрельбы
Создайте команду «unitSetProperties», и в качестве «object» выберите один или несколько самолетов. В списке полей этой команды найдите поле «effShootingRate». Это поле изменяется в диапазоне от «0» до «1» и влияет на то как эффективно юнит пытается поразить свою цель. Если вы выставите значение этого параметра в «0», то юнит будет совершенно безопасен для своих целей, разве только они сами своим маневром не попадут под его очередь, а при значении «1» юнит становится очень опасным, берет правильные упреждения и стреляет только тогда когда уверен, что попадет, не паля в воздух.
Хорошей идеей будет не делать всех противников одинаковыми по точности стрельбы, ослабьте одних и усильте других, чтобы у игрока складывалось впечатление, что он сражается с реальными людьми.
Настройка количества противников атакующих только игрока
Предположим, что мы дали задание десяти самолетам противника атаковать 6 самолетов игрока. В команде атаки мы включили «fireRandom», чтобы сымитировать ситуацию, когда цели во время боя выбираются хаотично, но теперь нам надо сделать так, чтобы с одной стороны игроку было интересно, а значит его постоянно должен кто-то атаковать, а с другой стороны не допустить ситуации, когда игрока атакуют слишком много противников, не обращающих никакого внимания на остальные самолеты.
Для настройки этого параметра в команде «unitAttackTarget» найдите параметр «playerAttracted» и включите галочку напротив него. Ниже, в поле «playerAttractedCount» укажите количество самолетов противника, которые всегда будут атаковать игрока. Еще ниже поле «playerAttractedEffRate» отвечает за точность стрельбы самолетов противника при стрельбе по игроку. Например, вы уже выставили «effShotingRate» в «0.5», чтобы самолеты противника стреляли не очень точно. НО вам хочется чтобы игроку в этой миссии было тяжелее, и тогда вы можете выставить «playerAttractedEffRate» в «1», чтобы именно при стрельбе по игроку точность выстрелов противника увеличивалась.
Настройка разброса стрельбы
Настройка этого параметра является самой сложной. Сложность во многом заключается в том, что это динамически изменяющийся параметр, изменения которого зависят от действий игрока.
Этот параметр желательно настраивать как союзным самолетам, так и самолетам противника.
Откройте команду «unitSetProperties», в поле «object» укажите юнит, на который будет распространяться, после чего найдите поле «plane» и разверните его. Последним параметром получившегося раздела стоит «targetDeviation». Раскройте и его тоже. В свою очередь этот раздел состоит из нескольких полей.
Поле «trigger» отвечает за то, разброс какого оружия мы будем настраивать. Для настройки доступны три вида: «machine_gun» - отвечает за разброс оружия, стрельбой из которого управляет пилот; «bombs» - отвечает за разброс при бомбометании и «gunner» отвечает за разброс оружия стрелка. Последние два параметра актуальны для бомбардировщиков и штурмовиков, а первый — в основном для истребителей.
Ниже находится поле «defaultVal». Это поле стоит увеличивать, если вы хотите, чтобы по умолчанию разброс оружия для редактируемого самолета был большим, и уменьшать, если хотите добиться высокой точности. Для союзных самолетов стоит выставить этот параметр повыше, чтобы без успешных действий игрока они так же вели себя не очень хорошо, а для противников — наоборот, пониже.
Единица измерения этого и последующих полей очень забавная единица, называющаяся «корпус цели». Если значение поля принимает значение «0», это означает, что разброс оружия равен нулю и пули всегда попадают в цель (без учета маневров цели), если значение равно «1», это означает что пули, летящие по цели, будут лететь в приделах корпуса цели, что увеличит шанс промаха при условии маневрирования цели. При значении равном «2» пули будут лететь в пределах двух корпусов, то есть очень многие пули будут, пролетать рядом с целью, не нанося ей вреда. Максимальным приемлемым значением можно считать «4.5», когда попадание по цели не гарантируется. В зависимости от того по какой цели будет стрелять редактируемый самолет, фактическое расстояние промахов будет сильно различаться, так как размеры корпусов у «И-16» и авианосца мягко говоря разные.
Рассмотрим оставшиеся два поля, названные «limits». Эти поля отвечают за минимальный и максимальный разброс оружия самолета. При этом для союзных самолетов при успешных действиях игрока разброс постоянно уменьшается, а при не успешных действиях — увеличивается. Для самолетов же противника все происходит наоборот — при успешных действиях игрока их разброс увеличивается, а при не успешных уменьшается. Можно назвать это боевым духом.
Рассмотрим влияние этих параметров на примере. Например, игрок сопровождает бомбардировщики, и на эти бомбардировщики нападают несколько истребителей противника. Если игрок грамотно маневрирует, часто попадает по самолетам противника, или же пули игрока проходят в непосредственной близости от самолетов противника, союзные бомбардировщики воодушевляются, их стрелки начинают бить точнее, а бомбы более прицельно ложиться в цель. Истребители противника-же наоборот, начинают все чаще мазать и им все сложнее выполнить свою задачу. Или же наоборот: игрок безуспешно гоняется за истребителями противника и палит в белый свет, как в копеечку. В этом случае истребители противника начинают чаще попадать по игрокам и бомбардировщикам, а бомбардировщики становятся менее результативными.
Сквады
Предположим, вы хотите создать миссию, в которой будет много целей для бомбометания для ваших бомбардировщиков. Если вы решите дать бомбардировщикам команду «unitAttackTarget», то чтобы указать все цели для бомбометания, вам придется указать все их, что создаст большой список. А если вы захотите проверить сколько целей осталось после бомбардировки? Проверять каждую цель по отдельности?
Чтобы избежать этого вы можете объединять объекты одного или произвольных типов в сквады. А потом работать напрямую со сквадами: указывать их в качестве атаки, подсчитывать количество элементов сквада и так далее.
Давайте создадим несколько самолетов: бомбардировщики и истребители прикрытия, которым дадим приказ лететь в какую-то точку. В обычном случае в команде «unitMoveTo» нам пришлось бы указывать две цели. Теперь давайте создадим сквад, с помощью кнопки создания юнита, и выбрав из списка типа создаваемого юнита тип «squad», и разместим его рядом с созданными самолетами. Выделим сквад и в окне его свойств увидим поле «squad_members» добавим в качестве членов сквада оба созданных самолета. Теперь, в команде «unitMoveTo» вы можете указать не сами самолеты, а сквад, в который они входят.
Количество элементов одного сквада ограничено цифрой 16.
Аэродромы
Перед созданием аэродрома нужно определиться с тем хотите ли вы создать аэродром на пустом месте, или же на месте, где действительно находится аэродром, возведены специальные здания и прорисованы взлетно-посадочные полосы. В первом варианте все просто: найдите любую более-менее ровную и пустую площадку и приступайте непосредственно к созданию аэродрома, пропустив следующий абзац.
Если вы хотите разместить аэродром в более-менее аутентичных декорациях, то вам придется переключиться в закладку редактора «Landscape». В этой закладке найдите кнопку «Select object by name» и нажмите ее. В появившемся окне введите «air». Если после этого один или несколько объектов из списка внизу являются выделенными — вам повезло. Если нет — это означает, что на данной локации нет аэродромов. В случае, если аэродромы нашлись. Выделите один из объектов, закройте окно и нажмите клавишу «Z» на клавиатуре, чтобы оказаться рядом с этим объектом. Отдалите камеру, покрутите ей, чтобы осмотреть окрестности аэродрома и если вас все устраивает приступайте к созданию аэродрома.
Первым делом мы должны создать зону прямоугольного типа, и разместить ее так, чтобы она очертила границы будущей взлетно-посадочной полосы. Имейте в виду, что если вы сделаете поле слишком маленьким, то самолеты не смогут появиться на аэродроме. Измените название зоны на «airfield_area», чтобы ни с чем ее не спутать. Теперь создайте две сферических зоны с именами «airfield_start» и «airfield_end», и разместите одну в начале поля, а другу в конце. Эти две зоны фактически являются границами взлетно-посадочной полосы, смотрите чтобы расстояние между ними было достаточным, иначе самолеты не появятся на аэродроме.
Теперь необходимо обозначить точки, на которых будут появляться самолеты. Создайте несколько сферических зон возле «airfield_start» и назовите их «airfield_spawn01»-«airfield_spawnXX». Если вы планируете, что с взлетного поля будет взлетать 5 самолетов, необходимо разместить 5 зон для их появления.
Команда создания аэродрома
Теперь перейдите в триггер начала миссии, или создайте его и добавьте в него команду: «addAirfield». В поле «runawayStart» укажите зону начала полосы «airfield_start», в поле «runawayEnd» укажите зону конца полосы «airfield_end». Параметр «ruawayWidth» отвечает за ширину взлетного поля, и по умолчанию равен 10 метрам. Обязательно выставьте поле «army» соответствующее тем самолетам, которые будут с него взлетать. В поле «spawnPoint»добавьте все зоны, предназначенные для появления самолетов. Поле «visibleOnHud» отвечает за видимость взлетного поля на карте локации.
Установка самолетов на аэродром
Следующая команда позволит вам поставить на созданный аэродром самолеты: «spawnOnAirfield». В поле «runawayName» укажите точку начала взлетно-посадочной полосы «airfield_start». В поле «objects» укажите все объекты, которые вы хотите разместить на аэродроме. В поле «takeOffInterval» укажите время в секундах между взлетом одного самолета и началом взлета другого.
Время выполнения задания
Предположим вы хотите ограничить время выполнения какого-либо задания 3-мя минутами, например бомбардировку кораблей противника. Если за 3 минуты игрок и союзные самолеты не успевают разбомбить корабли противника миссия будет считаться проваленной. Для того, чтобы корректно отсчитывать время бомбардировки, необходимо завести новую переменную «bombardingTime». Для этого необходимо нажать кнопку «Add» в секции «Variables», расположенной ниже списка триггеров миссии, указать необходимое имя и выбрать тип переменной «Integer». Сразу же добавьте значение переменной равное 180.
Для того, чтобы работать с этой переменной перейдем в триггер «update_indicator» и добавим ему команду «varModify» с параметрами:
- в «var» выберем переменную «bombardingTime»
- в «operator» укажем «add»
- в «value» укажем «-1»
Переменную мы изменяем, неплохо было бы так же проверять ее на некоторое значение, и, если оно уже достигнуто, запрещать дальнейшее увеличение переменной и отправление бомбардировщиков к точке эвакуации.
Для этого создадим новый триггер с именем «check_for_bombarding_time» и выключим галочку «enabled». В качестве «conditions» необходимо указать «varCompareInt» с параметрами:
- в «var_value» укажем имя переменной «bombardingTime»
- в «value» выставим значение «0»
- в «comparasion_func» выберем «less»
Так как игроку дается некоторое время на выполнение задания, было бы неплохо его отображать. Для этого, в триггере, где вы уже отображаете количество чего-либо (например самолетов противника) добавьте команду «missionSetTimerIndicator», указав ему в качестве «target» нашу переменную «bombardingTime».
Редактирование параметров объектов
Данная глава будет целиком и полностью посвящена описанию всего одной команды: «unitSetProperties», а точнее параметров, доступных для редактирования с ее помощью.
Раздел «plane»
В настройках команды первым пунктом является не активированный раздел «plane». Его параметры влияют только на самолеты под управлением искусственного интеллекта. Активируйте его и раскройте. В нем вы увидите следующие поля:
- ai_skill – позволяет выставить пилотное умение пилота. Доступны такие опции, как «ROOKIE», «NORMAL», «VETERAN» и «ACE»
- silence – позволяет включить или выключить режим радиомолчания
- task – меняет юниту задание на выбранное из списка
- target — определяет цель для задания выставленного в поле «task»
- скрытый раздел «targetDeviation» подробно описывается в разделе «Настройка сложности миссий»
Поля вне раздела
- object – позволяет выбрать юнит, к которому будут применены выставляемые параметры
- object_type — позволяет выставить юниту один из нескольких статусов, например сказать, что юнит уничтожен игроком
- army — позволяет изменить индекс армии юнита
- isDelayed – тоже самое что putToSleep
- stealthRadius – тоже самое что setStealth
- targetAir – если выключено юнит не атакует воздушные цели. Не работает для самолетов
- targetGnd - если выключено юнит не атакует наземные цели. Не работает для самолетов
- accuracy – точность стрельбы юнита
- fuel — запас топлива юнита. Применимо только к самолетам
- targetableByAi — позволяет включить или выключить «видимость» объекта для самолетов, управляемых искусственным интеллектом
- speed — позволяет выставить юниту скорость движения
- lockSpeed — позволяет включить или выключить режим, при котором вне зависимости от маневров юнита его скорость остается неизменной
- usePosAsCover – для пехоты. Юнит будет считать свое нынешнее положение укрытием
- dontUseCovers — для пехоты. Запрещает искать и отсиживаться в укрытии
- followWaypoint — команда назначается объекту для которого назначены точки пути. В команде указывается сколько точек пути должен пройти юнит после получения команды
- alwaysRun — для пехоты. Юнит будет всегда перемещатся только бегом
- isImmortal — позволяет включить или выключить юниту состояние бессмертности
- delayForObjects – настройки вступят в силу для последовательно для всех юнитов в списке, с указанной задержкой между каждым юнитом
- useForTriggerFiltered – настройки вступят в силу только для тех юнитов из списка которые были отфильтрованы условиями проверки триггера
- aiEnabled - позволяет включить или выключить управление юнитом искусственного интеллекта
- effShotingRate — позволяет задать эффективность стрельбы юниту
- ignoresEnemy — позволяет включить или выключить юниту режим игнорирования противников
- hasExhaut – убирает эффект дыма у юнитов, надо когда например корабль стоит в гавани
Список всех событий
periodicEvent | Триггер выполняется раз в некоторое время, которое указывается в настройках события |
timeExpires | Триггер выполняется один раз через заданное количество времени |
initMission | Триггер выполняется при запуске миссии |
Список всех условий проверки
gameWhenDifficulty | Проверяет текущую сложность игры |
gameWhenHintIsNotActive | Проверяет отсутствие отображаемой подсказки |
infantryTroopWhenKilledByPlayerMatches | Проверяет количество уничтоженной пехоты игроком |
misObjStatus | Проверяет статус задания (провалено, выполнено, в прогрессе) |
missionIsLZCaptured | Проверяет захвачена ли зона приземления |
missionIsSuccess | Проверяет завершилась ли миссия успехом |
missionWhenAdditionalTime | Проверяет сколько времени прошло после успешного окончания миссии, если игрок выбрал продолжить игру |
missionWhenTime | Проверяет сколько времени прошло с начала миссии |
playersDistanceBetween | Проверяет дистанцию между игроком и объектом |
playersWhenEnemyNear | Проверяет когда дистанция между игроком и противником достигает некоторого значения |
playersWhenInArea | Проверяет когда игрок оказывается в пределах зоны |
playersWhenOnLZ | Проверяет когда игрок оказывается в зоне приземления |
playersWhenReachHeight | Проверяет когда игрок достигает заданной высоты |
playersWhenStatus | Проверяет состояния самолета игрока |
playersWhenManeuver | Проверяет выполнение игроком нескольких маневров (выбираются из списка) |
playersWhenOptions | Проверяет использование дополнительных режимов (какой активный вид, захвачена ли цель и т.д.) |
playersWhenOrientation | Проверяет ориентацию игрока в пространстве |
triggerStatus | Проверяет статус триггера |
unitDistanceBetween | Проверяет дистанцию между двумя юнитами |
unitWhenAnyLess | Проверяет соответствие хотя бы одного юнита из списка выставленному условию |
unitWhenControls | Проверяет состояние органов управления у юнита |
unitWhenCountMatches | Проверяет соответствие количества юнитов заданному диапазону |
unitWhenEnemyNear | Проверяет наличие рядом с юнитом юнитов противника в пределах некоторого радиуса |
unitWhenInAera | Проверяет попадание юнита в зону |
unitWhenOnLZ | Проверяет нахождение юнита в зоне приземления |
unitWhenPartHp | Проверяет количество здоровья у частей юнита |
unitWhenProperties | Проверяет настройки юнита |
unitWhenReachHeight | Проверяет достижение юнитом заданной высоты |
unitWhenStatus | Проверяет статус юнита |
varCompareBool | Сравнивает логическую переменную с заданным значением |
varCompareInt | Сравнивает целочисленную переменную с заданным значением |
varCompareReal | Сравнивает переменную с плавающей точкой с заданным значением |
varCompareString | Сравнивает строковую переменную с заданным значением |
playerShortcutPressed | Проверяет нажатие игроком горячей клавиши |
playerSeesUnit | Проверяет находится ли заданный юнит в дистанции видимости игрока |
playerAxisValueReached | Проверяет достижение игроком заданного угла наклона по одной из осей |
destructibleInArea | Проверяет количество уничтоженных объектов, находящихся в пределах зоны |
unitsInLineOfSight | Проверяет нахождение юнитов на линии взгляда относительно друг друга |
missionWhenInBatleArea | Проверяет нахождение юнита в боевой зоне |
Список всех команд
addAirfield | Создание летного поля |
airfieldSetIndication | Включение индикации летного поля |
awardAchievement | Награждение игрока достижением |
missionAttempts | Выставление количества попыток на миссию |
missionBattleArea | Ограничение боевой зоны |
missionCompleted | Успешное завершение миссии |
missionDebriefing | Выход в дебрифинг меню, работает только после окончания миссии |
missionHint | Показ подсказки к миссии |
missionEnableMapAutoScale | Включение автоматического изменения масштаба карты миссии |
missionFailed | Провал миссии |
missionKillEffect | Отключение показа эффектов в зоне |
missionForceMusic | Принудительное изменение проигрываемой в миссии музыки |
missionDisableRadiochat | Запрещение радиопереговоров |
missionPlayDialogue | Проиграть диалог |
missionSetFade | Запустить затемнение экрана |
missionSetFailText | Показать текст проигрыша |
missionSetProperties | Выставление дополнительных свойств миссии |
missionSetTimeIndicator | Отображение счетчика оставшегося времени |
missionSetTargetsIndicator | Отображение счетчика цели |
missionStartCutscene | Запустить скриптовую сцену. С помощью этой команды можно делать более сложные скриптовые сцены, чем с помощью команды «missionShowSmartCutscene», но последнюю гораздо проще настраивать, поэтому мы рекомендуем вам пользоваться именно ей. |
missionStartGuiScene | Запустить скриптовую сцену с интерфейсом |
missionStopCutscene | Остановить выполнение скрпитовой сцены |
missionStopSpeech | Останавливает диалог |
moAddMissionObjective | Выдача игроку нового задания |
moSetObjectiveStatus | Выставление активному заданию игрока нового статуса |
playerControls | Управление доступными для игрока органами управления самолетом |
playerOptions | Выставление определенного вида для игрока |
playHint | Проигрывание подсказки |
playSound | Проиграть звук |
spawnOnAirfield | Поставить самолеты на аэродроме |
triggerActivate | Запустить триггер, даже если он в состоянии «disable» |
triggerDisable | Выключить исполнение триггера |
triggerEnable | Выключить исполнение триггера |
unitDamage | Нанести урон юниту. Если включена галочка doExplosion — юнит умрет не зависимо от количества выставленного урона. |
unitDropAmmo | Заставляет самолеты сбросить бомбы/торпеды |
unitLandOnAirfield | Дать команду юниту на приземление |
unitRespawn | Воскресить юнит |
unitPlayEffect | Проиграть эффект |
unitPutToSleep | Усыпить юнита. Подробное описание команды находится в разделе управления самолетами данного документа. |
unitWakeUp | Разбудить юнита. Подробное описание команды находится в разделе управления самолетами данного документа. |
unitSetControls | Выставить юниту управление |
unitSetIndication | Включение индикации над юнитом |
unitSetStealth | Делает невидимыми индикаторы юнитов в игре, на карте и радаре |
unitFollowWaypoints | Приказ юниту двигаться по точкам пути |
unitAttackTarget | Приказ юниту атаковать цель |
unitMoveTo | Приказ юниту двигаться к цели |
unitMark | Назначить юниту группу/порядковый номер, что нибудь вроде этого, это чисто внутрискриптовая вещь, в игре такой юнит ничем не отличается от остальных |
unitSetProperties | Выставить юниту параметры. Подробнее о команде написано в разделе «Редактирование параметров объектов» |
varModify | Изменить значение переменной |
varSetBool | Выставить логической переменной заданное значение |
varSetInt | Выставить целочисленной переменной заданное значение |
varSetReal | Выставить переменной с плавающей запятой заданное значение |
varSetString | Выставить строковой переменной заданное значение |
varSetRandomInt | Выставить целочисленной переменной случайное значение |
wait | Дать триггеру команду на ожидание перед выполнением следующей команды |
loop | Дать миссии повторить следующие несколько команд несколько раз |
playerSetAmmo | Назначить боеприпасы игроку |
tacticalMapControl | Задает масштаб для тактической карты |
showSmartCutscene | Показ ролика на движке игры |
showCutsceneInfo | Показ текста во время проигрывания ролика на движке игры |
Усложнение существующих миссий
Теперь, когда вы получили полную информацию по возможностям редактора, попробуйте усложнить те пять миссий, которые вы уже сделали. Подумайте чего в них не хватает для того, чтобы они стали более интересными, и попробуйте это реализовать.
Вы можете посмотреть миссии «simple01_bulge», «simple02_berlin», «simple03_britain», «simple04_sicily» и «simple05_stalingrad», для того, чтобы увидеть варианты усложнения обучающих миссий.