rezakpower 38 Жалоба Опубликовано 3 октября, 2016 Господа, я тут решил сделать миссию, но столкнулся с проблемами реализации своих идей, вот мои вопросы по пунктам: 1) Я хочу притащить unit в определенный маркер (у врагов должна появиться надпись, "unit захвачен русскими". ? 2) Надо продержать его в этом маркере столько времени, сколько я хочу и по истечении времени моя победа. Конечно при этом если он из маркера выйдет, время сбрасывалось и шло заново, если я притащу его вновь. 3) Если unit умер у всех должна выскочить надпись "Unit мертв" (естественно имя должно высвечиваться которое я сам придумаю, а не имя слота). Если кто знает напишите поподробнее как все это сделать и в какое место вставлять скрипты. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[FRWL] Lex 431 Жалоба Опубликовано 3 октября, 2016 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: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере. 2 rezakpower и TRUE отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
rezakpower 38 Жалоба Опубликовано 4 октября, 2016 Большое спасибо, нубу типа меня никогда бы не разобраться. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
rezakpower 38 Жалоба Опубликовано 4 октября, 2016 10 часов назад, Lex сказал: 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: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере. Слушай, а вот если у меня 2 разных зоны и условия победы разные, т.е. если вип доставлен в одну зону и удержан там, победить должна одна сторона, а если в другую, вторая сторона. В этом скрипте я не могу разделить зоны, он срабатывает на победу только одной стороны, как сделать чтобы на разные? Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
[FRWL] Lex 431 Жалоба Опубликовано 4 октября, 2016 2 часа назад, rezakpower сказал: Слушай, а вот если у меня 2 разных зоны и условия победы разные, т.е. если вип доставлен в одну зону и удержан там, победить должна одна сторона, а если в другую, вторая сторона. В этом скрипте я не могу разделить зоны, он срабатывает на победу только одной стороны, как сделать чтобы на разные? Спасибо. Ставишь уже два триггера с такими же настройками. Отличаться они будут полями "при активации" и "при деактивации". В первом триггере будет: При активации 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 (независимые) 3 Jastik, TRUE и rezakpower отреагировали на это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты