BendeR 79 Жалоба Опубликовано 31 августа, 2023 (изменено) Спойлер В ванильной арме с каким то древним обновлением добавили установку для пуска крылатых ракет VLS. И все бы хорошо, но для стрельбы этим счастьем нужно заморачиваться с даталинком-а это значит нужен васян который светит цель, васян который управляет ракетницей и тд. К тому же 18 пусков HE и столько же кассетных хватит чтоб снести почти любой город на картах в арме-явный перебор. Поэтому уже достаточно давно мной на проекте Red Bear был запилен скрипт позволяющий определенным игрокам управлять установкой просто тыкая по карте, а картоделам точно выдавать пуски через тригеры/скрипты Как это выглядит: Последняя версия (ру версия в отдельном файле) Простой гайд как потестить: Спойлер присваиваем боту имя переменной b_ks создаем пусковую установку и присваиваем ей имя VLS1 закидываем скрипт в папку с миссией в init.sqf миссии добавляем вызов: [] execVM "vls.sqf" запускаем миссию, у бота b_ks должен появиться пункт в скролл-меню в консоли вбиваем VLS_MISSILE_CNT=5 Как запилить в свою миссию 1. Создаем пусковую установку VLS (Синие-НАТО-Турели-Mk41 VLS) и присваиваем ей имя (пкм-атрибуты-имя переменной). По умолчанию в скрипте указано имя VLS1 (как изменить-позже). Спойлер Не знаю как у вас, но у нас в сборке (рбц) в редакторе техника по дефолту ставится без ботов-экипажа. Чтобы заспавнить с ботами нужно удерживать ALT. Так вот-надо заспавнить ПУ с ботом внутри) Саму установку можно смело разместить за карто/на кораблике (как задумано бисами)/где угодно. Сам пуск достаточно зрелищен и им можно развлекать скучающих в зоне игроков) Доп настройки ПУ: Спойлер -отключить дэмэдж (хотя особо упоротые могут попытаться ее перевернуть-тут спасет атач как какому нить объекту) -скрыть в списке техники wmt вписав в инит установки this setVariable ["WMT_Side", sideLogic]; -перенести за красную сторону (потребуется еще поправить 1 строчку в скрипте): в инит ПУ вписать _grpName = createGroup east; (crew this) joinSilent _grpName; 2. Присвоить ботам игроков, которые будут использовать ПУ, имя переменной3. Закинуть в папку с миссией скрипт, вписать его вызов в init.sqf [] execVM "vls.sqf"; 4. В скрипте отредактировать строчки if (isNil "VLS_LAUNCHER") then { VLS_LAUNCHER = VLS1; }; if (isNil "VLS_USERS") then { VLS_USERS = [b_ks]; }; вписав свое имя лаунчера и юзеров (юзеров через запятую если их несколько) Спойлер Если вы перекинули лаунчер за другую сторону в 11 строчке поменяйте ее значение: #define LAUNCHER_SIDE opfor Выдача ракет на миссии Спойлер Ракеты бывают 2х типов: HE и кассетные (cluster). Первые выносят все живое во что попадут (в радиусе 40м) и в радиусе 100м могут нехило продамажить пехоту и легкую технику. Вторые имеют меньший радиус урона (в районе 30-35м), но спавнят суббоеприпасы (имеющие 7% шанс не сработать и остаться в виде своеобразной пп-мины). Сами бомблеты по взрыву и урону напоминают сильно дамажащую гпшку (легкую технику в основном повреждает, каким то бмп мб повредит траки-пушку если очень повезет. даже пехота имеет шанс пережить из за разброса) По опыту нашей сборки скажу что оба типа прекрасно работают с техникой из говномодов типа RHS и прочих BAF (хотя 2.5 года на играх удалось подбить всего один танк-слоупок, и то недавно) Можно поменять тип боеприпасов на кассетные отредактировав 12ю строчку (да, переключать пока нельзя): #define USE_CASSETS false Что бы протестить стрельбу запустите миссию и в консоли вбейте VLS_MISSILE_CNT=5 1. Ракеты можно выдавать тригером Создаем в редакторе любой тригер, идем в атрибуты, ставим галочку "только сервер", "интервал" 10. убеждаемся что галка "повторяемый" снята, тип "нет", активация "нет". В поле "Условие" пишем нечто вида if(!isNil("WMT_pub_frzState")) then { (WMT_pub_frzState>=3) } else {false} (это если что для WMT платформы. означает что условие выполнится когда закончится фризтайм) в поле "При активации" пишем наш код VLS_MISSILE_CNT=3; publicVariable "VLS_MISSILE_CNT"; (обратите внимание-командой publicVariable мы отправляем значение с сервера, где выполняется тригер, всем клиентам) и наконец выставляем таймер (в секундах). Тип таймера-"обратный отсчет", время и его рандом по своему вкусу. По вкусу можно делать это несколько раз в разных тригерах, слегка модифицировав код: VLS_MISSILE_CNT=VLS_MISSILE_CNT+1; publicVariable "VLS_MISSILE_CNT"; 2. Выдача скриптом Спойлер Мне как то попалась миссия где автор делал последовательность событий с помощу кучи тригеров (то что я предложил выше). Только там у него этих событий было 10+. Мало того что он умудрился ошибиться при копипасте и редактирование, так еще вся эта конструкция создавала излишнюю нагрузку, проверяя условия в каждом отдельном тригере. Для этого и существуют скрипты подобные тому что я приведу ниже. Красиво, удобно править (все перед глазами), никаких нагрузок на клиенты (в данном случае на сервер) if(!isServer) exitWith {}; waitUntil {uisleep 0.1;(!isNil("WMT_pub_frzState"))}; waitUntil {uisleep 0.1;(WMT_pub_frzState>=3)}; waitUntil {uisleep 0.1;(!isNil("WMT_Global_LeftTime"))}; 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"; все это селится в отдельный скрипт и вызавается в init.sqf по аналогии с самим скриптом на ракеты Спойлер Опять же используется WMT. первый блок скрипта это все то же выполнение в конце фриза (с прочими проверками инициализации переменных платформы и тп). Далее идут однотипные проверки с привязкой к WMT_Global_LeftTime (оставшееся время на миссию в секундах. может быть подкручено админом или вами при тестах). Дополнительные настройки скрипта Зоны запрета стрельбы 8я и 9я строки: if (isNil "VLS_EXCLUSION_ZONES") then { VLS_EXCLUSION_ZONES = []; }; if (isNil "VLS_ALLOW_FIRE_ZONES") then { VLS_ALLOW_FIRE_ZONES = []; }; EXCLUSION_ZONES-зоны запрета стрельбы, ALLOW_FIRE_ZONES-зоны куда можно стрелять. Если ALLOW пустой-стрелять можно по всей карте, кроме EXCLUSION Спойлер Создаем маркера, присваиваем ему имя переменной и вписываем в нужный массив (в кавычках тк сраный маркер) через запятую. Пример: if (isNil "VLS_EXCLUSION_ZONES") then { VLS_EXCLUSION_ZONES = ["zone1","zone2"]; }; отмечу что это переменные и их можно модифицировать по ходу миссии (не забывая разослать на все клиенты) сообщение выдаваемое игроку при попытки запустить куда не надо живетв 18й строчке: #define VLS_CANNOT_LAUNCH_TXT "Недопустимая зона для цели" To be continued чуть позже (кому не терпится-все есть на соседнем проекте) Изменено 2 сентября, 2023 пользователем BendeR 18 1 Sharif, Otto, grfn и 16 других отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты