Еще один "не скрипт, а видео". Нетривиальная задача-заставить ЗСУ под контролем АИ стрелять куда надо: только по воздушным целям в строго заданном ренже (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
скрипт пуска тактических ракет v1.6 технический, а не функциональный апдейт
-добавлена настройка VLS_INITIAL_MISSILES_CNT задающая начальное количество ракет (если что лаунчер вполне себе стреляет на фризе, скрипт не привязан к платформам) -добавлена настройка VLS_MAX_FLIGHT_TIME. время в секундах. столько времени существует цель для ракеты и ее сигнатура в SensorTarget -добавлена глобальная функция vls_add_missiles. единственный аргумент-количество добавляемых ракет -каждый раз при стрельбе если это необходимо лаунчер автоматически меняет сторону на сторону стреляющего (теперь не нужно заморачиваться с заменой ботов и редактированием скрипта если вы хотите выдать возможность стрелять ракетами например красным, а не дефолтным синим)
Есть конечно, раз она у меня на миссиях народ убивает Но там не "рафинированая" версия, те надо удалить всякие звуковые оповещения и тп Взять можно распаковав вот эту миску LINK (скрипт в папочке skills внутри миски) Там все аналогично ракетам.
По визуальной части: там спавнится источник частиц, света и тп на заданных высотах. Ну те можешь похимичить с функцией fnc_ic_beam чтобы оно стреляло с конкретной высоты, а сам выстрел вызвать не через "тыканье по карте", а напрямую функцией fnc_ic_fire
Сообщение отредактировал BendeR - Понедельник, 20.06.2022, 20:09
собака фикс-обновление -фикс урона -при атаке сбоку раны вешаются на руку или ногу с соответствующей стороны -добавлен шанс от 0 (с лица) до 50% (со спины) сбить игрока с ног (на аи не работает) -фикс минорной ошибки сериализации переменной UI
собака v1.5 добавлены возможности: -выбирать из всех возможных скинов собаки (LINK). если что-дворняги не тригерят некоторые мины, в отличие от овчарок -каждой собаке выставлять индивидуальный скин (в массиве dog_char_list вместо параметра указываем массив вид [юнит, класс]. если указывать "по-старому" будет выдан скин из DOG_TYPE_DEFAULT -собакам жрать другую живность и себе подобных
-добавлены параметры с говорящими названиями DOG_USE_WMT_PLATFORM и DOG_USE_ACE_DMG. чтобы отключить-выставить в 0. В случае отключения дэмэджа будет использоваться ванильный дамаг по 0.2 дмг за укус и собака перестанет сбивать пехов с ног