//Брифинг и прочие красивости if(isDedicated||(!hasInterface)) exitWith {}; waitUntil { player == player }; player createDiarySubject ["ts_brf", "ВЫБОР ВРЕМЕНИ"]; player createDiaryRecord ["ts_brf", ["Пояснения","Выбор работает только на брифинге.<br />Рекомендуется выбирать через 30с после прогрузки на брифинг и не позже чем за 10с до старта в игру.<br />Текущий выбор-самая верхняя строчка в разделе Выбранное время<br />Раздел Инструктаж-Мое отделение при работе скрипта не обновляется"]]; { _str_time=""; if((_x select 0)<10) then {_str_time="0";}; _str_time=_str_time+str (_x select 0)+":"; if((_x select 1)<10) then {_str_time=_str_time+"0";}; _str_time=_str_time+str (_x select 1); if(player in _who_can_select) then{ _str_time="<execute expression='time_select="+str(_forEachIndex)+";publicVariable ""time_select"";'>"+_str_time+"</execute>"; }; player createDiaryRecord ["ts_brf", ["Выбор времени",_str_time]]; } foreach time_set;
все как обычно: 1. поменять варианты выбора в первой строчке в формате [часы.минуты] (time_set) 2. присвоить "имя переменной" юнитам которые могут выбирать и вписать во вторую (_who_can_select) 3. вызвать это дело в init.sqf: [] execVM "time_select.sqf";
известны "глюки": 1) при работе скрипта в начале (обычно на хардфризтайме) можно увидить как несколько раз меняется время. это связано с работой платформы WMT, на функционал никак не влияет 2) не тестировано если в списке тех кто может делать выбор есть несколько юнитов (за ненадобностью). в теории-тот кто последний сделает выбор на брифинге тот и прав
Сообщение отредактировал BendeR - Суббота, 18.07.2020, 11:08
Выложена "как есть", написана мб через жопу но в целом как показали тесты на ТВТ1 и ТВТ2-работает. Если нужно нечто прям идеальное-юзать не рекомендую.
Зависимости: WMT, ACE, Taskforce (запускалась на сборках твт и IF, остальные не проверял)
Маленький мануал как запилить в свое поделие
-из description.ext перенести классы звуков к себе, скопировать сами скрипты (dog.sqf и dog_compat.sqf) и папочку suonds -вызвать в инит.sqf dog.sqf и dog_compat.sqf -поставить пустых юнитов (например класса "Выживший") которые будут при заходе на слот превращаться в собак, дать им имена (присвоить имя переменной) -вписать имена юнитов в массивы dog_char_list в скриптах (ну или удалить сами массивы в скриптах и создать глобальную переменную dog_char_list в ините. я хз почему так по-индуски написал, мб сильно пьяный был) -мб подправить в dog.sqf dog_class_list если вам нужны какие то конкретные скины собак на миссии
Известные баги, которые следует включать в условности миссии для собаки:
-бегает по дну, ну тонет, не задыхается -может застрять в узких коридорах (частично решаемо через сесть-встать) -можне взаимодействовать через эйс-меню с объектами-имхо лучше запретить -нет карты и не может быть. увы, попытки пофиксить успеха не принесли. да и сам бот становясь собакой переходит на стороно гражданских (что в общем то норм-не учитывается в потери, захват зон и тп) -"нюх", сделаный через теплак, привязан к армовской силе ветра, а не к эйсовской-в помещениях могут быть несоответсвия. впринципе решается переносом части функции пересчета силы ветра эйса в скрипт, заместо дефолтной армовской
Кнопки:
1-2-3 лай, рык, скулеж tab-громкость кнопка пнв-"нюх"+поиск мин кнопка сесть/встать -хмм... лкм -атака (работает после фриза)
готовый код для брифинга для ленивых
Код
player createDiaryRecord ["diary", ["! СОБАКА (функционал и условности)"," Скрипт воскрешающий функционал ванильного юнита собаки v1.1 by [STELS]BendeR<br /> <br /> ЗАПРЕЩЕНО:<br /> -заходить в воду (собака не плавает, а бегает по дну)<br /> -взаимодействовать с объектами через ace-меню<br /> <br /> ОГРАНИЧЕНИЯ:<br /> -Возможность 'прямой речи' taskforce radio у собаки отключена до попадания в канал 200-х. Слышать что вам говорят вы можете как обычно<br /> -карта отключена после окончания брифинга<br /> -нет возможности садиться в технику<br /> -бесконечная стамина<br /> -нет возможности ходить назад (стоит быть осторожным в узких коридорах)<br /> <br /> УПРАВЛЕНИЕ:<br /> -звуки на клавиши 1-2-3, переключение громкости-Tab<br /> -атака на клавишу 'выстрел' (действует только после фризтайма, нет анимации-только звук). требует 2-3 атаки чтобы выключить цель. Действует только на пехоту<br /> -сесть/встать на клавишу 'сесть'<br /> -имитация нюха через тепловизор (клавиша включения пнв). Обозор затемняется если смотреть против ветра (отображение направления ветра Shift+K по умолчанию). В этом режиме работает подсветка мин и растяжек в поле зрения в радиусе 8м<br /> "] ];
Видео с ТВТ (старая версия скрипта):
Warning! собака была обновлена. подробности в посте ниже
Сообщение отредактировал BendeR - Понедельник, 22.02.2021, 19:20
Скрипт выпила арткомпов у всего живого из миссии Марксмена Загнанные в угол
Проблема в том что WMT в некоторые моменты перевыставляет enableEngineArtillery в true, поэтому нужен такой костыль. Публикую этот кусок кода потому что этот же костыль позволяет при желание рисовать на экране арткомпа, добавлять и удалять элементы пользовательского интерфейса на нем и тп (пример, правда для окошка gps, есть в миссии Ion storm).
Код
_g=[] spawn { if(isDedicated||(!hasInterface)) exitWith {}; enableEngineArtillery false; while{true} do { if(shownArtilleryComputer) then { enableEngineArtillery false; { if (!isNull (_x displayCtrl 500)) then {_x closeDisplay 0;}; } forEach (allDisplays + (uiNamespace getVariable "IGUI_Displays")); }; uisleep 0.5; }; };
можно воткнуть прямо в инит.скф, можно вызвать от туда же как отдельный файл
Сообщение отредактировал BendeR - Четверг, 19.11.2020, 17:30
Небольшой апдейт по скрипту выпила ванильного функционала беспилотников
-скрипт слегка переработан дабы исключить возможность "оживание" функций ии -в скрипт добавлен автоматический фикс забаговавшегося бпа если контролирующий его игрок погибает
В арме есть несколько возможностей выдать кастомные нашивки на форму/декали на технику. Самый известный-сквадлого. Помимо него есть еще инсигнии юнитов отданые на откуп картоделу. Подробности на https://community.bistudio.com/wiki/Arma_3:_Unit_Insignia
Проблема в том что функция BIS_fnc_setUnitInsignia вызывает не совместимую с мультиплеером функцию setObjectTextureGlobal (тупо не работает в мп). Те результат работы вы увидите только в сингле/редакторе
Вместо BIS_fnc_setUnitInsignia создаем в папке с миссией файлик set_unit_insignia.sqf с содержимым:
(в данном случае красным выдаются инсигнии класса NOD_red который определен в description.ext миссии как
Код
class CfgUnitInsignia { class NOD_red { displayName = "Brotherhood of NOD"; author = "Westwood Studios"; texture = "nod_logo.paa"; textureVehicle = "nod_logo.paa"; material=""; }; };
где nod_logo.paa-текстура в формате PAA 128х128 пикселей, лежащая в папке с миссией (конвертер из любого в paa есть в составе Arma3 Tools в стиме). Можно вместо своей текстуры использовать стандартные классы из армы или подключенных модов
К сожалению многие инсигнии на технике (в том числе и на ванильной) поломаны сторонними модами сборки. Для добавления на техники где они все еще работают работают достаточно присвоить технике или юниту имя переменной и в initPlayerLocal.sqf поместить строку вида
мод кинуть в папку, в лаунчере подключать как локальный мод. не забыть отключить перед играми
добавляет в эден эдиторе в меню "Tool" ("Инструменты") опцию Export vehicle setup
Используется для быстрого экспорта в виде скрипта сетапов техники и ее основных настроек (лок, топливо, хп, аммо). Для использования расставить то что будет спавнить в сетапе, выделить и нажать на пункт меню. В буфер обмена будет скопирован код вида:
(в целом работает на любые объекты кроме ботов-те на укрепления и тп. в примере выше-лодка и горгона)
!Важно: не экспортится инвентарь, сетапы пилонов и не создается бот для беспилотников. Это пока нужно дописывать в получившийся файл самому (про то как-в оригинальном посте)
Проверить получившийся код можно выполнив его из консоли отладки запустив миссию
Сообщение отредактировал BendeR - Суббота, 15.05.2021, 14:48
маленький апдейт тулзы из предыдущего поста: ССЫЛКА
-пофикшен экспорт хп -добавлено автоматическое создание ботов для бпа -добавлен экспорт инвентаря -добавлен экспорт пилонов
известные баги и недоработки: -не перекодируются русские названия техники в комментарии в начале каждого "блока" (удалите кракозябры и живите спокойно) -не экпортятся ace-настройки и содержимое инита (просто перенесите код в блок соответствующей техники заменив все ваши this на _veh подумав о локальности: код будет выполнен только на сервере)
например задержка доступа к бпла или заправке самолетов/другой техники:
где в строчке uiSleep(1800); задаем нужное время в секундах после окончания фризтайма. аналогично можно написать с топливом заменив в коде выше строчку createVehicleCrew _veh; на
Код
_veh setFuel 1;
(в этом случае код должен идти после строчки _veh setFuel 0; которую удалять не нужно
Сообщение отредактировал BendeR - Суббота, 15.05.2021, 15:50
Продолжение развития темы с томагавкми. Теперь оживляем корабельную и любую другую арту (те можно повтыкать условных нейтральных градов и тп) Скрипт брать ТУТ примеры вызова:
(3й пример чисто чтобы показать как последовательно вызвать 2 и больше залпов) Селить можно в тригеры, единственное но-выполнять на стороне сервера (в тригере галочка "только сервер"), в иниты со всякими "waituntil" и тд
По параметрам: Два обязательных: 1) Массив арт (каждой арте присвоили имя, если надо в инит поставили this setVariable ["WMT_Side", sideLogic]; чтоб не отображалась в списках техники). Можно в теории использовать любую арту-минометы, самоходки, рсзо и тп 2) Цель. одна цель, можно пустой тригер, любой объект и тп у которого можно вернуть положение функцией position
Опциональные: 1) Количество залпов. По умолчанию каждая арта стрельнет по разу и успокоится 2) Дополнительный разлет (в десятках метров. те ставим 10-получаем сто). По-дефолту многая ванильная арта ужасно точная. Позволяет решить эту проблему или создать вид обстрела большой области 3) класснейм снаряда. У каждого свои. По-умолчанию-ХЕ-шки от ванильных корабельных орудий, в примере выше-касеты от них же разные классы снарядом (магазинов если быть точным, количество указано) для той же корабельной арты:
4) задержка между выстрелами отдельных орудий, с 5) задержка между залпами, с
Общий принцип работы: создать в арте ботов-экипажников, отстреляться, удалить ботов. Так что перезарядка между длительными залпами или при стрельбе "штучными" зарядами типа тех же касет на совести картодела
Сообщение отредактировал BendeR - Суббота, 28.08.2021, 11:40
В общем еще один скрипт который пережил стадию "я знаю как сделать" длившуюся 1.5 года, и еще 2 часа моего времени потраченое на Помойку3) Сделан по причине невозмоности на играх адекватно юзать ванильный VLS: должны сойтись звезды чтобы кто то подсветил цель лазером, а у руля лаунчера оказался человек умеющий пользоваться даталинком. Поэтому родился скрипт...
АКТУАЛЬНАЯ ПОСЛЕДНЯЯ ВЕРСИЯ с мануалом ТЕПЕРЬ В ОТДЕЛЬНОЙ ТЕМЕ в разделе Мастерская->Инструкции! LINK
Стрельба из VLS (ПУ крылатых ракет Venator) с простым указанием цели на карте
Недостатки скрипта: 1) не выбирает типа ракет для стрельбы, по-умолчанию заряжены HE. Переключить на кластеры можно самому скриптом 2) не следит за оставшимся бк в ПУ. Количество доступных пусков задается внутри скрипта переменной VLS_MISSILE_CNT
Как все это "приготовить" поселить в init.sqf традиционным способом:
Код
[] execVM "vls.sqf";
и отредактировать в vls.sqf строки
Код
if (isNil "VLS_USERS") then { VLS_USERS = [b_ks]; };
(список тех кто может использовать)
Код
if (isNil "VLS_LAUNCHER") then { VLS_LAUNCHER = VLS; };
(имя переменной пусковой установки)
Код
if (isNil "VLS_MISSILE_CNT") then { VLS_MISSILE_CNT = 3; publicVariable "VLS_MISSILE_CNT";};
(начальное значение количества пусков. Рекомендую выставить в 0 и выдавать вручную скриптами или тригерами когда нужно)
и если планируется время полета ракет больше 30с (вообще можно использовать как "ограничитель" дальности)
Код
private _dummy_ttl=30;
небольшой пример "ручной" раздачи ракет для init.sqf, о которой я писал выше, используя переменные wmt:
Код
[] spawn { if (!isServer) exitWith{}; waitUntil {uisleep 0.5;!isNil("WMT_pub_frzState")};//Все почему-то забывают waitUntil {uisleep 1;WMT_pub_frzState>=3};//Ждать окончания фриза VLS_MISSILE_CNT = VLS_MISSILE_CNT+1; publicVariable "VLS_MISSILE_CNT";//Выдаем waitUntil {uisleep 0.5;!isNil("WMT_Global_LeftTime")};//Вроде бесполезно, но на всякий случай waitUntil {uisleep 1;((WMT_Global_LeftTime select 0)<=4800)};//За 80 минут до окончания миссии VLS_MISSILE_CNT = VLS_MISSILE_CNT+1; publicVariable "VLS_MISSILE_CNT";//Выдаем waitUntil {uisleep 1;((WMT_Global_LeftTime select 0)<=600)};//За 10 минут до окончания миссии VLS_MISSILE_CNT = VLS_MISSILE_CNT+2; publicVariable "VLS_MISSILE_CNT";//Выдаем };
Updt: фикс для исправления пропадания функции огибания рельефа местности у ракет на больших дистанциях -убрано удаление ботов в ПУ, теперь просто при попытке подключения терминалом-юзера выкидывает и возможность подключения блочится. -обновлена тестовая миссия, теперь можно "пощупать" дамаг и точность по пехоте и ванильной технике
Сообщение отредактировал BendeR - Среда, 21.06.2023, 22:53
v1.2 скрипта пуска крылатых тактических ракет (ссылки в предыдущем посте) -добавлена возможность создавать ограничения для стрельбы в виде зон разрешения и запрета -добавлено настраеваемое и отключаемое оповещение о пуске
HowTo зоны стрельбы Если на миссии не присутствует зон разрешения стрельбы-вся карта доступна для стрельбы, за исключением зон запрета 1) Простой метод: создать их на карте маркерами с названиями начинающимися на vls_ex для зон запрета стрельбы и vls_in для зон разрешения стрельбы. При старте скрипт сам их найдет и начнет использовать 2) Сложный метод (подходит для созданий динамических зон, их удалению и добавлению по ходу миссии): редактировать значения переменных VLS_EXCLUSION_ZONES и VLS_ALLOW_FIRE_ZONES (можно на сервере с отправкой через publicVariable). Можно использовать не только маркера, но и все возможные типы, поддерживаемые функцией inArea
HowTo сообщения о пуске Выключить полностью: в скрипте в строке с
Код
#define SHOW_NOTIFICATION
заменить true на false
Выбрать стороны для которых сообщение отбражается: в скрипте отредактировать массив в строчке
Код
if (isNil "VLS_NOTIFICATION_SIDES") then { VLS_NOTIFICATION_SIDES = [blufor]; };
(его так же можно менять как переменную по ходу миссии, например при выполнение сторонами каких-то целей)
Ну а ниже этой строчки-настройки самого сообщения. Все так же как в функции BIS_fnc_showNotification. Про нее проще почитать в вики и создать внешний вид сообщение под себя в description.ext
Ах да-все есть в миске доступной по ссылке в предыдущем посте. Распакуйте и переносите к себе. Там же можно оценить урон по технике и пехоте
Сообщение отредактировал BendeR - Среда, 01.09.2021, 15:54
v1.3 скрипта пуска крылатых тактических ракет (ссылки в предыдущем посте) -фикс стрельбы на выделенном сервере (локальность пустышки-цели) -добавлена возможности изменения списка игроков, управляющих ПУ из сторонних скриптов
known bugs (не работают оповещания если сервер-игрок)
HowTO: Изменение списка использующих VLS общий список по прежнему живет в VLS_USERS. Все кто может (или будет мочь использовать ПУ вписываются туда) Следующая за ним строчка VLS_CURRENT_USERS. По дефолту значение равно VLS_USERS (те все кто в первом списке могут стрелять если кол-во ракет в переменной VLS_MISSILE_CNT>0). Вот ее и надо менять (на сервере. те если засунули в какой нить addAction, который вызывается локально-не забудьте publicVariable)
Сообщение отредактировал BendeR - Четверг, 09.09.2021, 23:23
А потом перезарядка аж 5 минут. Так что до следующего патча армы (где добавят ряд новых команд управления и контроля времени перезарядки) вам придется отключить возможность стрелять и сделать задержку на перезарядку самим, скриптом
Сообщение отредактировал BendeR - Суббота, 11.09.2021, 11:15
Ну это уж сама миска. Возьми скрипт отдельно по ссылке, посели в инит вызов, создай ПУ с именем VLS и бота с именем b_ks, все заработает по идеи. Дальше уже по гайдику настраивай
Сообщение отредактировал BendeR - Суббота, 11.09.2021, 11:47