Данное руководство находится в стадии написания...
Первые шаги:
После скачивания шаблона для создания миссий - Atrium, его нужно распаковать в папку с миссиями ArmA 3 для изменения в редакторе.
Папка находится в: Мои документы\Arma 3\missions. Соответственно папка с Atrium должна быть распакована именно туда.
desc_settings.png 770байт
35 Количество загрузок: Параметры миссии
Файл: mission_parameters.hpp
Параметр: prepareZoneSize
Описание: Определяет размер радиуса зоны подготовки в метрах
Описание: Техника каких сторон не сможет двигаться на время подготовки
* Устарело, теперь используется в виде модуля на карте
Параметр: blueforSide и opforSide
Описание: Определяют противоборствующие стороны в миссии.
На данный момент изменять их смысла нет, т.к. в ArmA 3 пока что доступны солдаты только двух сторон
Описание: Во сколько раз по количеству должны превосходить силы одной стороны над другой для завершения миссии по потерям
* Устарело, теперь используется в виде модуля на карте
Описание: Лимит допустимых потерь для каждой стороны в процентном соотношении
* Устарело, теперь используется в виде модуля на карте
Параметр: sundayGames
Описание: Параметр определяет тип миссии - для Воскресных Игр или нет. 0 - нет, 1 - да
Параметр: fireteamHUD
Описание: Разрешает использование T-Cube Motion Tracker (Fireteam HUD). 0 - нет, 1 - да
atrium_misspar.jpg 31.88К 37 Количество загрузок:
desc_brief.png 697байт 26 Количество загрузок: Создание брифинга/название миссии и ее описание
Вся информация по брифингу, название миссии, описание - находятся в этом файле
Нельзя использовать 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.
desc_units.png 1.38К 16 Количество загрузок: Создание юнитов/применение шаблона с оружием
Рассмотрим лишь то, что касается платформы.
Для каждого солдата, который будет использоваться как слот для будущих игроков - необходимо в его свойствах:
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
a3ru_unitProp.jpg 57.96К 36 Количество загрузок:
Внутри файла находятся вышеуказанные аббревиатуры, и классы снаряжения для каждой из них:
a3ru_equipment.png 225.22К 0 Количество загрузок:
При желании можно редактировать выдачу снаряжения каждому классу бойцов, либо создать свой шаблон со своими классами и снаряжением:
Например, назовем свой класс: 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 ];
desc_veh.png 1.17К 19 Количество загрузок: Создание техники и ящиков с боеприпасами (Обязательно для ВСЕЙ техники)
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.28К
24 Количество загрузок:
icon_modules.png 15.55К 2 Количество загрузок: Модули на замену функциям [06/11/2014]
Данный шаг поможет сэкономить время картоделам при создании своих миссий.
Например, если некоторым видам транспорта необходимо разрешить передвигаться во время подготовки (фриза), нужно разместить на карте соответствующий модуль и синхронизировать его с техникой, которой будет разрешено передвижение.
Или, если вы хотите завершить миссию по факту уничтожения какой-либо техники или солдат в зоне определенного маркера - разместите соответствующий модуль, в окне создания настройте его, указав имя маркера, минимально допустимое количество юнитов в зоне и синхронизируйте с теми объектами, к которым будут применены эти условия.
desc_fn.png 863байт 23 Количество загрузок: Функции и условия завершения миссии
Специально для этих целей существуют функции, которые позволяют облегчить создание условностей в миссии.
Функции делятся на клиентские и серверные, локальные и глобальные (либо то и другое одновременно).
Клиентские функции могут вызываться непосредственно у игрока, например добавление пункта завершения миссии в меню игрока если он является администратором - такая функция будет работать только у определенного игрока и будет локальной. Согласитесь - другим такой пункт в меню не нужен
Следовательно клиентские-локальные скрипты/функции затрагивают только определенного игрока.
Глобальные функции нужны для их выполнения сразу у всех игроков, например: завершение миссии. Будет странно если у одних она завершится, а другие продолжат играть.
Также есть серверные функции (чаще всего они глобальные) - необходимы например для отслеживания соблюдения условий в мисии.
Допустим у нас есть миссия, которую мы хотим ограничить на час.
Для этого мы запускаем соответствующую функцию на сервере, который будет отсчитывать время, и по истечению сообщит всем игрокам что время истекло и миссия будет завершена. Если бы эта функция была клиентской - то в этом случае все игроки выполняли бы одно и тоже действие - считали время, да и у каждого оно еще может считаться по-разному, следовательно результат был бы неточен. Поэтому для таких вычислений используется только сервер.
Для удобства использования функций были специально созданы два файла в папке Атриума:
a3ru_client_scripts.sqf - отвечает за выполнение клиентских скриптов и функций и будет выполнен сразу же после появления игрока на миссии
a3ru_server_scripts.sqf - отвечает за выполнение на сервере и будет выполнен только ПОСЛЕ окончания времени для подготовки - это сделано для того, чтобы функции отсчета времени, захвата зоны и т.п. начинали работать не во время подготовки, а только после начала миссии.
Например мы хотим чтобы наша миссия завершилась через 30 минут.
Для этого в файле a3ru_server_scripts.sqf вызываем соответствующую функцию:
atrium_funcs.jpg 19.56К 35 Количество загрузок:
Если мы хотим чтобы помимо таймера было условие, которое обязывало бы находиться в зоне не менее 3-х Иранских солдат, то в следующей строке после отсчета времени вызываем следующую функцию, которая будет следить за количеством иранских солдат в зоне:
["marker_port", 0, EAST, 3, "Less than 3 Iranian soldiers in zone!"] spawn fnc_a3ru_endMissionCountUnits;
P.S. Естественно для работы этой функции нам нужно соблюсти некоторые требуемые ею условия, которые указаны для каждой функции в разделе Список Функций.
Конкретно для этого случая нам нужно создать на карте маркер с именем marker_port, который будет определять центр зоны.
* Список функций и их аргументы в разделе Функции ниже
Если по какой-либо причине в мисии подразумевается использование триггеров, то настоятельно рекомендуется ознакомиться с небольшой статьей Killzone Kid, переведенной Avi.
desc_fnlist.png 817байт 17 Количество загрузок: Список функций
Функция: 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 ставить не нужно!
Сообщение отредактировал WAF3R: 07 November 2014 - 17:56
Модули на карте