Миссия будет заключаться во взлёте с аэродрома, сопровождении группы бомбардировщиков к месту бомбардировки и последующим сопровождением их до точки эвакуации.
Создание миссии
Для того, чтобы начать работу над новой миссией, необходимо сначала открыть проект локации, на которой будет происходить миссия. После того, как проект локации будет открыт в основном окне редактора отобразится ландшафт со строениями и деревьями на нем.
Важный момент: если до открытия проекта локации вы уже работали в редакторе миссии, то у вас уже загружена эта миссия, и если вы начнете совершать какие-либо манипуляции с редактором миссий, то рискуете испортить ранее открытую миссию. Чтобы избежать этого перед началом работы всегда создавайте новую миссию или открывайте необходимую вам миссию принудительно.
Для того, чтобы начать работать над миссией, вам необходимо перейти в закладку Mission Editor основной панели управления редактора в верхней части экрана. Если эта панель уже выбрана и пуста, просто выберите другую панель и затем выберите панель редактирования миссий снова.
Теперь, когда панель выбрана давайте начнем создавать новую миссию. Для этого необходимо нажать седьмую с правого края кнопку. В результате этого действия вас могут спросить сохранять ли результат предыдущей работы, или стоит создать новую миссию без сохранения изменений.
Теперь необходимо открыть окно свойств миссии: первая кнопка с левого края экрана. Эта же кнопка открывает окно работы над триггерами и объектами миссии.
Теперь давайте распахнем список, озаглавленный как Mission Settings, в нем найдем еще один список: «mission» и раскроем его. Здесь вам необходимо:
- ввести имя миссии на английском языке (в поле name)
- выбрать карту которая будет грузиться игрой при выборе миссии (например Берлин)
- выбрать тип миссии (в Вашем случает это singleMission)
- в списке restoreType выставить attempts, если хотите, чтобы игрок имел несколько попыток пройти миссию (после гибели самолета игрока он восстанавливается в некоторой точке неподалеку от места гибели), или tacticalControl, что позволит игроку, в случае гибели самолета, занять самолет одного из своих напарников, если они, конечно, еще живы.
- выбрать то, к какой кампании будет относиться миссия (eastern)
- выбрать время суток из списка environment
- выбрать погодные условия из списка weather
Теперь свернем список «mission» и чуть выше него увидим список «stars», в котором необходимо настроить год события миссии, день, месяц и время, а при желании выставить широту и долготу того места, где предполагается действие миссии. После произведенных настроек можно свернуть весь список «Mission Settings».
Выставление самолета игрока
Теперь давайте найдем аэродром. Для этого перейдем в закладку Landscape и нажмем горячую клавишу H. В появившемся окне наберем: «airfield», выберем подходящий ресурс и нажмем кнопку «Ok». Как только окно поиска ресурса закрылось тут же жмем кнопку «Z» на клавиатуре для того, чтобы отцентрировать камеру на выбранном ресурсе. Опять переходим в закладку редактирования миссий и жмем на кнопку «Create Unit», предварительно убедившись, что справа от нее в выпадающем списке выбрана «armada». Теперь давайте поместим юнита на взлетную полосу. На экране появился зеленый самолетик с именем «armada_01». Выделяем его курсором мыши и нажимаем клавишу P, открывающую окно свойств выделенного объекта. В первой же строчке этого окна заменяем «armada_01» на «player». Ниже, в этом же окне выбираем класс самолета (bf-109k4) и его вооружение (Bf_109k4_default). Еще ниже выставляем значение армии 1, а count в 2. Таким образом игрок начнет игру на самолете Bf-109k4 и его будет сопровождать напарник на таком же самолете.
После этого нам необходимо еще раз открыть окно редактирования миссий «Shift+P», и в разделе «Mission Settings», в подразделе «player_teamA» кликнуть по кнопке рядом с надписью «wing», в открывшемся окне выбрать самолет игрока. Теперь необходимо закрыть весь раздел «Mission Setting» и открыть раздел «Triggers / Mission Obj. Navigation», где нажать кнопку «Trigger» для создания нового триггера. Выделив создавшийся триггер, в окне свойств триггера изменяем ему имя на «start_mission» и нажимаем кнопку «Event» для создания события «initMission».
Теперь можно сохранить миссию и запустить ее для проверки. Вы должны оказаться в воздухе неподалеку от Берлина прямо над выбранным аэродромом. Когда вы налетаетесь, можно вернуться к созданию миссии.
Создание аэродрома
Теперь давайте создадим аэродром, с которого, в дальнейшем наш самолет будет взлетать. Для этого, с помощью утилиты «Create Box Zone» создадим прямоугольник, примерно соответствующий площади аэродрома, находящегося на карте локации. Созданный прямоугольник повернут под углом по отношению к физическому расположению аэродрома, и его необходимо развернуть. Для этого необходимо выделить прямоугольник мышью и нажать «E», чтобы включить режим разворота объектов. Разверните прямоугольник и разместите его так, чтобы он покрывал собой модель аэродрома. Чтобы перемещать объект, выделите его и нажмите «W», чтобы изменить его размеры нажмите «R».
Еще раз выделите полученный прямоугольник, и в окне его свойств измените его имя на «airfield».
Теперь давайте создадим две зоны в виде шаров, с помощью «Create Sphere Zone» и одну из них разместим в начале полосы аэродрома, а другую в конце. Соответственно изменим и их имена на: «airfield_begin» и «airfield_end». Создадим еще две сферическией зоны с названием «player_spawn01» и «player_spawn02», и разместим их между «airfield_begin» и «airfield_end», поближе к «airfield_begin» друг за другом. Теперь перейдем к окну свойств миссий, а именно к той его части, где мы добавляли триггер начала миссии. Выделим созданный триггер, после чего добавим ему команду, нажатием на кнопку «Action». В появившемся окне выберем команду: «addAirfield». После того, как действие будет создано перейдем к редактированию его параметров:
- в «runwayStart» укажем зону «airfield_begin»
- в «runwayEnd» укажем зону «airfield_end»
- в «runwayWidth» укажем ширину взлетной полосы (по умолчанию 10)
- в «army» укажем «1»
- в «spawnPoint» добавим «player_spawn01» и «player_spawn02»
Аэродром создан, но теперь необходимо разместить на нем игрока. Для этого создадим еще одну команду, выбрав из списка «spawnOnAirfield» и настроим ее:
- в «runwayName» выберем «airfield_begin»
- в «object» выберем «player»
Сохраняем миссию, запускаем ее и, если вы все сделали правильно, то обнаружите что Ваш самолет стоит у начала взлетной полосы.
Создание самолетов сопровождения
Теперь создадим самолеты сопровождения: именно их мы будем сопровождать во время миссии и обеспечивать безопасность. Для этого с помощью кнопки «Create Untit», предварительно убедившись, что в поле справа от этой кнопки выбрано значение «armada» ставим самолет в нескольких сотнях метрах позади взлетного поля и назначаем ему имя «ally_bombers» и выбираем в качестве самолета «ju-88a-4», ставим ему вооружение по умолчанию, выставляем «count» в значение «6», «numInWing» в «3» и поле «army» равное «1».
Теперь, где-нибудь на конце карты по ходу движения самолета поставим точку, с помощью «Create Point Zone». Задаем ей новое имя: «bombing_point» и поднимаем ее на высоту примерно 500 метров. Именно в эту точку нам будет необходимо сопроводить самолет. Возле аэродрома создадим еще одну точку, назвав ее «halfway_point».
Теперь заставим самолет сопровождения лететь в «halfway_point». Для этого в триггере «start_mission» создаем команду, выбрав из списка: «unitMoveTo», и настроив ее:
- в «object» указываем «ally_bombers»
- в «target» указываем «halfway_point»
- в «speed» устанавливаем значение равное 250
- ставим галочку «shouldKeepFormation» - чтобы самолеты летели строем
Сохраняем миссию и запускаем ее. Через некоторое время над аэродромом пролетают самолеты сопровождения и улетают в сторону промежуточной точки, где начинают кружиться, дожидаясь игрока.
Назначение маркера слежения на самолет сопровождения
Итак, самолеты сопровождения летят к своей цели, но заметить их чрезвычайно сложно. Надо каким-то образом дать игроку возможность отслеживать их перемещения. Для этого, в уже существующем триггере «mission_start» создадим еще одну команды, выбрав из списка: «unitSetIndication», указав, в качестве «target» «ally_bombers».
Добавление иконки с числом самолетов сопровождения
В левый нижний угол можно добавить иконку с указанием количества самолетов сопровождения, чтобы игроку было легче ориентироваться в том, насколько успешно он выполняет свое задание.
Для этого в триггер «mission_start» добавим команду «missionSetTargetIndication», настроив ее:
- в «traget» укажем «ally_bombers»
- в «icon» укажем «air»
- в «icon_army» укажем «1».
Сохранившись, и запустив миссию, мы увидим индикатор самолета сопровождения в левой нижней части экрана, а так же увидим, что его иконка мигает на мини-карте и карте локации и его теперь легко можно обнаружить. Но, индикатор внизу экрана, добавленный таким образом обновится только 1 раз — в момент своей установки. Если нам нужно чтобы он обновлялся постоянно, и в случае гибели самолета отобразил это событие, то нам надо немного переделать эту часть.
Для этого переходим в триггер «mission_start», выделяем команду «missionSetTargetIndication» и нажимаем кнопку «Copy», располагающуюся ниже. После этого нажимаем кнопку «Delete», чтобы удалить его. Создаем новый триггер с названием «update_indicator», в поле «Actions» вставляем скопированную команду, нажатием на кнопку «Paste», выделяем ее и ставим галочку «enableAfterComplete». Это позволит скрипту запускаться с периодичностью, указанной в его поле «Events» даже после того, как все команды триггера будут выполнены снова и снова до тех пор, пока мы сами не остановим его выполнение.
Теперь, в случае гибели самолета сопровождения, его индикатор изменится.
Добавление первого задания
Теперь, когда мы заскриптовали первую часть миссии, было бы неплохо дать игроку некоторую подсказку о том, что ему необходимо сделать. Для этого выдадим ему задание. Для этого откроем окно свойств миссии и прокрутим его до того места, где мы добавляли триггера. Но теперь нам необходимо добавить новый «Mission Objective». Нажимаем на одноименную кнопку и, в появившемся окне выбираем «abstractMissionObjective». Сразу после этого меняем ему имя на «needToTakeOffAndReachVIP». Затем на диске, куда вы сохраняли файл миссии прямо рядом с ней необходимо создать файл с тем-же именем, что и файл миссии и расширением «.csv». В приведенном примере название фалы будет: «sample02_berlin.csv». Откройте этот файл средствами любого текстового редактора и сохраните его в формате «UTF-8». Теперь, давайте добавим в него первое задание. Оно будет иметь следующий вид: «"needToTakeOffAndReachVIP";"Take off and follow JU-52";"Взлетите и последуйте за JU-52"»
Сохранитесь, запустите миссию и проверьте, что при старте миссии в журнал добавляется это задание.
Проверка на достижение самолетов сопровождения
Теперь давайте сделаем проверку на достижение игроком самолетов сопровождения, чтобы пометить задание выполненным. Для этого опять откроем окно с триггерами и добавим новый триггер: «is_player_reach_bombers». Этому триггеру необходимо добавить условие проверки: «unitDistanceBetween» с настройками:
- в «object» добавить «player»
- в «target» добавить «ally_bombers»
- в «value» указать дистанцию 500
- в «math» указать «2D»
Для того, чтобы пометить первое задание выполненным, добавим команду «moSetObjectiveStatus» с настройками:
- в «target» выберем «needToTakeOffAndReachVip»
- в «status» укажем «2», что будет означать, что условие выполнилось
Сохранитесь и запустите миссию, чтобы убедиться, что все работает.
Выдача задания сопровождения до точки бомбардировки
Теперь перейдем в файл, где у нас сохранены строки задания и добавим туда следующую строку: «"flyToFirstWaypoint";"Follow JU-52 on its way protecting him.";"Последуйте за JU-52, защищая его от атак вражеских истребителей"». Сохраните файл и создайте новый «Mission Objective» с названием «flyToFirstWaypoint». На этот раз выключите галочку «enabled», расположенную под названием «Mission Objective», для того, чтобы задание не давалось при старте миссии.
Вернемся к триггеру «is_player_reach_bombers» и добавим несколько команд. Первая из них это: «wait», со значением «time», равном «3». Это позволит выдержать паузу в 3 секунды после появления сообщения о завершении предыдущего задания и сообщением о выдаче нового. Второй будет «moAddMissionObjective», где в качестве «target» необходимо указать «flyToFirstWaypoint». Эта команда выдает игроку новое задание. Как вы помните, мы уже выдавали задание при старте миссии, но при этом не вызывали этой команды. Не делали мы этого потому, что первый «Mission Objective» у нас был со включенной галочкой «enabled», что автоматически выдало его игроку при старте миссии.
Теперь необходимо дать новую полетную цель самолетам сопровождения. Для этого в этот же триггер добавляем «action»: «unitMoveTo» с параметрами:
- в «object» указываем «ally_bombers»
- в «target» указываем «bombing_point»
Проверка на смерть самолетов сопровождения
Сразу же можно поставить условие проигрыша миссии, которое заключается в смерти самолета сопровождения. Для этого создадим новый триггер, с названием «check_for_vip_dead_on», снимем галочку с «Enabled», так как будем вызывать этот триггер сами, и добавим ему условие, выбрав из списка: «unitWhenStatus», и настроив его:
- в «object» выбираем «ally_bombers»
- в «object_type» выбираем «isKilled», чтобы оно сработало в случае смерти самолета сопровождения
- в «check_objects» выбираем «all», для того чтобы условие сработало в случае смерти всех самолетов сопровождения, а не одного из них
В этот же триггер добавляем новую команду: «moSetObjectiveStatus» со значениями:
- в «target» указать «flyToFirstWaypoint»
- в «status» выставить «3», что соответствует провалу задания
Добавляем команду «wait», со значением в 3 секунды, после чего добавляем команду «missionFailed». В триггер «is_player_reach_bombers» с помощью «action» «triggerEnable» добавим вызов «check_for_vip_dead_on».
Отслеживание полета до точки назначения
Создадим триггер, который будет отслеживать не достиг ли самолет сопровождения первой точки маршрута. Назовем его «is_vip_reach_first_point» и снимем галочку «enabled». Добавим в него новое условие проверки «unitDistanceBetween» где в качестве объекта укажем самолет сопровождения, цели — точку, к которой летит самолет «bombing_point» и дистанцию выставим в 2000 метров.
Установка цели для бомбардировщиков
Рядом с точкой назначения проходит дорога. Приблизьте камеру к ней и, с помощью кнопки «Create Unit», убедившись, что в поле справа выбрано «wheeled_vehicles» поставьте на дорогу три автомашины. Первой выберите в поле «class» значение «ussr_gaz_66», второй и третьей: «ussr_zis5_med». С помощью той-же кнопки, убедившись, что в поле справа выбрано «squad» поставьте рядом с машинами иконку сквада, и добавьте в него все автомашины. Измените название название сквада на «ussr_vehicles».
Теперь выделим все грузовики, и поднимем их над поверхностью земли на 100 метров. После этого воспользуйтесь кнопкой «Drop Object», чтобы грузовики оказались ровно на поверхности уровня.
Выделим первый грузовик, и с помощью кнопки «Create waypoint» добавим несколько точек следования грузовика, стараясь располагать их на дороге. Повторите это для всех грузовиков. Чтобы грузовики не поехали по маршруту раньше необходимого, в самый первый триггер «start_mission» добавим новый «action» «unitSetProperties» со значениями:
- в «object» укажем «ussr_vehicles»
- в «speed» выставим «0»
Потом выделите каждый автомобиль и в разделе «waypoints» автомобиля выделите назначенную «waypoint». Прокрутите окно свойств автомобиля вниз и измените значение «speed» с «300» на «0».
Так же можете увеличить количество «count» каждого автомобиля до желаемого значения, чтобы создать видимость колоны.
Добавление точки эвакуации
С помощью кнопки «Create point zone» разместите точку, назвав ее «evacuate_point» неподалеку от точки бомбардировки, на высоте 500 метров. Это будет финальная точка нашего маршрута.
Атака целей в точке назначения
Нам необходимо сделать так, чтобы самолеты сопровождения, долетев до точки, атаковали колону. Сначала запустим колонну в движение, чтобы грузовики не стояли на месте. Для этого в триггер «is_vip_reach_first_point» добавим новый «action»: «unitSetProperties» со значениями:
- в «object» укажем «ussr_vehicles»
- в «speed» выставим «10»
Добавим новый «action» «unitMoveTo» с параметрами:
- в «object» укажем «ally_bombers»
- в «target» укажем «evacuate_point»
- включим галочку «shouldKeepFormation»
Сюда же добавляем новый «action»: «unitAttackTarget» с настройками:
- в «object» выбираем «ally_bombers»
- в «target» выбираем «ussr_vechicles»
- ставим галочку «fireRandom»
Самолеты сопровождения получат два приказа: следовать в новую точку и атаковать. Так как атака имеет приоритет, то самолеты будут атаковать цель до тех пор, пока не кончится боезапас, после чего последуют в точку эвакуации.
Проверка достижения бомбардировщиками точки эвакуации
Создадим новый триггер «is_vip_reach_last_point». Добавим вызов этого триггера из «is_vip_reach_first_point», с помощью уже существующего «triggerEnable», указав его в качестве второго параметра. Добавим новый «condition» «unitDistanceBetween» с настройками:
- в «object» добавить «ally_bombers»
- в «target» добавить «evacuate_point»
- в «value» указать дистанцию 1000
- в «math» указать «2D»
Добавим новый «action»: «moSetObjectiveStatus» с настройками:
- в «target» выберем «flyToFirstWaypoint»
- в «status» укажем «2», что будет означать, что условие выполнилось
Добавим «wait» на 3 секунды, и затем «missionCompleted».
Создание самолетов противника
Сопроводить самолет, это, конечно, весело, но если по пути вам встретится пара-тройка врагов — будет значительно веселее. Поэтому давайте добавим их.
Для этого, используя кнопку «Create unit», предварительно убедившись, что в поле справа от нее находится «armada» поставьте самолет между аэродромом и первой полетной точкой, примерно посередине. После этого выделите этот самолет и измените его имя на «enemiesLA». В качестве класса самолета выберите «la5fn», а оружие поставьте ему по умолчанию. Увеличьте количество самолетов до 8-ми и поставьте высоту полета в 3.000 метров. Нажав на кнопку «+numInWing» выставьте значение этого параметра в «2».
Усыпление самолетов противника
Однако самолеты противника нам не нужны до тех пор, пока игрок не достигнет самолетов сопровождения. А значит было бы неплохо выключить самолеты противника на время. Для этого перейдем в триггер «start_mission» и добавим туда «action» «unitPutToSleep», в качестве «target» указав «enemiesLA».
Объединение самолетов игрока и самолетов сопровождения
Теперь с помощью кнопки «Create Unit» создаем новый объект, предварительно убедившись, что в поле справа выбрано «squad». Ставим этот объект в районе аэродрома. Выделяем его и в качестве «squad_member» указываем игрока и самолеты сопровождения, а так же изменяем его имя на «player_squad». Это позволит нам логически объединить эти две сущности, для того, чтобы было более удобно работать в дальнейшем.
Пробуждение самолетов противника
Когда самолеты игрока и самолеты сопровождения воссоединились, нам необходимо разбудить самолеты противника, и заставить их атаковать бомбардировщики. Для этого откроем триггер «is_player_reach_bombers» и добавим туда «action» «unitWakeUp», указав в качестве «target» «enemiesLA».
Атака самолетов противника
Сразу же добавим новый «action» «unitAttackTarget» со значениями:
- в «object» выберем «enemiesLA»
- в «target» выберем «player_squad»
- жмем на кнопку «+ fireRandom» и ставим галочку.
- ставим галочку на «playerAttracted»
- жмем на кнопку «+ playerAttractedCount» и выставляем там 1
- жмем на кнопку «+ playerAttarctedEffrate» и выставляем там 0.8
Таким образом мы получаем противника, который атакует самолет игрока, его напарника или самолет сопровождения, при этом хотя бы 1 самолет всегда пытается атаковать игрока и его точность стрельбы по игроку становится равной 80%, в то время, как при стрельбе по остальным самолетам, точность противника будет равна 80%.
Выставление дополнительных параметров
Теперь можно выставить дополнительные параметры, которые являются динамическими, и влияют на самолеты под управлением АИ в зависимости от действий игрока.
В триггер «is_player_reach_bombers» добавим команду «unitSetProperties». Распахнем раздел «plane» и найдем параметр «targetDeviation» в качестве «trigger» этого параметра укажем «gunner» - стрелков, сидящих на бомбардировщиках, параметр «defaulVal» выставим в «3.5», а в поле «limits» выставим «0» и «3.5». Свернем раздел «plane» и в качестве «target» укажем самолеты сопровождения «ally_bombers».
В результате этих действий если игрок эффективно ведет бой и вражеские истребители начинают гореть один за другим, стрелки с бомбардировщиков так же начинают стрелять точнее и точность сведения их пулеметов стремится к нулю. Если же игрок долгое время не может подбить вражеский самолет, то стрелки бомбардировщиков начинают паниковать и пули из их пулеметов летят в радиусе 3.5 самолетов от самолетов противника. Они все еще могут попасть, но чаще мажут. Значение по умолчанию, указанное в «defaultVal» показывает базовую эффективность стрелков и выставлено таким образом, что если игрок будет вести бой не эффективно, то бомбардировщики не смогут защитить себя сами.
Добавим еще одну такую же команду, но в качестве «target» укажем «enemiesLA», а в разделе «plane», в поле «trigger» выберем «machine gun», а поле «limits» ограничим значениями «0» и «2.5». Это позволит задать схожий с бомбардировщиками параметр эффективности стрельбы, но для истребителей противника. Параметр «machine gun» указывает на то, что корректировке параметров будет подвергаться истребительное вооружение, а «limits» говорит о том, что в случае, если игрок играет плохо, то истребители противника не знают промаха, стреляя «в ноль», а если игрок играет хорошо, то противник начинает чаще мазать и пули летят вокруг самолетов-целей.
Читайте также: