v1.4 скрипта пуска крылатых тактических ракет -таймеры заменены на проверку новой командой обновления 2.06 (weaponReloadingTime) LINK (!WARN нужно закоментить 26ю строчку в скрипте. там где playsound. ну или поменять класс звука на свой вкус. Ну или просто убрать нотификейшены выставив VLS_NOTIFICATION_SIDES=[]. позже перезалью подчищенную версию)
теперь можно спокойно переключаться на кластерные ракеты и обратно не заморачиваясь с таймером из за перезарядки в 5 минут. делается это командами (вторая-опциональна, скидывает оставшееся время перезарядки в 0)
выставление минимальной прорисовки автоматом при загрузке может быть полезно на респах или в загруженых объектами зонах для облегчения прогрузки/перезахода игрока
селить в initPlayerLocal.sqf
Код
if ((player inArea "mkr_zone1")||(player inArea "mkr_zone2")) then { waitUntil {uisleep 0.5;!(isNil("WMT_Options_ViewDistance")||isNil("WMT_Options_ViewDistance_Preset"))}; WMT_Options_ViewDistance_Preset=WMT_Options_ViewDistance find (selectMin WMT_Options_ViewDistance); ["updateViewDistance"] spawn WMT_fnc_handlerOptions; };
(в коде выше проверка для маркеров с именами mkr_zone1 и mkr_zone2. можно сделать по своему вкусу)
Сообщение отредактировал BendeR - Четверг, 04.11.2021, 16:48
Экспортилка слотинга в CSV под формат таблички RBC Работает для фиксированного формата названий отделений заданных после символа "@" у командира Примеры:
Код
1. Командир отделения РХБЗ (MX GL, RCO) @Альфа 1-5 РХБЗ пехота [Березино]
@Альфа 1-1 Тип отделения (транспорт1, транспорт 2... ) [Место респаун]
Немного комментариев: наличие (...) опционально. Если их нет-скрипт укажет "без транспорта" в таблице место респауна, тип отделения и его обозначение с двумя цифрами через "-" обязательны в указанной в шаблоне последовательности Номера только из 2х цифра, те 21-2 или 4-32 не допустимы Часть перед @ любая на ваш вкус и формат
HowTO: Необходимо запустить миссию в мультиплеере (это важно, скрипт использует переменную playableUnits доступную только в МП), встать на любой слот запустить миссию и стартануть в игру с брифинга Скопировать содержимое скрипта в консоль отладки и выполнить. Если все наименования отделений правильны-в буфер обмена будет скопировано содержимое для CSV-файла вида:
Если где то косяк-скрипт в сообщение покажет номер отделения где что то указано не верно Так же подсчитывается количество игровых слотов в отделениях, отделения типа БПА и тп где нет игровых слотов в итоговую таблицу не попадают
Дальше сохраняем в текстовый файл и импортируем его хоть в гуглдокс, хоть в гребаный эксель-любые таблицы понимают CSV (пример готовой таблички)
немного пошаманив склепал хорошую альтернативу всех задолбавшей функции BIS_fnc_establishingShot для катсцен на миссиях. Ионка использована только как демо возможности делать катсцены на движке во время пролетов камеры
_cams-массивчик элементов формата : [[координата камеры], [куда смотрит камера],время для перехода от предыдущего вида к этому, угол обзора камеры] cam_effect_on_deep_freeze=false; не забыть выставить в true-тогда катсцена начнет работать за 60с до конца дипфриза. если false-то после начала фриза (не важно-дипфриз или нет) нужны только пролеты камеры-последний спавн можно спокойно удалить updt: вызывать в initplayerlocal
Сообщение отредактировал BendeR - Понедельник, 15.11.2021, 18:34
катсцена прерывается пользователем по нажатию пробела
вызывать в initplayerlocal.sqf в самом скрипте заполнить переменные _cams (в примере в исходнике-сделан выбор для синей и красной стороны. исходная карта для этого набора-Ливония)
_cams-массивчик элементов формата : [[координата камеры], [куда смотрит камера],время для перехода от предыдущего вида к этому, угол обзора камеры]
hint: я использовал 2 безразмерных тригера как точки для камеры и ее взгляда-выставив их просто копировал координаты через меню пкм в эдене
параметры вызова скрипта: [выполнять на хадрфризе, время старта катсцены] параметры опциональны (однако в релизной миссии должен быть выставлен в true первый) 1) 1й параметр для отладки не выставляется (false по-умолчанию, сцена проигрывается всегда до окончания простого фриза, true-только на хардфризе) 2) время старта-в секундах до окончания дипфриза. 90с (1:30) по умолчанию
Глобальные переменные (к которым можно привязать свои фейд-ту-блеки, эффекты камер и тп) cam_effect_camera -собственно сама камера, к ней можно обращаться и тп, только осторожно cam_playback_stage -"стадия" выполнения катсцены. 0-инициализация и прогрузка первой камеры (5с), 1-воспроизведение, 2-остановлено пользователем, 3-остановлено по завершению сцены
Сообщение отредактировал BendeR - Понедельник, 22.11.2021, 21:57
Еще один "не скрипт, а видео". Нетривиальная задача-заставить ЗСУ под контролем АИ стрелять куда надо: только по воздушным целям в строго заданном ренже (1.5км стрельба и 2км-сопровождение в примере на видео)
Продолжаем традицию не скриптов, а видео. Скрипты будут опубликованы конечно, но после тестирования на миссиях для которых делались
В этом случае-кастомный аирдроп. Вбиваем точку спавна, точку сброса, высоту сброса, тип самолета, сторону и начинку ящика. Спавнится самолет под управлением ботов, с вейпойнтами. Перед точкой выброса груза он красиво сбросит скорость и снизится .А после сброса уйдет в набор на максималке и задеспавнится через 15км. Красивый дымок из ящика как бонус. Самолет никак не реагирует на обстрел, ни на что не агрится, может быть сбит
Сообщение отредактировал BendeR - Суббота, 15.01.2022, 15:16
В общем потестили на кошигроках проекта, можно выкладывать
Скрипт им. Марксмена с множеством зон Кусочек истории: однажды Марксмен сделал известную вам миску с секторами... на тригерах. Все поразились отличному фпсу (10-15) и мне пришлось помочь ему, написав этот скрипт. В целом он подойдет для любых не перезахватываемых зон
И лезем в сам скрипт. Все настройки в самом начале и достаточно понятны (я спецом взял пример из уже работающей миски):
Код
#define MARKERS_LIST ["zone_1", "zone_4", "zone_6", "zone_7", "zone_8", "zone_9", "zone_10", "zone_11", "zone_12"];//Маркеры (не тригеры) #define ATTACK_VEH_LIST [kamysh_1,kamysh_2,tank_1] //Списки техник #define DEF_VEH_LIST [marshal_1,gorgon_1,gorgon_2] #define ATTACK_VEH_SCORE_LIMIT 99 //Ограничения на количество очков за технику в секторе. #define DEF_VEH_SCORE_LIMIT 99 #define ATTACKER opfor//Стороны #define DEFENDER blufor #define MARKERS_LEFT_FOR_VICTORY 1 //Сколько должно остаться маркеров для победы атаки #define NOTIFICATION_MSG "NOD захватили сектор" #define VICTORY_MSG "Победа NOD (захват секторов)" #define CAPTURE_DELAY 60 //Задержка захвата маркеров #define CAPTURE_RESET_TIMER true //Сброс таймера в 0 если условия захвата перестали выполняться #define ENABLE_CAPTURE_START_MSG true #define ENABLE_MARKER_BORDERS true //Включает автоматическое создание границ вокруг маркера и их перекрашивание при начале захвата #define CAPTURE_START_MSG "Начат захват сектора" #define CAPTURE_STOP_MSG "Захват сектора прерван"
Основной секрет логики захвата кроется в строчке:
Код
(_attacker_cnt+(_attacker_veh_cnt min ATTACK_VEH_SCORE_LIMIT))>=((2*_defender_cnt)+(_defender_veh_cnt min DEF_VEH_SCORE_LIMIT))))
При необходимости ее можно поправить под свои условия.
Ну и если вы используете ENABLE_MARKER_BORDERS то в функциях fnc_mis_marker_capture_start и fnc_mis_marker_capture_stop можно поправить цвета в которые перекрашиваются "рамки" секторов при начале их захвата (или просто изменить их вид, например добавив жирности или заставив мигать)
Как видите скрипт позволяет сделать как классические зоны, так и что то не совсем обычное (например поставить большой таймер и отключить его сброс в 0 если условия захвата перестали выполняться). Думаю у нас найдется ракодел которому это все пригодится в реализации новой упоротой миски)
Сообщение отредактировал BendeR - Воскресенье, 24.04.2022, 13:05
продолжаю выкладывать то что проверено и работает.
ЗУшки под управлением АИ не привязан к модам и сборкам
имхо топовый скрипт позволяющий освободить слоты экипажников или дать цели, которые не будут ныть на то что поиграли. вызов селится так же в инит и требует немного базовой настройки (в самом начале скрипта, все думаю понятно)
while {alive _zu} do { _targets=nearestObjects [position _zu, ["Air"],ZU_TARGET_RANGE]; if(!isNull _cur_target) then { if((!alive _cur_target)||((_cur_target distance _zu)>ZU_TARGET_RANGE)) then {_cur_target=objNull;}; };
if(_entered_fire_range) then { if((_zu magazineTurretAmmo [ZU_MAG_CLASSNAME, [0]])==0) then { _zu setAmmo [ZU_GUN_CLASSNAME,ZU_MAG_AMMO_CNT]; _zu setWeaponReloadingTime [gunner _zu,ZU_GUN_CLASSNAME,0]; }; };
uisleep 1; }; };
while {true} do { _zu_list=missionNamespace getVariable["zsu_list",[]]; { if(!alive _x) then {continue;}; if(!(_x in _zu_spawned)) then { _zu_spawned pushBack _x; [_x] spawn fnc_aa_zu_cycle; }; } forEach _zu_list; uisleep 10; };
Собственно из обязательного вписать класнейм ЗУ (пкм в редакторе-копировать класс), класнейм пушки на ЗУ (например сидя в ЗУ командой (vehicle player) weaponsTurret [0] ) и класнейм и размер магазина ((vehicle player) magazinesTurret [0] ) Ренж лока и ренж начала стрельбы по своему вкусу, в переменную zsu_list добавляем список наших ЗУшек (можно обновлять динамически, например если вы спавните ЗСУ как я делал у себя в миске Command and Conquer)
важные замечания: -скрипт работает только с одним классом ЗУ -Боты полностью укрощены и не будут лочить, атаковать цели кроме воздушных, даже если к ним подойти в упор и начать прыгать перед прицелом. исключение-воздушная цель, там бот может попасть в куст/дом и зацепить игроков сплешем. -Боты почему то не умеют стрелять визуально по цели-им всегда необходим включенный радар. Если радар выключить-боты стрелять не будут. Ну и вообще ИИ ЗУ весьма косой даже на максимальных настройках -рекомендую убирать ЗРК у ЗУшек (по умолчанию, из за "жесткого" задания орудия для ведения огня в скрипте, бот не будет его использовать пока не кончится БК. но тк скрипт делает моментальную перезарядку бк пушки-это произойдет с малой вероятностью) -скрипт не работает для ЗРК использующих даталинк в качестве источников целей (типа ванильной Rhea)
Ну и видос дабы убедиться в косости АИ-большой тест 2х аи-зсу против 10 бпла:
Сообщение отредактировал BendeR - Суббота, 30.04.2022, 15:27
тут небольшая очередь за этим скриптом выстроилась... собственно: скрипт авиабазы из миссии Technology of Peace и да, он не привязан ни к каким модам и сборкам. разве что требует арму 1.80
выглядит примерно так (на видосе ранняя версия, новый записывать лень):
позволяет создавать зоны обслуживания авиации с -складом подвесов на пилоны -починкой -дозаправкой -перезарядкой пушки и лтц
известные баги и ограничения: -не работает с оружием принадлежащим ко-пилоту, бортстрелкам и тп. только пилоту. заглушки в коде оставлены, желающие могут дописать -при починке происходит "перераспределение" урона по модулям самолета. к взрыву не приводит, поэтому не критично. будет починено после моей победы над ленью
кроме этого в description.ext копируем вот это (пользовательский интерфейс от скрипта)
кофигурация всего счастья происходит так же в description.ext и выглядит примерно так:
Код
class CfgAirfields { aircrafts[]={air1}; ammo_types[]={{"CMFlareLauncher",120,0},{"CMFlareLauncher_Singles",240,0},{"Gatling_30mm_Plane_CAS_01_F",1350,1},{"weapon_Fighter_Gun20mm_AA",450,1}};
подробнее: aircrafts-тут все понятно, даем тем кто может пользоваться зоной обслуживания "имя переменной" и вписываем сюда через запятую ammo_types-а вот тут внимательно вписываем все классы пушек и лтц которые надо перезаряжать. через запятую в формате
Код
{"класс", максимальное количество пулек, 0-лтц/1-пушка}
в примере выше сделано для 2х ванильных самолетов синей стороны. как это дело "получить":
например запустить миску в редакторе, сесть в интересующую технику и нажав Esc в консоли выполнить команду weapons vehicle player в ответ получим нечто вида: ["weapon_Fighter_Gun20mm_AA","Laserdesignator_pilotCamera","CMFlareLauncher_Singles","weapon_AMRAAMLauncher","weapon_AGM_65Launcher","weapon_BIM9xLauncher","weapon_GBU12Launcher","BombCluster_03_F"] в общем это то что вам нужно, осталось из него выдрать нужные классы для лтк и пушки. обратите внимание! команда выше возвращает классы оружия, для выдачи подвесов (подробности ниже) скрипт использует классы магазинов которые можно получить командой magazines vehicle player
далее идут сабклассы зон обслуживания. их может быть сколько угодно. но ограничений по сторонам нет-сядет вражеский самолет и так же сможет их юзать, тут пишите условности сами у каждого сабкласса есть параметры: marker тот самый маркер который и обозначает границы зоны. создайте, обзовите и впишите сюда repair/refuel-скорости починки и перезарядки chaffs/gun-количество лтц/бк пополняемого за тик скрипта ammo[]-массивчик с подвесами на пилоны на начало миски. можно впринципе даже оставить пустым и выдавть как будет описано ниже состоит из элементов вида
Код
{"класс магазина", количество бк в магазине}.
как получить класснеймы магазинов-инфа выше под спойлером
Ну и наконец функция выдачи нового бк на любой филд
функция глобальная, у нее 3 аргумента: класс магазина, количество бк в этом "магазине", индекс базы куда выдать (дефолтное значение 0-первая авиабаза в списке классов)
простенький пример выдачи бк по времени (платформа WMT, селить в отдельный скрипт и вызывать из init.sqf):
Код
//Обязательная часть: выполнять на сервере, после окончания фриза if(!isServer) exitWith {}; waitUntil {uisleep 0.1;(!isNil("WMT_pub_frzState"))}; waitUntil {uisleep 0.1;(WMT_pub_frzState>=3)};
//за 5400 секунд до конца миски waitUntil {uisleep 0.1;((WMT_Global_LeftTime select 0)<=5400)}; ["PylonMissile_1Rnd_BombCluster_03_F",1] call fnc_airfields_add_field_ammo_global; uisleep 0.1;//Слипы чтоб не лагало если выдаем сразу много или админ накрутит время
Скрипт камеры для катсцен на дипфризе v2.0 LINK (в примере по ссылке код из миссии Technology of Peace) (пост со старой версией где есть описание основ настройки скрипта)
-ожидание прогрузки игрока -параметр fov'а "кадра" теперь не обязателен (будет использоваться предыдущий фов камеры) -добавлен 4й параметр "кадра"-исполняемый код. Код выполняется через execVM локально у пользователя. параметр не обязателен -добавлен параметр вызова _skip_part (не обязательный) в формате [время заставки, "кадр" на который скипнуть]. если время дипфриза меньше времени в этом параметре-проигрывание заставки начинается с указанного кадра, вместо начала (полезно чтобы проскипать "художественную" часть и перейти к показу униформы если wmt насчитало слишком мало юзеров на сервере для нормального дипфриза). при отладки с использование первого параметра в false проигрывание всегда начинается с указанного в параметре кадра -добавлена переменная cam_effect_fade на случай если юзер нажмет пропустить заставку. подробности ниже
пример вызова:
Код
[true,90,[85,5]] execVM "cam_effect.sqf";
(проигрывать на дипфризе, начинать если время дипфриза меньше 90с, если начальное время дипфриза меньше 85с-перейти сразу к 5му "кадру")
(при старте кадра вызывается BIS_fnc_typeText. если что подобных функций 100500: BIS_fnc_typeText2, BIS_fnc_textTiles, BIS_fnc_dynamicText, BIS_fnc_EXP_camp_SITREP и тд. подробности в бивики)
(опциональные параметры пропущены-не меняем фов и не выполняем ничего)
отдельный пример использования бисовской фэйдтублэк в коде (не забываем менять переменную, чтобы скрипт вернул экран юзера в нормальное сосояние, если тот пропустит заставку ):
Код
[0, "BLACK", 0, 0] spawn BIS_fnc_fadeEffect;cam_effect_fade=true;//Уход в затемнение
[1, "BLACK", 2, 0] spawn BIS_fnc_fadeEffect;cam_effect_fade=false;//Возвращаем как было
ну и да, старые заставки вполне совместимы с этими
Сообщение отредактировал BendeR - Четверг, 02.06.2022, 17:25