Модератор форума: GUNNER161, Panikaha |
Форум » РЕДАКТОР - ArmA 3 » Вопрос - ответ » Динамическое создание юнитов и добавление им вейпоинтов. (продолжение темы ARMA2 динамическое создание юнитов.) |
Динамическое создание юнитов и добавление им вейпоинтов. |
› Среда
› 23.10.2013
› 18:39
› Сообщение #
Пытаюсь перенести данный http://arma.at.ua/forum/76-9097-135104-16-1359598945 скрипт в АРМА3. Но тут насколько понимаю свеже-созданые отряды просто напросто добавляются в группу group1 и бегут с зоны спавна к лидеру. Постепенно каждые 2 минуты увеличивая численность группы.
Чуть доработал под АРМА3 но остались вопросы. _squad1 = [getmarkerPos "spawnPoint1", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F", "B_medic_F", "B_Soldier_F", "B_soldier_LAT_F", "B_soldier_AR_F"]] call BIS_fnc_spawnGroup; "I_Soldier_F" createUnit [getmarkerPos "spawnPoint1", _squad1, "addSwitchableUnit this", 0.8]; {_x addEventHandler ["killed",{_this exec "xt.sqs"}]} forEach units _squad1; ~5 _squad1 setSpeedMode "NORMAL"; _squad1 setCombatMode "YELLOW"; _squad1 setFormation (["STAG COLUMN", "WEDGE", "ECH LEFT", "ECH RIGHT", "VEE", "DIAMOND"] call BIS_fnc_selectRandom); _wpo1 = _squad1 addWaypoint [(getMarkerPos "wp1"), 30]; _wpo1 setWaypointType "MOVE"; _wpo1 setWaypointStatements ["true", ""]; _wpo2 = _squad1 addWaypoint [(getMarkerpos "wp2"), 0]; _wpo2 setWaypointType "MOVE"; _wpo2 setWaypointstatements ["true", ""]; _wpo3 = _squad1 addWaypoint [(getMarkerPos "wp3"), 30]; _wpo3 setWaypointType "MOVE"; _wpo3 setWaypointstatements ["true", ""]; #loopsf ~60 ?(count units _squad1 < 1): goto "naexit"; ?(leader _squad1 distance getmarkerpos "wp3" > 50): goto "loopsf"; #naexit null = _squad1 execVM "deleteWaypoints.sqf"; titletext ["Группа финишировала", "Plain Down"] exit Активировать скрипт можно многократно, но не сразу, а по мере уменьшения числа юнитов, что бы не тормозило. Каждый раз будет создаваться новая группа Здесь: {_x addEventHandler ["killed",{_this exec "xt.sqs"}]} forEach units _squad1; скрипт удаления мертвых тел. null = _squad1 execVM "deleteWaypoints.sqf"; скрипт с вики для удаления всех вейпоинтов у группы. Причем последнее важно. Так как после уничтожения всей группы, а так же если они дошли до конечной точки вейпоинта, все пути вейпоинтов сохраняются, а при большом количестве групп не хочется что бы в памяти висели все эти пути не дошедших групп. Покритикуйте, может есть где возможность упрощения, так же хотелось бы привнести элементы случайности но не знаю как юзать random, то есть что бы вейпоинты не создавались только по маркерам wp1, wp2, wp3 но и к примеру ставились и на маркеры wp1a, wp2c, wp3d. Сообщение отредактировал AleksSan - Среда, 23.10.2013, 19:24
|
› Среда
› 23.10.2013
› 19:43
› Сообщение #
Вэйпоинты не обязательно удалять, их можно пернести на новое место и запустить заново.
Рандом это просто дробное число, псевдо случайное в указаном тобой диапозоне - от 0 до указанного пример случайный маркер из трёх _mk = ["wp1", "wp1_a", "wp1_b"] select floor (random 3) |
› Четверг
› 24.10.2013
› 01:25
› Сообщение #
Переносить вейпоинты это путем перемещения маркеров на карте, так можно? А в мясной миссии где погибнет 80% отрядов, наверное проще удалять созданные вейпоинты уничтоженных групп. Не ломал голову до сегодня, думал если группу всю уничтожили, тела с отряда скриптом удалились то и игра забыла про их существование. Ан нет после добавления вейпов группе с задержкой в 5 минут создавал в этой же группе еще одного бойца которым мог управлять игрок. Потом смотрел если всю группу уничтожали или же она благополучно доходила до финального вейпа, все равно ее путь висит, это видно на карте в виде путей вепоинтов. С массой групп в финале имхо будет негативно сказываться на производительности.
Сообщение отредактировал AleksSan - Четверг, 24.10.2013, 02:52
|
› Четверг
› 24.10.2013
› 16:29
› Сообщение #
Кол-во групп в игре ограничено - 144 для каждой стороны, если группа не используется её надо удалять.
Потому проще переставлять поинты на новые места по мере продвижения в глубь карты http://community.bistudio.com/wiki/setWPPos |
› Пятница
› 25.10.2013
› 00:46
› Сообщение #
Что то не до понимаю. Вот как у меня задумка изначально была:
Имеется хорошо укрепленный, тоже с пополняемыми подкреплениями городок, обороняемый красными. Его без остановок штурмуют синие. Вернее количество нападающих ограничивается кодом из зацикленного скрипта: # @ {side _x == west} count allunits < 70~500 ["CreateUSA"] exec "CreateGruppa1.sqs"goto: Группы создаются через ограниченное время подлета 500 сек., у меня их подвозят вертолеты к полю брани, и как только воюющих синих становится меньше 70 им креатится новая группа. В скрипте который создает отряд и дает ему вейпоинты передвижения отслеживается осталась ли в группе еще живые солдаты, если нет то происходит удаление всех вейпоинтов этой группы, так как даже после смерти всего отряда они висят, и в конце exit из sqs скрипта. Снова запускается CreateGruppa1.sqs которая рождает новую группу и вейпоинты. И да ограничение групп в 144 обошел путем прописания в том же скрипте {if (count units _x == 0) then {deletegroup _x}} foreach allgroups; Уничтоженные группы периодически удаляются, ограничений на создание нет. В вашем варианте если правильно понял, вместо выхода из скрипта по уничтожению группы, он продолжает работать только снова в нем же создаются свежая группа, и по мере захвата кварталов города, переставляются вейпоинты глубже? Нужно будет проверить и такой вариант. Вот только кажется перворожденный отряд пробежав с 1 по 4 вейпоинт бесславно погибнув под стенами города отметит эти вейпоинты как пройденные, и следующая группа уже побежит напрямик с точки высадки сразу же к 5 вепоинту. Сообщение отредактировал AleksSan - Пятница, 25.10.2013, 00:51
|
› Пятница
› 25.10.2013
› 02:34
› Сообщение #
Следущей группе надо скомандовать начать маршрут заново, и начнут они с Указанного поинта.
http://community.bistudio.com/wiki/setCurrentWaypoint Так в своих последних миссиях я делал отрядам только один поинт, в котором менял задачи и место положения в зависимости от текущей ситуации. |
› Пятница
› 25.10.2013
› 03:35
› Сообщение #
Так в своих последних миссиях я делал отрядам только один поинт, в котором менял задачи и место положения в зависимости от текущей ситуации.
С setCurrentWaypoint новые отряды бегут с первого вейпоинта как и нужно, перемещение вейпоинта на новое место с этим понятно как, а как у него одного менять задачи? Попутно выяснилось что функция BIS_fnc_spawnGroup, а у меня она то кого плана в скрипте примере: _group = [getmarkerPos "baza", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; создает новую группу несмотря на то что приписаны в том же единожды запущенном скрипте к _group, при этом не хотят брать с setCurrentWaypoint уже проложенный маршрут. А вот юниты в группе созданные при помощи createUnit: создаются в той же группе и бегут как и хотел с первого вейпоинта. Только почему у так созданой группы начальный вейпоинт начинается в океане в нулевых координатах. Сообщение отредактировал AleksSan - Пятница, 25.10.2013, 03:38
|
› Пятница
› 25.10.2013
› 03:41
› Сообщение #
BIS_fnc_spawnGroup универсальная функция, удобно но не всегда.
Нулевой поинт делается по умолчанию, он необходим для системы контроля поведения, в скриптах стоит использовать номера с 1 |
› Пятница
› 25.10.2013
› 04:32
› Сообщение #
То есть вейпоинт начинающий свой путь с самого нижнего левого угла карты в координатах 0,0 это нормально? Вроде в тот угол отряд не стремится бежать при зацикливании пути, но думал что неправильно даю место создания групп. С BIS_fnc_spawnGroup дорожки вейпоинтов начинаются с места создания отряда.
|
› Пятница
› 25.10.2013
› 13:34
› Сообщение #
|
› Пятница
› 25.10.2013
› 15:36
› Сообщение #
Я про нулевой вейпоинт, вот он смущает, по идее должен быть в месте появления отряда, во вложенном скриншоте это видно, он в нулевых координатах. Хотя на миссии не сказывается и при отладке удобно видеть пути вейпоинтов на карте если игрок в этом отряде. Можно как то сделать что бы эти линии не отображались?
Прикрепления:
1772518.jpg
(96.2 Kb)
|
› Пятница
› 25.10.2013
› 17:31
› Сообщение #
_gr = createGroup West;
[_gr, 0] setWaypointPosition [getMarkerPos "Mk", 0]; исправит проблему эта команда скрывает метку куда идти [_gr, 0] setWaypointVisible false; эта команда скрывает поинт на карте. [_gr, 0] showWaypoint "NEVER"; |
› Вторник
› 31.12.2013
› 13:13
› Сообщение #
создаю юнитов(рядом с объектом dp1) и пытаюсь заставить их передвигаться к объекту pr1
_this = createCenter east; _center_0 = _this; _group1 = creategroup _center_0; "O_Soldier_GL_F" createUnit [position dp1, _group1,""]; "O_Soldier_GL_F" createUnit [position dp1, _group1,""]; "O_Soldier_GL_F" createUnit [position dp1, _group1,""]; _group1 doMove (position pr1); но происходит только создание юнитов, а дальше они просто стоят. Gr0 = createGroup EAST; Mesto1 = getPos dp1; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; Gr0 doMove (position pr1); в другом исполнении тоже не работает( Сообщение отредактировал alex70-03 - Вторник, 31.12.2013, 13:35
|
› Вторник
› 31.12.2013
› 13:44
› Сообщение #
в описании команды doMove
необходимо указать одного или массив ошибка - _group1 doMove (position pr1); (units _group1) doMove (position pr1); |
› Четверг
› 02.01.2014
› 13:17
› Сообщение #
Slon, при добавлении нескольких точек, группа передвигается в крайнюю указанную в скрипте.
Я добавил замер от группы до позиции Gr0 = createGroup EAST; Mesto1 = getPos dp1; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; "O_Soldier_GL_F" createUnit [Mesto1, Gr0, ""]; ~1 (units Gr0) doMove (position pr1); Gr0 setBehaviour "AWARE" @(units Gr0) distance (position pr1) <30; ~1 (units Gr0) doMove (position pr2); как это было сделано в DEX. но работать отказывается. Знаки и имена я по разному менял. @units Gr0 distance position pr1 <30 @(Gr0) distance (position pr1) <30 @(Gr0) distance position pr1 <30 и т.д. но работать не хочет. В чём я не прав? |
| |||
Чат сайта |