Перейти к содержанию

Lex

[FRWL] Отряд FRWL
  • Публикаций

    140
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Весь контент Lex

  1. Вот перечень растительности, используемой на данной карте: Как видно, модели с текстурами подключаются из cup_terrains_ca_plants.pbo Открыв этот аддон, можно увидеть, что в нем хранятся модели и материалы растительности, кустов, деревьев и т.д. не только для данной карты, но и для других. Под фразой и указанным пунктом правил 0.4.2 я понимаю как раз таки, что заявитель имеет ввиду удаление травы, т.е. удаление cup_terrains_ca_plants.pbo Так если Вы считаете, что подозреваемый удалил эту pbo, почему тогда на видео не исчезли другие кусты и деревья?
  2. Lex

    Поделитесь ConvertWRP

    @MrPurple Держи набор Mikero Tools (ConvertWRP присутствует) и совместимый DePbo64.dll MikeroTools-231015.zip DePbo64.zip
  3. Lex

    Project PRACS: SLA

    @ZAMPOLIT Примерно так же я разбирался с документацией по этим системам
  4. Lex

    Project PRACS: SLA

    Жду модели ПВО от этого мода. В планах реализовать SAM Simulator в игре. Правда, не так детально.
  5. Согласен, на Т-90 - фишка РХС. Вот даже скрипт, правда тут pbo от Т-72: А отрыв башни от ACE, судя по конфигу, работает с двумя базовыми классами: class B_MBT_01_cannon_F: B_MBT_01_base_F { GVAR(turret)[] = {QGVAR(Turret_MBT_01),{0,-1,0.5}}; }; class O_MBT_02_cannon_F: O_MBT_02_base_F { GVAR(turret)[] = {QGVAR(Turret_MBT_02),{0,-1,0}}; }; Так что только у T-100 Varsuk и M2A1 Slammer (M2A1 Slammer UP) должна отрываться башня.
  6. ace_frag отвечает за осколки от взрывов (гранат, снарядов, техники...). ace_cookoff - за возгорание техники, ящиков, детонацию БК, отрыванию башни при взрыве. Вот все функции https://github.com/acemod/ACE3/tree/master/addons/cookoff/functions. Например, можно посмотреть функцию fnc_handleDamage, там показано, как все реализовано при попадании снаряда.
  7. Lex

    Выдаёт ошибку.

    @Alammo Открой редактор и проверь наличие острова Malden 2035 в списке. Сделай проверку целостности файлов игры в стим-клиенте. Приложи сюда скриншот списка доп. контента игры в стиме.
  8. Lex

    Выдаёт ошибку.

    @Alammo Открой папку с игрой. Проверь есть ли папка Argo.
  9. Возможно к концу месяца я должен закончить работу с аддоном аирдропа. Так что будет вам сброс ящиков с вертолетов.
  10. Lex

    Biohazard

    ...И при заражении эту музыку зациклить в качестве психотропного эффекта
  11. Lex

    Biohazard

    Тогда уж можно и эффекты накрутить, например такие:
  12. А что со звуком выстрела не так?
  13. Lex

    Freedom Star

    Зачем искать от маркера, когда можно сразу брать от объекта? А вот это вообще что? _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; _soundToPlay = _soundPath + "blip.ogg"; Без файла description.ext команда missionConfigFile выдаст пустую строку. Достаточно просто указать путь как "blip.ogg" в команде playSound3D и положить звуковой файл в миссию. -_-
  14. Lex

    Freedom Star

    @Gollob Ты хоть сам тестировал пеленгатор? И почему здесь: ... sleep 5; _arr = "mymrk_a1"; if (count _arr > 0) then { _obj = getMarkerPos _arr; _dir = [player, _obj] call BIS_fnc_dirTo; ... позиция считывается от какого-то маркера, а не от самого объекта?
  15. Lex

    TS зависает

    @Spiva У тебя ник в ТС совпадает с игровым? Меняется при запуске миссии в ТС?
  16. Та самая высадка и этот вертолет. Можно перемотать на 2:20
  17. Перезарядка осуществляется по прописанном в конфиге дефолтном вооружении (magazines[]). Вырезать при инициализации бесполезно. Пробуй отключить перезарядку вертолету с помощью этой функции. Примерно так: if (isServer) then {[heli] call ace_rearm_fnc_disable;};
  18. ACE перезарядка считывает дефолтные класс-неймы магазинов, указанные в массиве magazines[]. Путь: cfgVehicles >> "класс-нейм техники" >> class Turrets >> class MainTurret >> magazines[] У того же Абрамса: magazines[] = {"rhs_mag_M829A3","rhs_mag_M830A1","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200","rhs_mag_762x51_M240_1200"}; Как видно, могут быть перезаряжены только два вида снарядов для пушки: "rhs_mag_M829A3","rhs_mag_M830A1". Чтобы перезаряжать другие снаряды, можно написать костыль в виде экшена, прикрепленного к грузовику, с использованием того же ACE фреймворка, например, функции типа: [ammo_truck, player, ["500Rnd_127x99_mag_Tracer_Red", tank]] call ace_rearm_fnc_takeAmmo и т.д.
  19. Ну переволновался, с кем не бывает.
  20. Если заняться серьезно, то тогда написать универсальную функцию для картоделов и добавить на инициализацию в аддон (можно даже в WMT). Ее синтаксис я представляю такой: [ [<объект1>,["команда1","команда2","команда3"],["стрелок","сапер"],"Not allowed!"], //Класс-неймам "стрелок" и "сапер" разрешить использование команд "команда1" "команда2" "команда3" на объекте "объект1". При запрете вывести сообщение "Not allowed" [<объект2>,["команда4","команда5"],[""],""], //Всем запрещено использовать команды "команда4" "команда5" на "объект2". Без сообщения ... ] call WOG_lockActions; UI EH будет срабатывать на нажатие экшена и вызывать функцию с алгоритмом, который сначала проверит объект, находится ли он в списке проверяемых, если да, то проверяем название экшена, если он присутствует, то тогда проверяем класс-нейм. В конечном итоге если все условия удовлетворены, то возвращаем true (запрет) в inGameUISetEH, иначе false.
  21. Разумеется можно сделать ограничение доступа и запрет на разборку в одной функции, только нужно поиграться с условностями. А какие имеешь ввиду EH вставлять?
  22. Есть еще способ реализации данного скрипта с использованием команды inGameUISetEventHandler. Вешаем EH на нажатие команды в меню взаимодействия. При срабатывании обработчика проверяем имя экшена ("GetInDriver","GetInTurret"...) и объект, к которому относится экшен, а также класс-нейм нашего игрока. Код в init.sqf: if (hasInterface) then { lockActionFunc = { //класс-неймы экипажа _typesOfVehCrew = ["wog_ksor_sergeant", "wog_ksor_officer_armored", "wog_ksor_driver_armored", "wog_ksor_crew_commander", "wog_ksor_crew_gunner", "wog_ksor_crew_driver", "wog_army_ucp_crew_commander", "wog_army_ucp_crew_gunner", "wog_army_ucp_crew_driver", "wog_army_ucp_squadleader", "wog_army_ucp_officer", "wog_army_ucp_Plsg", "rhsusf_usmc_marpat_d_crewman"]; _arrayOfVeh = [LAV1]; //массив техники для блокировки if (((_this select 3)=='GetInDriver' || (_this select 3)=='GetInTurret' || (_this select 3)=='MoveToDriver' || (_this select 3)=='MoveToTurret') && ((_this select 0) in _arrayOfVeh) && !(typeOf player in _typesOfVehCrew)) then { hint 'У Вас нет доступа к управлению техникой!'; true } else { false }; }; inGameUISetEventHandler ["Action","_this call lockActionFunc;"]; }; Но есть одна загвоздка, как обсуждалось в этой теме: ACE функции ace_interaction_fnc_showMouseHint и ace_interaction_fnc_hideMouseHint перезаписывают параметры команды inGameUISetEventHandler при отрисовки и скрытии вспомогательного хинта. Другими словам, например, если мы возьмем ящик через меню взаимодействия ACE или воспользуемся продвинутой системой бросков гранат, выше упомянутые функции перезапишут EH, и тогда мы сможем сесть в технику, даже если не являемся экипажем. ... // Disable action menu, showHud also disables all scripted UI (such as drawIcon3D) inGameUISetEventHandler ["PrevAction", "false"]; inGameUISetEventHandler ["NextAction", "false"]; inGameUISetEventHandler ["Action", "false"]; Чтобы избежать этого, как вариант, можно изменить последние строчки кода в файле ace_interaction\functions\fnc_hideMouseHint.sqf на эти: ... // Disable action menu, showHud also disables all scripted UI (such as drawIcon3D) inGameUISetEventHandler ["PrevAction", "false"]; inGameUISetEventHandler ["NextAction", "false"]; if (!isNil "lockActionFunc") then { inGameUISetEventHandler ["Action","_this call lockActionFunc;"]; } else { inGameUISetEventHandler ["Action", "false"]; }; Здесь мы проверяем, объявлена ли переменная lockActionFunc, которую задаем в init.sqf. Если объявлена, то ее содержимый код прописываем на исполнение в параметры inGameUISetEH. Если нет, то значит миссия не использует скрипт блокировки на технику, и меню через колесико будет работать в обычном режиме. ace_interaction.pbo
  23. 4. Я думаю в этом причина: waitUntil {sleep 5; WMT_pub_frzState >= 3}; Код с EH выполнится только после окончания фризтайма, соответственно waitUntil нужно перенести в конец кода.
  24. Ставишь уже два триггера с такими же настройками. Отличаться они будут полями "при активации" и "при деактивации". В первом триггере будет: При активации missionNamespace setVariable ['isInside_1', true, true]; [[[], {['VIP захвачен русскими!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; При деактивации missionNamespace setVariable ['isInside_1', false, true]; [[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; Во втором триггере соответственно: При активации missionNamespace setVariable ['isInside_2', true, true]; [[[], {['VIP захвачен американцами!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; И при деактивации missionNamespace setVariable ['isInside_2', false, true]; [[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; Как видишь, я теперь использую в каждом триггере свою переменную - "isInside_1" и "isInside_2", которая будет обозначать присутствие ВИПа в соответствующей зоне. Далее меняем код в init.sqf: if (isServer) then { if (isNil "isInside_1") then {isInside_1 = false; publicVariable "isInside_1";}; //объявляем переменные if (isNil "isInside_2") then {isInside_2 = false; publicVariable "isInside_2";}; missionComplete = false; [] spawn { i1 = 0; //для каждой зоны свой счетчик i2 = 0; _timeScore = 10; while {!missionComplete} do { if (isInside_1) then //если ВИП в первой зоне - наращиваем нужный счетчик { i1 = i1 + 1; } else { i1 = 0; }; if (isInside_2) then { i2 = i2 + 1; } else { i2 = 0; }; if (i1 >= _timeScore && alive Ivan) then { [[[], {[resistance, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //удержан в первой зоне - победа зеленых [[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; missionComplete = true; }; if (i2 >= _timeScore && alive Ivan) then { [[[], {[west, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //удержан во второй зоне - победа синих [[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; missionComplete = true; }; sleep 1; }; }; [] spawn { while {alive Ivan && !missionComplete} do //loop на проверку убийства ВИПа { sleep 0.5; }; if (!alive Ivan) then //если убит - выводим сообщение и завершаем миссию { [[[], {[west, 'VIP убит!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //выставляешь вместо west ту сторону, которая должна выиграть при убийстве юнита [[[], {['VIP убит!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; missionComplete = true; }; }; }; Попробуй так, я не тестировал, но должно работать. Поправка к моему посту выше: стороны должны называться west (синие), east (красные) и resistance (независимые)
  25. 1) Создаешь триггер и настраиваешь так: Тип - Нет Активация - Кто угодно Тип активации - Присутствует Галочку на "Повторяемый" Размер и форму подбираешь сам. В условии пишешь: Ivan in thislist При активации: missionNamespace setVariable ['isInside', true, true]; [[[], {['VIP захвачен русскими!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; При деактивации: missionNamespace setVariable ['isInside', false, true]; [[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; 2) Заходишь в атрибуты юнита, даешь ему имя в поле "Имя переменной", например, Ivan. 3) В папке с миссией создаешь файл init.sqf Наполняешь его следующим: if (isServer) then //выполнение только на сервере { if (isNil "isInside") then {isInside = false; publicVariable "isInside";}; missionComplete = false; [] spawn { i = 0; _timeScore = 10; //количество секунд для удержания в зоне while {!missionComplete} do //loop для проверки нахождения ВИПа и подсчет кол-ва секунд удержания { if (isInside) then { i = i + 1; //наращиваем счетчик, если ВИП в зоне } else { i = 0; //обнуляем если - нет }; if (i >= _timeScore && alive Ivan) then //вывод сообщения и завершение миссии после удержания за указанный период времени { [[[], {[resistance, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //выставляешь ту сторону вместо resistance, которая должна выиграть при удержании ВИПа в зоне [[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; missionComplete = true; //переменная-триггер }; sleep 1; //интервал срабатывания цикла 1 сек. }; }; [] spawn { while {alive Ivan && !missionComplete} do //loop на проверку убийства ВИПа { sleep 0.5; }; if (!alive Ivan) then //если убит - выводим сообщение и завершаем миссию { [[[], {[blufor, 'VIP убит!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //выставляешь вместо blufor ту сторону, которая должна выиграть при убийстве юнита [[[], {['VIP убит!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP; missionComplete = true; }; }; }; P.S.: Кодировка файла должна быть UTF-8, иначе будут проблемы с русскими символами. P.S.S: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере.
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.