Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Скриптовые команды (всякая всячина) |
Скриптовые команды |
› Четверг
› 13.03.2014
› 19:03
› Сообщение #
AleksSan,
Параллельный поток запускается командами spawn функция, exec "файл", execVM "файл", execFSM "файл" обмен данными можно проводить через Глобальные переменные. _as = [] Spawn {код}; _as = [] Spawn {код}; _as = [] Spawn {код}; команда Call {функция} запускает последовательный поток. при этом переменный объявленные до функции доступны в ней. |
› Четверг
› 13.03.2014
› 19:16
› Сообщение #
|
› Четверг
› 13.03.2014
› 19:54
› Сообщение #
alex70-03, ну а примерчик небольшой можно???
Мы русские и потому победим
|
› Четверг
› 13.03.2014
› 20:00
› Сообщение #
|
› Пятница
› 14.03.2014
› 02:17
› Сообщение #
AleksSan, Параллельный поток запускается командами spawn функция, exec "файл", execVM "файл", execFSM "файл" обмен данными можно проводить через Глобальные переменные. _as = [] Spawn {код}; _as = [] Spawn {код}; _as = [] Spawn {код}; команда Call {функция} запускает последовательный поток. при этом переменный объявленные до функции доступны в ней. Благодарю, чуть чуть лучше стал понимать. По факту и еще потому что локальные переменные при spawn не доступны даже несмотря на то что запущены в одном скрипте выходит то же самое как если бы запустил два скрипта по отдельности? Для закрепления создал тест миссию где после уничтожения всех солдат в трех группах создается три новых группы взамен. Код newgruppa = false; grupa1 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; grupa2 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; grupa3 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; _as = [] spawn { while {true} do { sleep 1; waitUntil {(count (units grupa1 + units grupa2 + units grupa3) < 1)}; newgruppa = true; }; }; _as = [] spawn { while {true} do { sleep 1; waitUntil {newgruppa}; grupa1 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; grupa2 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; grupa3 = [getmarkerPos "Start", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; newgruppa = false; }; }; Но вернулся к той же проблеме, проверка суммы количества юнитов в трех группах считается медленно. В этом скрипте всего лишь 6 юнитов, но после уничтожения всех, создание новых происходит через 55 секунд, хотя по коду должны создаваться сразу, через секунду после гибели последнего, отчего такая большая задержка? |
› Пятница
› 14.03.2014
› 08:25
› Сообщение #
Тут нюанс в подсчёте юнитов группы. Если ты играл командиром, то заметил что убитые некоторое время числятся в составе группы. units grupa1 - это колво юнитов в группе, в том числе и трупов. чтобы срабатывало быстрей, подсчитывай только живых _ms = units grupa1 + units grupa2 + units grupa3; WaitUntil {{alive _x} count _ms == 0}; |
› Пятница
› 14.03.2014
› 13:41
› Сообщение #
локальные переменные при spawn не доступны даже несмотря на то что запущены в одном скрипте Доступны, если передавать их как аргументы. Вот буквально вчера пробовал.. Код ....основной код ... [_src1] spawn { _s=_this select 0; _snd = ["0", "1", "2", "3","4","5"]; while {true} do { _random = _snd select floor random count _snd; _s say [(format ["shot%1",_random]),250]; sleep 11; }; }; _src1 - некий созданный скриптом объект. Результатом является (начиная с нужного момента) издавание этим объектом звуков - конкретно выбираемых случайно из списка разнообразных выстрелов. Для атмосферы затихающего боя Сообщение отредактировал andrucio - Пятница, 14.03.2014, 13:41
|
› Понедельник
› 17.03.2014
› 15:05
› Сообщение #
Игрок будучи командиром может дать приказ искать укрытие через контекстное меню радиоприказов. Но в командах вейпоинтов или поведения ни чего такого нет, только поведение скрытно. Есть возможность как то заставить группу при достижении минимума живых искать укрытия? В скрипте они движутся по вейпоинту, и спасибо подсказкам выше теперь знаю как отслеживается количество живых. Через некоторое время к ним присоединится в группу пополнение. Но до этого они должны продержатся как можно дольше.
Сообщение отредактировал AleksSan - Понедельник, 17.03.2014, 15:06
|
› Понедельник
› 17.03.2014
› 15:32
› Сообщение #
|
› Понедельник
› 17.03.2014
› 19:10
› Сообщение #
По радиокоманде найти укрытие видимо выполняется FSM код, а его выкопать нельзя?
|
› Вторник
› 18.03.2014
› 00:38
› Сообщение #
AleksSan, система поиска укрытия довольно сложна
https://community.bistudio.com/wiki/findEmptyPosition |
› Среда
› 19.03.2014
› 03:08
› Сообщение #
Не знал про findEmptyPosition. В заварушке за центр позиции логичнее взять местоположение лидера группы. _position = position leader group findEmptyPosition [0,100]; Но что то ни какого эффекта.
Добавлено (19.03.2014, 03:08) --------------------------------------------- А как повесить addEventHandler на грузовик, что бы через 600 секунд он удалялся? В скрипте для подвоза свежих сил создаю грузовик, в кузове другой группой создаются солдаты и грузовик везет пополнение на линию фронта, где всех выгружает, потом возвращается на базу и удаляется до создания следующего пополнения, это все идет по циклу. Все бы хорошо но кривая логистика движений техники в АРМА 1-3 заставляет вносить коррективы. Тупые боты даже по прямой трассе не едут ровно, бывает упрется в угол здания или в дерево и буксует на одном месте бесконечно долго. Что бы целая группа пехоты не зависла без дела на всю миссию в этом застрявшем грузовике, самое простое его удалить, по истечению лимита времени когда машина должна была бы довезти всех и вернутся. На технику срабатывало бы deletevehicle truck и освобожденная пехота тогда уж ногами дойдет по своим вейпоинтам. зы: может addEventHandler для этих целей излишне, и можно как о проще приписать удаление? только не в цикле, так как на время завязаны другие функции. Тогда как truk должен безусловно удалятся через 600 сек. Сообщение отредактировал AleksSan - Среда, 19.03.2014, 03:19
|
› Среда
› 19.03.2014
› 07:29
› Сообщение #
sleep 600;
https://community.bistudio.com/wiki/sleep |
› Среда
› 19.03.2014
› 11:24
› Сообщение #
sleep 600; deletevehicle truck;
Это было бы слишком просто. В моем случае этот truck создается в цикле, причем если будет слишком жарко, новый грузовик с поддержкой может понадобится и через 300 сек. А вписав в тело цикла условие sleep 600; deletevehicle truck; новый truck, он создастся только через 600, после удаления первого грузовика. Поэтому и спрашиваю про таймер удаления который навешивался бы для новосозданых машин транспортировки. Сообщение отредактировал AleksSan - Среда, 19.03.2014, 11:25
|
› Среда
› 19.03.2014
› 14:54
› Сообщение #
AleksSan, можно попробовать параллельно в момент создания трака запустить отсчет времени
_truck spawn { sleep 600; deletevehicle _this; }; Здесь может интересно получиться.. в "жарком" случае создастся новый трак, а первый где-то буксует.. в итоге будут две группы пехоты:) Но по-любому через 600с траки удалятся, доехали они или нет |
| |||
Чат сайта |