• Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Useless scripts
BendeR
Понедельник, 18.10.2021, 08:45
Пост №: 31
v1.4 скрипта пуска крылатых тактических ракет
-таймеры заменены на проверку новой командой обновления 2.06 (weaponReloadingTime)
LINK
(!WARN нужно закоментить 26ю строчку в скрипте. там где playsound. ну или поменять класс звука на свой вкус. Ну или просто убрать нотификейшены выставив VLS_NOTIFICATION_SIDES=[]. позже перезалью подчищенную версию)

теперь можно спокойно переключаться на кластерные ракеты и обратно не заморачиваясь с таймером из за перезарядки в 5 минут. делается это командами (вторая-опциональна, скидывает оставшееся время перезарядки в 0) 
Код
VLS_LAUNCHER loadMagazine [[0],"weapon_VLS_01","magazine_Missiles_Cruise_01_Cluster_x18"];
VLS_LAUNCHER setWeaponReloadingTime [gunner VLS_LAUNCHER , "weapon_VLS_01", 0]
ну и все проблемы с рассинхронами таймеров тоже канули в лето
Сообщение отредактировал BendeR - Вторник, 19.10.2021, 11:27

Автор темы
 
BendeR
Четверг, 04.11.2021, 16:37
Пост №: 32
выставление минимальной прорисовки автоматом при загрузке
может быть полезно на респах или в загруженых объектами зонах для облегчения прогрузки/перезахода игрока

селить в 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

Автор темы
 
BendeR
Вторник, 09.11.2021, 17:35
Пост №: 33
Экспортилка слотинга в CSV под формат таблички RBC
Работает для фиксированного формата названий отделений заданных после символа "@" у командира
Примеры:

Код
1. Командир отделения РХБЗ (MX GL, RCO) @Альфа 1-5 РХБЗ пехота [Березино]

1. КО, оператор  РЭБ  (Mk20, ARCO) @Альфа 1-2 Инженеры  (Tempest Ammo+Fuel+Repair, БПА РЭБ) [Южнее Зеленогорска]
 Формат:

Код
@Альфа 1-1 Тип отделения (транспорт1, транспорт 2... ) [Место респаун]


HowTO:
Необходимо запустить миссию в мультиплеере (это важно, скрипт использует переменную playableUnits доступную только в МП), встать на любой слот запустить миссию и стартануть в игру с брифинга
Скопировать содержимое скрипта в консоль отладки и выполнить. Если все наименования отделений правильны-в буфер обмена будет скопировано содержимое для CSV-файла вида:

Код
Альфа 1-1,Штаб,"Tempest РЭБ",2,,,Северее Лопатино
Альфа 1-2,Инженеры,"Tempest Ammo+Fuel+Repair, БПА РЭБ",4,,,Южнее Зеленогорска
Альфа 1-3,Экипаж,"Т-100 Varsuk",3,,,Южнее Зеленогорска
Альфа 1-4,Экипаж,"Т-100 Varsuk",3,,,Северее Лопатино
Альфа 1-5,Мотопехота,"MSE-3 Marid",10,,,Северее Лопатино
Альфа 1-6,Мотопехота,"Marid невооруженный",8,,,Северее Лопатино
Альфа 2-1,Мотопехота,"MSE-3 Marid",10,,,Южнее Зеленогорска
Альфа 2-2,Мотопехота,"Marid невооруженный",8,,,Южнее  Зеленогорска
Альфа 2-3,Легкая мотопехота,"Quilin ПТ",7,,,Северее Лопатино
Альфа 2-4,РХБЗ пехота,"Quilin миниган",6,,,Севернее Лопатино
Альфа 2-5,РХБЗ пехота,"Quilin миниган",6,,,Севернее Лопатино
Альфа 2-6,Легкая мотопехота,"Quilin ПТ",7,,,Южнее Зеленогорска
Альфа 3-1,РХБЗ пехота,"Quilin миниган",6,,,Южнее Зеленогорска
Альфа 3-2,РХБЗ пехота,"Quilin миниган",6,,,Южнее Зеленогорска
Альфа 3-4,Водолазы-диверсанты,"SDV",4,,, на выбор СВ/ЮВ в море
Альфа 3-5,Водолазы-диверсанты,"SDV",4,,, на выбор СВ/ЮВ в море
,,,,,,
Альфа 1-1,Штаб,"БПА Stomper",4,,,Березино
Альфа 1-2,Медики,"Нет транспорта",3,,,Березино
Альфа 1-3,Инженеры,"Инж. машина CRV-6e Bobcat",3,,,Березино
Альфа 1-4,Экипаж,"Истребитель танков Rhino MGS UP",3,,,Березино
Альфа 1-5,РХБЗ пехота,"Нет транспорта",5,,,Березино
Альфа 1-6,РХБЗ пехота,"Нет транспорта",5,,,Березино
Альфа 2-1,РХБЗ пехота,"Нет транспорта",5,,,Березино
Альфа 2-2,Разведчики,"Hunter невооруженный",4,,,Березино
Альфа 2-3,Мотопехота,"БТР AMV-7 Marshall",11,,,Клён
Альфа 2-4,Пехота,"Zamak",8,,,Клён
Альфа 2-5,Пехота,"Zamak",8,,,Клён
Альфа 2-6,Пехота,"Zamak",8,,,Клён
Альфа 3-1,Пехота,"Zamak",8,,,Клён
Альфа 3-2,Пехота,"Zamak",8,,,Клён
Альфа 3-3,Пехота,"Zamak",8,,,Клён
Если где то косяк-скрипт в сообщение покажет номер отделения где что то указано не верно
Так же подсчитывается количество игровых слотов в отделениях, отделения типа БПА и тп где нет игровых слотов в итоговую таблицу не попадают

Дальше сохраняем в текстовый файл и импортируем его хоть в гуглдокс, хоть в гребаный эксель-любые таблицы понимают CSV (пример готовой таблички)

LINK
Сообщение отредактировал BendeR - Вторник, 09.11.2021, 17:41

Автор темы
 
BendeR
Среда, 10.11.2021, 23:30
Пост №: 34

Автор темы
 
BendeR
Воскресенье, 14.11.2021, 19:08
Пост №: 35
немного пошаманив склепал хорошую альтернативу всех задолбавшей функции BIS_fnc_establishingShot для катсцен на миссиях. Ионка использована только как демо возможности делать катсцены на движке во время пролетов камеры

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

cam_effect_on_deep_freeze=false;

private _cams=[
   [[2842.92,1142.97,15],[2852.72,1217.53,0],0, 0.4],
   [[2949.41,1330.05,15],[2976.87,1363.44,0],10, 0.7],
   [[2928.88,1829,25],[2922.67,1474.73,0],15,1]
];

waitUntil {uisleep 1;!isNil "WMT_pub_frzState"};
if(WMT_pub_frzState>=3) exitWith {};

_cams spawn {
   if (isNil "cam_effect_camera") then {
      cam_effect_camera = "Camera" camCreate [10,10,10];
   };

   {
      cam_effect_camera camPrepareTarget (_x select 1);
      cam_effect_camera camPreparePos (_x select 0);
      cam_effect_camera camPrepareFOV (_x select 3);
      if(_forEachIndex==0) then {
         cam_effect_camera camPreload 3;
         uisleep 3;
         if(cam_effect_on_deep_freeze) then {
            waituntil {uisleep 0.5;!isNil("WMT_pub_deepFrzTimeLeft")};
            waituntil {uisleep 0.5;WMT_pub_deepFrzTimeLeft<60};
         } else {
            waitUntil {uisleep 0.5;(!isNil("WMT_pub_frzTimeLeft"))&&(!isNil("wmt_param_PrepareTime"))&&(!isNil("WMT_pub_frzState"))};//START AFTER FREEZTIME ENDS
            waitUntil {uisleep 0.5;(WMT_pub_frzTimeLeft<(wmt_param_PrepareTime*60))&&(WMT_pub_frzState<3)};
         };
         showCinemaBorder false;
         cam_effect_camera cameraEffect ["INTERNAL", "BACK"];
      };
      cam_effect_camera camCommitPrepared (_x select 2);
      
      uisleep (_x select 2);
   } forEach _this;

   player switchCamera "INTERNAL";
   cam_effect_camera cameraEffect ["TERMINATE", "BACK"];
   camDestroy cam_effect_camera;
};

[] spawn {
   //INIT CUTSCENE
   //create units&other staff
   if(cam_effect_on_deep_freeze) then {
      waituntil {uisleep 0.5;!isNil("WMT_pub_deepFrzTimeLeft")};
      waituntil {uisleep 0.5;WMT_pub_deepFrzTimeLeft<60};
   } else {
      waitUntil {uisleep 0.5;(!isNil("WMT_pub_frzTimeLeft"))&&(!isNil("wmt_param_PrepareTime"))&&(!isNil("WMT_pub_frzState"))};//START AFTER FREEZTIME ENDS
      waitUntil {uisleep 0.5;(WMT_pub_frzTimeLeft<(wmt_param_PrepareTime*60))&&(WMT_pub_frzState<3)};
   };
   //ACTION
   uisleep 15;
   [[2922.67,1474.73]] call fnc_ic_fire;
   //DELETE EVERYTHING
};

_cams-массивчик элементов формата : [[координата камеры], [куда смотрит камера],время для перехода от предыдущего вида к этому, угол обзора камеры]
cam_effect_on_deep_freeze=false; не забыть выставить в true-тогда катсцена начнет работать за 60с до конца дипфриза. если false-то после начала фриза (не важно-дипфриз или нет)
нужны только пролеты камеры-последний спавн можно спокойно удалить
updt: вызывать в initplayerlocal
Сообщение отредактировал BendeR - Понедельник, 15.11.2021, 18:34

Автор темы
 
BendeR
Понедельник, 22.11.2021, 21:47
Пост №: 36
Скрипт камеры для катсцен на дипфризе v1.1
LINK

катсцена прерывается пользователем по нажатию пробела

вызывать в initplayerlocal.sqf
в самом скрипте заполнить переменные _cams (в примере в исходнике-сделан выбор для синей и красной стороны. исходная карта для этого набора-Ливония)



параметры вызова скрипта: [выполнять на хадрфризе, время старта катсцены]
параметры опциональны (однако в релизной миссии должен быть выставлен в 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

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

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

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

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

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

Скрипт им. Марксмена с множеством зон
Кусочек истории: однажды Марксмен сделал известную вам миску с секторами... на тригерах. Все поразились отличному фпсу (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
Пост №: 41
продолжаю выкладывать то что проверено и работает.

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

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


Код
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
Пост №: 42
немного моего творчества за последнюю неделю:
Скрипт перезарядки пилонов на аэродроме навеяный DCS

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

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

Автор темы
 
BendeR
Воскресенье, 29.05.2022, 17:31
Пост №: 44
тут небольшая очередь за этим скриптом выстроилась... собственно:
скрипт авиабазы
из миссии 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
Пост №: 45
Скрипт камеры для катсцен на дипфризе 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

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

© Red Bear Community 2014-2026