В общем то уже достаточно популярный даже за пределами нашего проекта скрипт. Версия уже финальная или типа того, так что пришло время для него офомить отдельный гайд
Гайд как всегда "для совсем тупеньких", так что просьба не пинать за то что излишне разжевываю куда тыкать и что делать.
Пуск крылатых ракет (оф и кассетных) из ванильной ПУ VLS через целеуказание кликом по карте
Кидаем в папку с миссией В init.sqf добавляем строку вызова:
Код
[] execVM "vls.sqf";
Далее создаем в самой миссии пусковую установку (НАТО-Турели-Mk41 VLS) и присваиваем ей имя (пкм-атрибуты-имя переменной). По умолчанию в скрипте указано имя VLS1 (как изменить-позже).
в сборке рбц с недавней обновой техника создается по умолчанию без аи-экипажа внутри. в случае беспилотников типа этой пусковой установки нужно при создание удерживать ALT. тогда будут созданы боты внутри
Если вам необходимо чтобы пусковая установка была отличной от синей стороны в ее инит (атрибуты-инициализация) добавьте строки вида
для использующих платформу WMT можно так же добавить строчку this setVariable ["WMT_Side", sideLogic]; где sideLogic можно заменить на нужную вам сторону. строчка выше скрывает ПУ из списка техник всех сторон
затем вам надо тем ботам игроков, кто получит способность использовать ракеты, присвоить имя переменной аналогично тому как вы делали с установкой
После открываем скачанный скрипт в папке с миссией и редактируем его:
4я строчка-сюда вместо VLS1 вписываем имя переменной своего лаунчера
Код
if (isNil "VLS_LAUNCHER") then { VLS_LAUNCHER = VLS1; };
5я строчка-сюда через запятую в квадратных скобках вписываем тех кто будет это все использовать
Код
if (isNil "VLS_USERS") then { VLS_USERS = [b_ks]; };
в этом случае 1 юнит с именем переменной b_ks, если их несколько то например было бы так [b_ks. b_spn_1, b_someGuy] важно-заряды на лаунчер общие для всех
Если вы перекинули лаунчер за красных/зеленых вписываем нужную сторону в 11 строку
Код
#define LAUNCHER_SIDE opfor
В общем то все, можно стрелять. Но не получится. По дефолту в лаунчере что то типа 20ти зарядов только оф ракет. Поэтому у скрипта свой счетчик пусков который позволяет на вашей миссии выдавать ракеты когда и сколько надо
В любой момент для тестов в консоли отладки (та что по меню esc) вы можете написать нечто вида
Код
VLS_MISSILE_CNT=3;
и получить в этом случае 3 пуска ракет.
Но на мисси вам придется это дело выдавать либо: 1) тригерами. Создаем в редакторе любой тригер, идем в атрибуты, ставим галочку "только сервер", "интервал" 10. убеждаемся что галка "повторяемый" снята, тип "нет", активация "нет". В поле "Условие" пишем нечто вида
Код
if(!isNil("WMT_pub_frzState")) then { (WMT_pub_frzState>=3) } else {false}
(это если что для WMT платформы. означает что условие выполнится когда закончится фризтайм)
(обратите внимание-командой publicVariable мы отправляем значение с сервера, где выполняется тригер, всем клиентам)
и наконец выставляем таймер (в секундах). Тип таймера-"обратный отсчет", время и его рандом по своему вкусу.
2) скриптом скрипт это для тех кто выдает ракеты многократно на протяжение миссии.
Недавно столкнулся с тем, что один картодел сделал что ли 16 тригеров для последовательных событий. Опустим тот момент что в кучи тригеров он естественно умудрился налажать. Более интересно зачем проверять 16 условий каждый тик, если можно проверять одно, а когда оно выполнится начинать проверять следующее... Собственно арму считают лагучей именно благодаря такой "писанине"
пример опять же для вмт-платформы (селить в отдельный скрипт, вызывать так же как и этот):
waitUntil {uisleep 1;((WMT_Global_LeftTime select 0)<=6000)};//5 минут после фриза для миссии в 105 минут VLS_MISSILE_CNT=1; publicVariable "VLS_MISSILE_CNT";
waitUntil {uisleep 1;((WMT_Global_LeftTime select 0)<=5400)};//15 минут после фриза для миссии в 105 минут VLS_MISSILE_CNT=VLS_MISSILE_CNT+1; publicVariable "VLS_MISSILE_CNT";
Скрипт из примера выше состоит из блоков начинающихся с waitUntil . В каждом используется оставшееся время на миссию (в секундах). Обратите внимание что во втором блоке используется выражение
Код
VLS_MISSILE_CNT=VLS_MISSILE_CNT+1;
Его следует использовать и в тригерах из первого примера, если вы до срабатывания этого тригера выдаете пуски ракет.
Оставшиеся настройки скрипта: 8я и 9я строки
Код
if (isNil "VLS_EXCLUSION_ZONES") then { VLS_EXCLUSION_ZONES = []; }; if (isNil "VLS_ALLOW_FIRE_ZONES") then { VLS_ALLOW_FIRE_ZONES = []; };
списки зон запрета и разрешения стрельбы соответственно. Зоны задаются маркерами. Создайте маркер, задайте ему "имя переменной" и вписываем в нужный массив (не забываем кавычки-имя маркера в арме это строка. например ["marker_no_vls_fire_1"]. Если список VLS_ALLOW_FIRE_ZONES пуст-выбрать целью можно всю карту, кроме зон из списка VLS_EXCLUSION_ZONES
12я строка -меняем false на true если вместо ОФ ракет нужно использовать кассетные.
Код
#define USE_CASSETS true
13я и 14е строки. Отображать сообщения о пуски ракет и стороны которые их видят
Код
#define SHOW_NOTIFICATION true if (isNil "VLS_NOTIFICATION_SIDES") then { VLS_NOTIFICATION_SIDES = [opfor]; };
Далее идут текст в меню, сообщения и тп. Думаю там все понятно-меняем на свой вкус
Версия для двух сторон пока недоступна. Как допилю для любой своей миски-выложу
Бонусный второй скрипт, где все переменные получили префикс 2. На случай если вы хотите использовать несколько лаунчеров на миссии знаю, быдлячий способ, но мне было лень переписывать весь скрипт для того чтобы дать ракеты двум сторонам
Сообщение отредактировал BendeR - Вторник, 29.08.2023, 16:02
v2.0 -новый интерфейс -отображение оставшихся пусков/их типов (если используются кассеты)/времени перезарядки -отображение времени и дистанции полета -ру версия скрипта доступна отдельно