Все ребята. Я это сделал!
Лучший Ответ SteelRat , 16 March 2014 - 21:46
Вот подправленный вариант функции, тем кто уже скачал предыдущий удалить из файла строку
sleep 0.2;
Перейти к сообщениюОтправлено 14 March 2014 - 14:17
Все ребята. Я это сделал!
Отправлено 14 March 2014 - 14:22
Конечно же это не идеальный скрипт. Потому что если кто-то умрет ( например, какой-то враг из-за кустов пальнул в спину юниту твоей группы) после активации скрипта, то может не сработать. Надо дорабатывать...
Отправлено 14 March 2014 - 19:35
Вот универсальный вариант функции, описание в комментарии к функции.
Отправлено 15 March 2014 - 07:29
SteelRat, немного не понял, как ее вызвать из редактора и активировать триггер по условию если _check будет true? Пока еще слаб в работе с редактором. А код вроде бы понятен. В окне "условие" триггера локальная переменная что-то не хочет работать. Где-то, что-то я не дочитал.... И мне кажется, что если кто-то в процессе погрузи умрет, то он выдаст результат FALSE.
Сообщение отредактировал sharkman: 15 March 2014 - 07:36
Отправлено 15 March 2014 - 09:22
Я правильно делаю? в Поле "активация" первого триггера пишу check = [heli, group com, 120 ] execVM "fn_checkGroupInVehicle.sqf";
В поле "условие" второго триггера пишу check;
Отправлено 15 March 2014 - 16:51
sharkman,Столько гемороя из-за по сути того же, что тебе предлагали сделать на уровне редактора(без скриптов). Один хрен верт прилетает и висит в небе пока игрок не даст команду подчинённым на выход. Это я к тому, что игрок может и не догадаться что надо сделать, чтобы вертолёт сел. Это типо сам придумал себе проблему, а потом героически её решил?))))
Сообщение отредактировал pixel: 15 March 2014 - 17:04
Отправлено 15 March 2014 - 19:13
pixel, крайний мой пример был проиллюстрирован для эвакуации группы. Я не делал, что бы он где-то сел и высадил группу, это всего лишь кусок моего проекта. В моем проекте у меня просто вертолет долетает до зоны триггера и миссия заканчивается, хотя это тоже можно реализовать.
И еще, в моём проекте и так очень много вейпоинтов для ботов. Для своей группы еще не хватало лепить это чудо. Ребята, всем спасибо, разобрался. SteelRat тоже неплохо помог. Без скриптов любой может простенькую миссию состряпать. Уже хочется перейти на другой уровень. Набираюсь опыта. Все равно, то что здесь рассматривали кому-нибудь пригодится. Лично я не смог найти что-то подобное на других ресурсах. Еще раз спасибо всем!!!!
Сообщение отредактировал sharkman: 15 March 2014 - 19:21
Отправлено 15 March 2014 - 19:33
По поводу, Да на фига это нужно!?
В процессе создания себе проблем, и поиска способов их решения, человек получает полезный опыт.
Теперь для вас, sharkman.
Функция производит проверку некого условия, значит её место в поле "условие", и без "check = ", просто вызов функции, в поле "условие" вернётся TRUE или FALSE.
Далее, выражение " units (group player) " возвращает только живых бойцов отряда, а так как это выражение постоянно вызывается внутри цикла, то мы имеем всегда актуальное значение для проверки.
Попробуйте оформить завершение миссии приблизительно так:
Создайте триггер на месте эвакуации, условие активации "Группа прибыла на место эвакуации", если вертолёт уже на месте, триггер вызывает скрипт "EndMission.sqf".
А уже в этом скрипте оформляйте завершение миссии во всех мыслимых красотах, какие пожелаете. В том числе и проверку посадки всех уцелевших бойцов в технику.
Логика приблизительно такая:
Если вертолёт в воздухе, дать команду снизиться, есть такая команда.
Дать команду бойцам произвести посадку в вертолёт, можно даже дать такую команду самому себе.
Инициализировать проверку, все ли сели.
А далее уже по вкусу)
Сообщение отредактировал SteelRat: 15 March 2014 - 19:38
Отправлено 15 March 2014 - 19:57
По поводу, Да на фига это нужно!?
В процессе создания себе проблем, и поиска способов их решения, человек получает полезный опыт.
Теперь для вас, sharkman.
Функция производит проверку некого условия, значит её место в поле "условие", и без "check = ", просто вызов функции, в поле "условие" вернётся TRUE или FALSE.
Далее, выражение " units (group player) " возвращает только живых бойцов отряда, а так как это выражение постоянно вызывается внутри цикла, то мы имеем всегда актуальное значение для проверки.
При попытке вписать в поле триггера "условие" [heli, group com, 120 ] execVM "fn_checkGroupInVehicle.sqf" выдает ошибку : "тип любой, ожидаетя булево". В чем беда?
Сообщение отредактировал sharkman: 15 March 2014 - 20:07
Отправлено 15 March 2014 - 20:37
По поводу, Да на фига это нужно!?
В процессе создания себе проблем, и поиска способов их решения, человек получает полезный опыт.
Теперь для вас, sharkman.
Функция производит проверку некого условия, значит её место в поле "условие", и без "check = ", просто вызов функции, в поле "условие" вернётся TRUE или FALSE.
Далее, выражение " units (group player) " возвращает только живых бойцов отряда, а так как это выражение постоянно вызывается внутри цикла, то мы имеем всегда актуальное значение для проверки.
Попробуйте оформить завершение миссии приблизительно так:
Создайте триггер на месте эвакуации, условие активации "Группа прибыла на место эвакуации", если вертолёт уже на месте, триггер вызывает скрипт "EndMission.sqf".
А уже в этом скрипте оформляйте завершение миссии во всех мыслимых красотах, какие пожелаете. В том числе и проверку посадки всех уцелевших бойцов в технику.
Логика приблизительно такая:
Если вертолёт в воздухе, дать команду снизиться, есть такая команда.
Дать команду бойцам произвести посадку в вертолёт, можно даже дать такую команду самому себе.
По поводу, Да на фига это нужно!?
В процессе создания себе проблем, и поиска способов их решения, человек получает полезный опыт.
Согласен! Получает но было решение гораздо более простое да и вейпоинтов много ставить бы не пришлось. Впрочем это его дело я лишь высказал мнение по поводу того, что всё слишком заморочено для очень простого решения.
Отправлено 15 March 2014 - 20:39
Вызов execVM сюда не катит. Нужно методом " call ".
[heli, group com, 120 ] call PTm_fnc_checkGroupInVehicle
Инициализировать функцию, например в файле init.sqf миссии: PTm_fnc_checkGroupInVehicle = compile preprocessFileLineNumbers "fn_checkGroupInVehicle.sqf";
Сообщение отредактировал SteelRat: 15 March 2014 - 20:42
Отправлено 15 March 2014 - 20:47
This и And из условия убрать.
Отправлено 15 March 2014 - 21:14
Возможности редактора плюс код, предоставляют широкие возможности для воображения, и не всегда и для всех, всё очень просто выглядит привлекательно)
И создавая миссии, когда то приходит время знакомиться и с кодом, нормальное явление.
Отправлено 16 March 2014 - 21:40
Ну, для начала, вы сударь ошиблись в названии файла init.sqf , букафку перепутали) От того у вас и не работало.
Ну и вот собственно я позволил себе немного порезвиться)
Отправлено 16 March 2014 - 21:46 Лучший Ответ
Вот подправленный вариант функции, тем кто уже скачал предыдущий удалить из файла строку
sleep 0.2;
Сообщение отредактировал SteelRat: 16 March 2014 - 21:46
Отправлено 19 March 2014 - 17:52
, я правильно понял работу Вашей функции? Блок-схему прилагаю. Пока еще в действии не смотрел, просто проанализировал.Вот подправленный вариант функции, тем кто уже скачал предыдущий удалить из файла строку
sleep 0.2;
Сообщение отредактировал sharkman: 19 March 2014 - 17:55
Отправлено 19 March 2014 - 23:16
Да, вы правильно всё поняли. Единственное, я бы добавил ромбик " Юнит в технике" в кольце на forEach, и отделить от "Юнит не в технике"
Рекомендую ознакомиться со скриптами с расширением .fsm эти скрипты можно сказать рисуются, именно как ваша блок схема). Но нужен FSM редактор, идёт в комплекте с девелоперским софтом пока для армы 2 от БИСов.
Код внутри цикла forEach, если выразится по проще, звучит так,
Если даже самый первый проверяемый юнит не в технике, дальнейший перебор теряет смысл, проверяемое условие уже ложно, выходим из цикла, переменную _isOk делаем снова True , что бы наш цикл While продолжил свою работу.
Если все юниты сели в технику, проверка IF в цикле forEach не случилась, переменная _isOk осталась со значением False, что приводит к завершению цикла While, делаем конверт значению _isOK.
Одна переменная используется и для проверки условия в цикле, и для возвращения результата работы функции.
Сообщение отредактировал SteelRat: 20 March 2014 - 00:37
Отправлено 19 March 2014 - 23:27
Введение таймера, это не только гейм опция, но он выступает и как ограничительный параметр задающий время в течении которого исполняется этот код. Типа , ну не сели ! Ну и ладно, процесс в котором исполнялась функция закрылся. И такой результат работы функции тоже можно использовать, для интересных тем, типа ветвления событий, нечто вроде этого,
True - все сели, на колёсах группа выдвигается туда то
False - ставится другая задача, но уже пешком)
Сообщение отредактировал SteelRat: 19 March 2014 - 23:31