• Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Useless scripts
BendeR
Четверг, 23.12.2021, 00:04
Пост №: 46
Еще один "не скрипт, а видео". Нетривиальная задача-заставить ЗСУ под контролем АИ стрелять куда надо: только по воздушным целям в строго заданном ренже (1.5км стрельба и 2км-сопровождение в примере на видео)

Автор темы
 
BendeR
Суббота, 15.01.2022, 15:12
Пост №: 47
Продолжаем традицию не скриптов, а видео. Скрипты будут опубликованы конечно, но после тестирования на миссиях для которых делались

В этом случае-кастомный аирдроп. Вбиваем точку спавна, точку сброса, высоту сброса, тип самолета, сторону и начинку ящика.
Спавнится самолет под управлением ботов, с вейпойнтами. Перед точкой выброса груза он красиво сбросит скорость и снизится .А после сброса уйдет в набор на максималке и задеспавнится через 15км. Красивый дымок из ящика как бонус. Самолет никак не реагирует на обстрел, ни на что не агрится, может быть сбит

Сообщение отредактировал BendeR - Суббота, 15.01.2022, 15:16

Автор темы
 
Tr1ble
Суббота, 05.02.2022, 22:05
Пост №: 48
Можно ли вариант интро с музыкой и текстом про скип на 'Пробел' ? Сам попытался, получился асинхронный кал.
 
BendeR
Воскресенье, 24.04.2022, 12:50
Пост №: 49
В общем потестили на кошигроках проекта, можно выкладывать

Скрипт им. Марксмена с множеством зон
Кусочек истории: однажды Марксмен сделал известную вам миску с секторами... на тригерах. Все поразились отличному фпсу (10-15) и мне пришлось помочь ему, написав этот скрипт. В целом он подойдет для любых не перезахватываемых зон

Сам скрипт ТУТ

Все так же селим его вызов в init.sqf:

Код
[] execVM "mission_logic.sqf";

И лезем в сам скрипт. Все настройки в самом начале и достаточно понятны (я спецом взял пример из уже работающей миски):

Код
#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

Автор темы
 
BendeR
Суббота, 30.04.2022, 11:48
Пост №: 50
продолжаю выкладывать то что проверено и работает.

ЗУшки под управлением АИ
не привязан к модам и сборкам

имхо топовый скрипт позволяющий освободить слоты экипажников или дать цели,  которые не будут ныть на то что поиграли.
вызов селится так же в инит и требует немного базовой настройки (в самом начале скрипта, все думаю понятно)


Код
if(!isServer) exitWith {};

#define ZU_TARGET_RANGE 3000
#define ZU_FIRE_RANGE 2000
#define ZU_GUN_CLASSNAME "autocannon_35mm"
#define ZU_MAG_CLASSNAME "500Rnd_35mm_AA_shells_Tracer_Red"
#define ZU_MAG_AMMO_CNT 500

private _zu_spawned=[];
private _zu_list=[];

fnc_aa_zu_cycle={
   params ["_zu"];
   private _targets=[];
   private _cur_target=objNull;
   private _prev_target=objNull;
   private _open_fire=false;
   private _entered_fire_range=false;
   private _dist=0;
   createVehicleCrew _zu;
   uisleep 0.3;
   _zu deleteVehicleCrew (driver _zu);
   _zu disableAI "all";
   _zu enableAI "CHECKVISIBLE";
   _zu setVehicleAmmo 0;
   _zu setVehicleRadar 1;
   _zu setSkill ["aimingAccuracy",1];
   _zu setSkill ["aimingSpeed",1];
   _zu setSkill ["aimingShake",1];

   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((count _targets)>0) then {
            _dist=_cur_target distance _zu;
            _dist_min=[_dist,ZU_TARGET_RANGE] select (isNull _cur_target);
            {
               _dist=_x distance _zu;
               if ((_dist<_dist_min)&&(alive _x)) then {_dist_min=_dist;_cur_target=_x;_entered_fire_range=false;};
            } forEach _targets;   
      };
      if(_cur_target!=_prev_target) then {
         if!((isNull _cur_target)&&(isNull _prev_target)) then {
            _zu enableAI "TARGET";
            _zu enableAI "MOVE";
            _zu enableAI "WEAPONAIM";
            _zu doTarget _cur_target;
            _prev_target=_cur_target;
            _zu setAmmo [ZU_GUN_CLASSNAME,0];
         };
         _entered_fire_range=false;
      };
      if(!isNull _cur_target) then {
         _dist=_cur_target distance _zu;
         if((_dist<ZU_FIRE_RANGE)&&(!_entered_fire_range)) then {      
            _zu setAmmo [ZU_GUN_CLASSNAME,ZU_MAG_AMMO_CNT];
            _zu doFire _cur_target;
            _entered_fire_range=true;
         };
         if((_dist>ZU_FIRE_RANGE)&&(_entered_fire_range)) then {
            _zu setAmmo [ZU_GUN_CLASSNAME,0];
            _zu doTarget _cur_target;
            _entered_fire_range=false;
         };
      }else {
         _entered_fire_range=false;
         _zu disableAI "TARGET";
         _zu disableAI "MOVE";
         _zu disableAI "WEAPONAIM";
         _zu setAmmo [ZU_GUN_CLASSNAME,0];
      };
      
      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

Автор темы
 
BendeR
Воскресенье, 08.05.2022, 18:53
Пост №: 51
немного моего творчества за последнюю неделю:
Скрипт перезарядки пилонов на аэродроме навеяный DCS

раз у нас техотделу лень настраивать ace advanced rearm приходится выкручиваться)
скрипт например позволяет выдать подвесы в нужный момент времени
Сообщение отредактировал BendeR - Воскресенье, 08.05.2022, 19:24

Автор темы
 
BendeR
Суббота, 14.05.2022, 19:28
Пост №: 52
немного взорвал Кавалу. 20 минут жизни потрачено на починку бажнуто-кривой рхсной нюки
Сообщение отредактировал BendeR - Суббота, 14.05.2022, 19:28

Автор темы
 
BendeR
Воскресенье, 29.05.2022, 17:31
Пост №: 53
тут небольшая очередь за этим скриптом выстроилась... собственно:
скрипт авиабазы
из миссии Technology of Peace
и да, он не привязан ни к каким модам и сборкам. разве что требует арму 1.80

выглядит примерно так (на видосе ранняя версия, новый записывать лень):


позволяет создавать зоны обслуживания авиации с
-складом подвесов на пилоны
-починкой
-дозаправкой
-перезарядкой пушки и лтц

известные баги и ограничения:
-не работает с оружием принадлежащим ко-пилоту, бортстрелкам и тп. только пилоту. заглушки в коде оставлены, желающие могут дописать
-при починке происходит "перераспределение" урона по модулям самолета. к взрыву не приводит, поэтому не критично. будет починено после моей победы над ленью

Сам скрипт
как обычно вызываем в init.sqf

кроме этого в 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}};
   
       class airfield1 {
              marker="mkr_service_zone";
              ammo[]={{"PylonRack_Missile_HARM_x1",1},{"PylonRack_Missile_HARM_x1",1},{"PylonRack_Missile_HARM_x1",1},  {"PylonRack_Missile_HARM_x1",1}};
              repair=0.001;
              refuel=0.001;
              chaffs=1;
              gun=2;
       };
};


подробнее:
aircrafts-тут все понятно, даем тем кто может пользоваться зоной обслуживания "имя переменной" и вписываем сюда через запятую
ammo_types-а вот тут внимательно вписываем все классы пушек и лтц которые надо перезаряжать. через запятую в формате 
Код
{"класс", максимальное количество пулек, 0-лтц/1-пушка}
в примере выше сделано для 2х ванильных самолетов синей стороны. как это дело "получить":


далее идут сабклассы зон обслуживания. их может быть сколько угодно. но ограничений по сторонам нет-сядет вражеский самолет и так же сможет их юзать, тут пишите условности сами
у каждого сабкласса есть параметры:
marker тот самый маркер который и обозначает границы зоны. создайте, обзовите и впишите сюда
repair/refuel-скорости починки и перезарядки
chaffs/gun-количество лтц/бк пополняемого за тик скрипта
ammo[]-массивчик с подвесами на пилоны на начало миски. можно впринципе даже оставить пустым и выдавть как будет описано ниже
состоит из элементов вида
Код
{"класс магазина", количество бк в магазине}.
как получить класснеймы магазинов-инфа выше под спойлером

Ну и наконец функция выдачи нового бк на любой филд
Код
["PylonMissile_Missile_BIM9X_x1",1] call fnc_airfields_add_field_ammo_global;
["PylonRack_7Rnd_Rocket_04_HE_F",7,1] call fnc_airfields_add_field_ammo_global;
функция глобальная, у нее 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;//Слипы чтоб не лагало если выдаем сразу много или админ накрутит время

//за 4500 секунд до конца миски
waitUntil {uisleep 0.1;((WMT_Global_LeftTime select 0)<=4500)};
   ["PylonMissile_Missile_BIM9X_x1",1] call fnc_airfields_add_field_ammo_global;
   uisleep 0.1;
   ["PylonMissile_Missile_BIM9X_x1",1] call fnc_airfields_add_field_ammo_global;
   uisleep 0.1;
   ["PylonMissile_1Rnd_BombCluster_03_F",1] call fnc_airfields_add_field_ammo_global;
   uisleep 0.1;
Сообщение отредактировал BendeR - Воскресенье, 29.05.2022, 19:21

Автор темы
 
BendeR
Четверг, 02.06.2022, 16:02
Пост №: 54
Скрипт камеры для катсцен на дипфризе 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му "кадру")

пример нового кадра с кодом:

Код
[[11904.1,6517.7,21.6701],[11937.3,6551.58,2.114],0, 1,{[
                    [
                    ["Brotherhood of Nod", "<t align = 'left' shadow = '0' size = '0.7' font='PuristaBold'>%1</t><br/>"],
                    ["Unit 157 'The Guardians'", "<t align = 'left' shadow = '0' size = '0.5' >%1</t>",40]
                    ],0.75,0.75
                    ] spawn BIS_fnc_typeText;}]

(при старте кадра вызывается BIS_fnc_typeText. если что подобных функций 100500: BIS_fnc_typeText2,
BIS_fnc_textTiles, BIS_fnc_dynamicText, BIS_fnc_EXP_camp_SITREP и  тд. подробности в бивики)


Код
[[11904.1,6517.7,21.6701],[11937.3,6551.58,2.114],1]
(опциональные параметры пропущены-не меняем фов и не выполняем ничего)

отдельный пример использования бисовской фэйдтублэк в коде (не забываем менять переменную, чтобы скрипт вернул экран юзера в нормальное сосояние, если тот пропустит заставку ):

Код
[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

Автор темы
 
BendeR
Вторник, 07.06.2022, 13:26
Пост №: 55
мелкое обновление
скрипт пуска тактических ракет v1.5

LINK

на открывающейся карте при указание цели пуска отмечаются подсветки союзных ЛЦУ

Автор темы
 
BendeR
Понедельник, 20.06.2022, 14:45
Пост №: 56
скрипт пуска тактических ракет v1.6
технический, а не функциональный апдейт

-добавлена настройка VLS_INITIAL_MISSILES_CNT задающая начальное количество ракет (если что лаунчер вполне себе стреляет на фризе, скрипт не привязан к платформам)
-добавлена настройка VLS_MAX_FLIGHT_TIME. время в секундах. столько времени существует цель для ракеты и ее сигнатура в SensorTarget
-добавлена глобальная функция vls_add_missiles. единственный аргумент-количество добавляемых ракет
-каждый раз при стрельбе если это необходимо лаунчер автоматически меняет сторону на сторону стреляющего (теперь не нужно заморачиваться с заменой ботов и редактированием скрипта если вы хотите выдать возможность стрелять ракетами например красным, а не дефолтным синим)

LINK
Сообщение отредактировал BendeR - Понедельник, 20.06.2022, 14:47

Автор темы
 
BendeR
Понедельник, 20.06.2022, 20:08
Пост №: 57
Есть конечно, раз она у меня на миссиях народ убивает
Но там не "рафинированая" версия, те надо удалить всякие звуковые оповещения и тп
Взять можно распаковав вот эту миску LINK (скрипт в папочке skills внутри миски)
Там все аналогично ракетам.

По визуальной части: там спавнится источник частиц, света и тп на заданных высотах. Ну те можешь похимичить с функцией fnc_ic_beam чтобы оно стреляло с конкретной высоты, а сам выстрел вызвать не через "тыканье по карте", а напрямую функцией fnc_ic_fire
Сообщение отредактировал BendeR - Понедельник, 20.06.2022, 20:09

Автор темы
 
BendeR
Понедельник, 27.06.2022, 18:16
Пост №: 58
собака
фикс-обновление
-фикс урона
-при атаке сбоку раны вешаются на руку или ногу с соответствующей стороны
-добавлен шанс от 0 (с лица) до 50% (со спины) сбить игрока с ног (на аи не работает)
-фикс минорной ошибки сериализации переменной UI

LINK

старый гайд как подключить к миске

Автор темы
 
BendeR
Четверг, 30.06.2022, 13:55
Пост №: 59
собака v1.5
добавлены возможности:
-выбирать из всех возможных скинов собаки (LINK). если что-дворняги не тригерят некоторые мины, в отличие от овчарок
-каждой собаке выставлять индивидуальный скин (в массиве dog_char_list вместо параметра указываем массив вид [юнит, класс]. если указывать "по-старому" будет выдан скин из DOG_TYPE_DEFAULT
-собакам жрать другую живность и себе подобных

-добавлены параметры с говорящими названиями DOG_USE_WMT_PLATFORM и DOG_USE_ACE_DMG. чтобы отключить-выставить в 0. В случае отключения дэмэджа будет использоваться ванильный дамаг по 0.2 дмг за укус и собака перестанет сбивать пехов с ног

LINK
Сообщение отредактировал BendeR - Четверг, 30.06.2022, 13:55

Автор темы
 
BendeR
Понедельник, 08.08.2022, 13:35
Пост №: 60
нет, скрипт работает только со слотами primary, secondary и handgun+обвес на них. ну и содержимое слотов-контейнеров, как я мог забыть

допиливать эту версию я больше точно не буду, скрипт древний и сейчас я бы сделал все по другому
Сообщение отредактировал BendeR - Понедельник, 08.08.2022, 13:38

Автор темы
 
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: