Данное руководство находится в стадии написания...
Первые шаги:
После скачивания шаблона для создания миссий - Atrium, его нужно распаковать в папку с миссиями ArmA 3 для изменения в редакторе.
Папка находится в: Мои документы\Arma 3\missions. Соответственно папка с Atrium должна быть распакована именно туда.
desc_settings.png 770bytes
35 downloads Параметры миссии
Файл: mission_parameters.hpp
Параметр: prepareZoneSize
Описание: Определяет размер радиуса зоны подготовки в метрах
Описание: Техника каких сторон не сможет двигаться на время подготовки
* Устарело, теперь используется в виде модуля на карте
Параметр: blueforSide и opforSide
Описание: Определяют противоборствующие стороны в миссии.
На данный момент изменять их смысла нет, т.к. в ArmA 3 пока что доступны солдаты только двух сторон
Описание: Во сколько раз по количеству должны превосходить силы одной стороны над другой для завершения миссии по потерям
* Устарело, теперь используется в виде модуля на карте
Описание: Лимит допустимых потерь для каждой стороны в процентном соотношении
* Устарело, теперь используется в виде модуля на карте
Параметр: sundayGames
Описание: Параметр определяет тип миссии - для Воскресных Игр или нет. 0 - нет, 1 - да
Параметр: fireteamHUD
Описание: Разрешает использование T-Cube Motion Tracker (Fireteam HUD). 0 - нет, 1 - да


Вся информация по брифингу, название миссии, описание - находятся в этом файле
Нельзя использовать xml тэги в стандартном виде - нужно использовать ANSI-символы.
Переход на следующую строку осуществляется с помощью XML-тега <br/>, символы "<" и ">" также необходимо заменять на ANSI-аналоги (60 и 62 соответственно):
<br/>
Для тех, кому лень заниматься экранированием символов - Nkey дал ссылку на сайт, который сделает это за вас автоматически:
http://www.htmlescap...scape_tool.html
Пример: Это первая строка<br/>Это уже вторая строка
Естественно в поле брифинга для удобства чтения можно в дополнение переносить эти строки в самом текстовом редакторе, но наличие тэга обязательно, иначе строки все равно будут в одной линии.
Создание ссылок на маркера
В брифинге можно делать ссылки в тексте на маркера на карте.
Т.е. кликнув по определенному слову или фразе в тексте - фокусировка на карте сместится к позиции маркера.
Для создания такой ссылки нужно:
1. Создать в редакторе маркер с каким-нибудь названием, например: marker_agia
2. В тексте одного из полей брифинга вставить ссылку на этот маркер вида:
<marker name="marker_agia">текст при клике на который произойдет фокусировка</marker>
НЕ ЗАБЫВАЕМ ПЕРЕВОДИТЬ СПЕЦ. СИМВОЛЫ В ANSI-КОДИРОВКУ!
Т.е. в итоге должно получиться так:
<marker name="marker_agia">текст при клике на который произойдет фокусировка</marker>
* Я привел в примере оригинальный вид ссылки без перевода в ANSI-кодировку выше только для того, чтобы вы лучше понимали что к чему.
Поля в XML:
STR_A3RU_MissionAuthor - Имя автора миссии (только англ. яз.)
STR_A3RU_MissionName - Название миссии (только англ. яз.)
STR_A3RU_MissionDesc - Описание миссии (только англ. яз.)
STR_A3RU_MissionIntel - Общее описание миссии для всех сторон
STR_A3RU_BF_MissionTasks - Описание задач для западной стороны
STR_A3RU_BF_MissionEnemy - Информация о противнике для западной стороны
STR_A3RU_BF_MissionAdditional - Дополнительная информация для западной стороны
STR_A3RU_OF_MissionTasks - Описание задач для восточной стороны
STR_A3RU_OF_MissionEnemy - Информация о противнике для восточной стороны
STR_A3RU_OF_MissionAdditional - Дополнительная информация для восточной стороны
Остальные поля ниже изменять не нужно, они существуют для упрощения локализации в более поздних версиях ArmA 3.

Рассмотрим лишь то, что касается платформы.
Для каждого солдата, который будет использоваться как слот для будущих игроков - необходимо в его свойствах:
1. В параметре CONTROL установить значение PLAYABLE
Тем самым мы разрешим "вселяться" игрокам в данного солдата
2. В поле DESCRIPTION вводим название слота, например Team Leader
3. В поле INITIALIZATION прописываем строку инициализации, которая будет определять вооружение игрока.
Например:
[this, "OPFOR", "SL"] call compile preprocessFileLineNumbers "a3ru_scripts\a3ru_unitInit.sqf";
Где:
"OPFOR" - сторона игрока (может быть "OPFOR" или "BLUEFOR" - запад и восток соответственно)
"SL" - аббревиатура шаблона снаряжения из файла a3ru_equipment\equip_opfor.sqf

Внутри файла находятся вышеуказанные аббревиатуры, и классы снаряжения для каждой из них:

При желании можно редактировать выдачу снаряжения каждому классу бойцов, либо создать свой шаблон со своими классами и снаряжением:
Например, назовем свой класс: germans.
Для начала - можно скопировать содержимое файла equip_opfor.sqf в наш новый файл equip_germans.sqf.
После этого, по аналогии с уже готовой структурой файла - изменять/добавлять/удалять аббревиатуры, равно как и снаряжение.
Для того, чтобы одеть бойца в свое снаряжение - вам нужно прописать в его инициализации свою сторону (germans), вместо той, что стоит по умолчанию, например:
[this, "GERMANS", "SHTIRLITZ"] call compile preprocessFileLineNumbers "a3ru_scripts\a3ru_unitInit.sqf";
В этом случае, платформа будет искать снаряжение для бойца в файле "a3ru_equipment\equip_germans.sqf" с аббревиатурой SHTIRLITZ.
В одну переменную в файле можно указывать несколько классов снаряжения, это дает возможность игроку выбрать снаряжение при старте.
Для каждого элемента снаряжения существует своя переменная:
_e_prim - основное оружие
_e_prim_mag - магазины/гранаты
_e_mod1 - глушители
_e_mod2 - фонарики, лазеры...
_e_mod3 - оптика
_e_sec - для второстепенное оружие (Гранатометы)
_e_sec_mag - магазины для второстепенного оружия
_e_sec_mods - модули для второстепенного оружия (прицелы для РПГ и пр...)
_e_side - пистолеты
_e_side_mag - магазины для пистолетов
_e_items - различные предметы и приспособления (компас, карта, ПНВ, бинокль...)
_e_back - рюкзаки
Стоит обратить внимание, что патроны будут браться из такого же по счету элемента массива, что и выбранное оружие, т.е.:
Если у вас стоит на выбор два оружия, например:
_e_prim = ["arifle_SDAR_F", "arifle_Katiba_F"];
То для каждого из них необходимо указать свой массив патрон:
_e_prim_mag = [ [["20Rnd_556x45_UW_mag", 4], ["HandGrenade", 2]], // Массив патрон для SDAR [["30Rnd_65x39_caseless_green", 8], ["HandGrenade", 2]] // Массив патрон для Katiba ];

2. В свойствах объекта в поле INITIALIZATION прописываем строку:
[this, "OPFOR", "BA"] call compile preprocessFileLineNumbers "a3ru_equipment\init_vehicle.sqf";
Где:
"OPFOR" - сторона техники/ящика (может быть "OPFOR" или "BLUEFOR" - восток и запад соответственно)
"BA" - аббревиатура шаблона снаряжения для техники/ящика из файла a3ru_equipmentvehicles_opfor.sqf
* Файл может быть либо vehicles_opfor, либо vehicles_bluefor в зависимости от прописанной стороны в строке
atrium_vehprop.jpg 33.28KB
24 downloads

Данный шаг поможет сэкономить время картоделам при создании своих миссий.
Например, если некоторым видам транспорта необходимо разрешить передвигаться во время подготовки (фриза), нужно разместить на карте соответствующий модуль и синхронизировать его с техникой, которой будет разрешено передвижение.



Или, если вы хотите завершить миссию по факту уничтожения какой-либо техники или солдат в зоне определенного маркера - разместите соответствующий модуль, в окне создания настройте его, указав имя маркера, минимально допустимое количество юнитов в зоне и синхронизируйте с теми объектами, к которым будут применены эти условия.

Специально для этих целей существуют функции, которые позволяют облегчить создание условностей в миссии.
Функции делятся на клиентские и серверные, локальные и глобальные (либо то и другое одновременно).
Клиентские функции могут вызываться непосредственно у игрока, например добавление пункта завершения миссии в меню игрока если он является администратором - такая функция будет работать только у определенного игрока и будет локальной. Согласитесь - другим такой пункт в меню не нужен

Следовательно клиентские-локальные скрипты/функции затрагивают только определенного игрока.
Глобальные функции нужны для их выполнения сразу у всех игроков, например: завершение миссии. Будет странно если у одних она завершится, а другие продолжат играть.
Также есть серверные функции (чаще всего они глобальные) - необходимы например для отслеживания соблюдения условий в мисии.
Допустим у нас есть миссия, которую мы хотим ограничить на час.
Для этого мы запускаем соответствующую функцию на сервере, который будет отсчитывать время, и по истечению сообщит всем игрокам что время истекло и миссия будет завершена. Если бы эта функция была клиентской - то в этом случае все игроки выполняли бы одно и тоже действие - считали время, да и у каждого оно еще может считаться по-разному, следовательно результат был бы неточен. Поэтому для таких вычислений используется только сервер.
Для удобства использования функций были специально созданы два файла в папке Атриума:
a3ru_client_scripts.sqf - отвечает за выполнение клиентских скриптов и функций и будет выполнен сразу же после появления игрока на миссии
a3ru_server_scripts.sqf - отвечает за выполнение на сервере и будет выполнен только ПОСЛЕ окончания времени для подготовки - это сделано для того, чтобы функции отсчета времени, захвата зоны и т.п. начинали работать не во время подготовки, а только после начала миссии.
Например мы хотим чтобы наша миссия завершилась через 30 минут.
Для этого в файле a3ru_server_scripts.sqf вызываем соответствующую функцию:

Если мы хотим чтобы помимо таймера было условие, которое обязывало бы находиться в зоне не менее 3-х Иранских солдат, то в следующей строке после отсчета времени вызываем следующую функцию, которая будет следить за количеством иранских солдат в зоне:
["marker_port", 0, EAST, 3, "Less than 3 Iranian soldiers in zone!"] spawn fnc_a3ru_endMissionCountUnits;
P.S. Естественно для работы этой функции нам нужно соблюсти некоторые требуемые ею условия, которые указаны для каждой функции в разделе Список Функций.
Конкретно для этого случая нам нужно создать на карте маркер с именем marker_port, который будет определять центр зоны.
* Список функций и их аргументы в разделе Функции ниже
Если по какой-либо причине в мисии подразумевается использование триггеров, то настоятельно рекомендуется ознакомиться с небольшой статьей Killzone Kid, переведенной Avi.

Функция: fnc_a3ru_message
Где применима: Клиент/Сервер
Синтаксис: [Сообщение, Тип сообщения, Сторона]
Описание: Выводит сообщение игрокам какой-либо команды.
Типы могут быть:
0 - Выполненная задача
1 - Проваленная задача
2 - Назначенная задача
3 - Отмененная задача
Сторона может быть:
EAST или WEST. Если сторона не указана - сообщение получат все игроки
Примеры:
["Victory!", 0, EAST] call fnc_a3ru_message;
["VIP is dead!", 1] call fnc_a3ru_message;
Функция: fnc_a3ru_endMission
Где применима: Клиент/Сервер
Синтаксис: [сообщение, победившая сторона] или [сообщение]
Описание: Завершает миссию с выводом сообщения
Примеры:
["All Iranian Troops were killed", WEST] call fnc_a3ru_endMission;
["No one wins"] call fnc_a3ru_endMission;
Функция: fnc_a3ru_endMissionTimer
Где применима: Сервер
Синтаксис: [Сообщение, Время в секундах] или [Сообщение, Время в секундах, Победившая сторона]
Описание: Завершает миссию с выводом сообщения по окончанию таймера
Примеры: ["60 minutes left, NATO wins", 3600, WEST] spawn fnc_a3ru_endMissionTimer;
Функция: fnc_a3ru_endMissionCountUnits
Где применима: Сервер
Синтаксис: [Позиция или имя маркера, радиус зоны, сторона, мин. количество солдат, сообщение при завершении]
Описание:
Завершает миссию если количество солдат указанной стороны в зоне меньше необходимого количества.
Для работы функции нужно создать маркер на карте с именем, которое следует указать в параметрах при вызове функции, либо указать конкретные координаты (в примере маркер с именем mark_port).
Если вместо координат используется маркер - то в радиусе можно указать 0 и функция будет использовать размер маркера в качестве радиуса
Примеры:
["mark_port", 0, WEST, 3, "BLUEFOR failed to defend the port"] spawn fnc_a3ru_endMissionCountUnits;
[getPos myVehicle, 25, EAST, 5, "Vehicle defenders failed"] spawn fnc_a3ru_endMissionCountUnits;
Функция: fnc_a3ru_endMissionCapture
Где применима: Сервер
Синтаксис: [Позиция или имя маркера, радиус зоны, время для захвата, время для удержания, название зоны]
Описание: Завершает миссию если одна из сторон захватит и удержит зону в течении указанного количества времени.
Для работы функции нужно создать маркер на карте с именем, которое следует указать в параметрах при вызове функции, либо указать конкретные координаты (в примере маркер с именем mark_port).
Примеры: ["mark_port", 0, 60, 600, "Port Agia"] spawn fnc_a3ru_endMissionCapture;
Функция: fnc_a3ru_ui_add
Где применима: Клиент
Синтаксис: [Имя действия, аргументы для передачи в функцию, имя вызываемой функции, условия для отображения]
Описание: Добавляет действие в меню действий Atrium
Примеры:
["End mission", "[""Mission Completed""]", "fnc_a3ru_endMission", "player == leader group"] call fnc_a3ru_ui_add;
["End prepare", "[]", "fnc_a3ru_end_prepare", "isServer"] call fnc_a3ru_ui_add;
Функция: fnc_a3ru_endMissionDeadInZone
Где применима: Сервер
Синтаксис: [Позиция или Маркер или Имя объека, Размер зоны (0 для маркеров), Название зоны для отображения, Список юнитов, количество юнитов необходимых в зоне (0 - все должны быть в зоне)]
Описание: Завершает миссию если указанные объекты мертвы или покинули указанную зону
Примеры:
["mark_port", 0, "West Port", [vip1, vip2], 1] spawn fnc_a3ru_endMissionDeadInZone;
(зона в маркере с именем mark_port с радиусом в размер этого маркера, называется West Port, и хотя бы один из игроков vip1 и vip2 должны быть в зоне)
или
[[1520, 1321, 5], 150, "West Port", [vip1], 0] spawn fnc_a3ru_endMissionDeadInZone;
(зона в координатах [1520, 1321, 5] с радиусом 150 метров с названием West Port, vip1 должен быть в ней и выжить)
Функция: fnc_a3ru_endMissionZonesCapture
Где применима: Сервер
Синтаксис: [[["ИМЯ МАРКЕРА", "ИМЯ ЗОНЫ (ДЛЯ ОТОБРАЖЕНИЯ)", МИН. КОЛИЧЕСТВО В ЗОНЕ, КОЭФФ. ПРЕВОСХОДСТВА]], ТАЙМЕР, МЕНЯТЬ ЦВЕТ МАРКЕРА, КОМАНДА ОБОРОНЫ (ЕСЛИ ЕСТЬ)]
Описание: Завершает миссию если указанные в списке зоны были полностью захвачены одной из сторон, либо (в режиме обороны) захвачены ли зоны атакующей командой по истечению времени
Параметры:
1 - Зоны (МАССИВ)
2 - Завершение миссии по таймеру (проверка на захват всех зон атакующими по истечению времени, иначе атакующие проиграли).
Значение '0' - для завершения миссии сразу же после захвата всех зон одной из команд (ЧИСЛО)
3 - Менять цвет маркеров при захвате (BOOL)
4 - Оборона (Сторона в "СТРОКОВОМ" формате). Указывается в случае завершения миссии по таймеру.
Оборона может держать все зоны под контролем, также захватывает зону при равном количестве игроков с обеих сторон.
Параметры для зон:
1 - Имя маркера (СТРОКА)
2 - Имя зоны для отображения (СТРОКА)
3 - Минимальное количество атакующих (ЧИСЛО)
4 - Коэффициент превосходства атакующих (ЧИСЛО)
Примеры:
[[["marker1", "ZONE 1 NAME", 2, 1], ["marker2", "ZONE 2 NAME", 1, 2]], 0, true, "UNKNOWN"] spawn fnc_a3ru_endMissionZonesCapture;
Две зоны с маркерами marker1 и marker2, в первой зоне количество атакующих должно быть больше двух, во второй зоне количество атакующих должно превышать количество обороняющихся вдвое. Победа при полном контроле зон.
или
[[["marker1", "ZONE 1 NAME", 1, 1], ["marker2", "ZONE 2 NAME", 1, 1]], 3600, true, "WEST"] spawn fnc_a3ru_endMissionZonesCapture;
Две зоны с маркерами marker1 и marker2, победа команды атаки в случае, если по истечению 1 часа все зоны под ее контролем.
Экипировка:
бойцы:
"cse_morphine" - морфий
"cse_packing_bandage" - перевязочный пакет (большой)
["cse_bandage_basic",3] - бинт обычный
"cse_bandageElastic" - бинт эластичный
["cse_quikclot",3] - губка (маленький бинт)
медики / мед техника:
["cse_saline_iv",5]; - солевой раствор
["cse_bandageElastic",10]; - бинт эластичный
["cse_bandage_basic",10]; - бинт обычный
["cse_packing_bandage",6]; - перевязочный пакет (большой)
["cse_quikclot",20]; - губка (маленький бинт)
["cse_morphine",10]; - морфин
["cse_epinephrine",10]; - эпинифрин (адреналин)
["cse_atropine",10]; - атропин
["cse_personal_aid_kit",1]; - индивидуальная аптечка (только для медиков)
["cse_tourniquet",5]; - жгут
["cse_nasopharyngeal_tube",2] - интубационная трубка пока не работает, но добавляйте в экипировку на будущее
Внимание
всех солдат медиков необходимо синхронизировать с модулем CSE Medical - Set Medic Class, который нужно поставить на карту вручную. Никаких других модулей CSE ставить не нужно!
Edited by WAF3R, 07 November 2014 - 17:56.
Модули на карте