Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Вопрос - ответ Динамическое создание юнитов и добавление им вейпоинтов. (продолжение темы ARMA2 динамическое создание юнитов.) |
Динамическое создание юнитов и добавление им вейпоинтов. |
› Четверг
› 02.01.2014
› 14:21
› Сообщение #
distance работает либо с объектом, либо с массивом в формате позиции.. я сомневаюсь, что с группой заработает..
Можно попробовать взять одного члена группы ((units Gr0) select 0) - в данном случае командира |
› Четверг
› 02.01.2014
› 14:26
› Сообщение #
|
› Суббота
› 18.01.2014
› 02:40
› Сообщение #
В примере решил попробовать давать созданным группам уже протоптанные другой группой вейпоинты. Для этого создаю группу из одного гражданского и ему даю название группы gruppagr1, глобальной что бы значит было доступно в другом скрипте его вейпоинты.
Другой скрипт уже бесконечно генерирующий группы солдат которые должны бы бежать по тем вейпоинтам что у гражданского в первом скрипте. _group1 = [getmarkerPos "start", resistance, ["B_Soldier_TL_F", "B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; sleep 5; _group1 setCurrentWaypoint [gruppagr1, 1]}; Локальная группа _group1 не переходит на первый вейпоинт глобальной группы gruppagr1, стоят на месте и выводится сообщение об ошибке в этой строке. А в первом скрипте все нормально, гражданский бежит по данным ему вейпоинтам. |
› Суббота
› 18.01.2014
› 08:56
› Сообщение #
AleksSan, возможная причина в локальных группах. Два скрипта связываются между собой по глобальным именам. Сам недавно столкнулся с этой проблемой в который раз.
Локальные имена нужны только тогда, когда ты не хочешь их засвечивать в связи с другими скриптами. GRA1 = createGroup EAST; _Mesto1 = getPos start1_1; "O_Soldier_GL_F" createUnit [_Mesto1, GRA1, ""]; "O_Soldier_AAR_F" createUnit [_Mesto1, GRA1, ""]; "O_Soldier_A_F" createUnit [_Mesto1, GRA1, ""]; Место создание юнита локально. И аналогичные скрипты создают группы на позициях . Позиций может быть сколько угодно и им нужно давать разнообразные имена. Поставь Глобальную переменную, и позиция независимо от того что их много будет использоваться только одна, та которая была создана первой или работать некорректно. |
› Суббота
› 18.01.2014
› 11:06
› Сообщение #
AleksSan, Прежде чем активировать чужой маршрут надо его копировать
http://community.bistudio.com/wiki/copyWaypoints gruppagr1 copyWaypoints _group1 |
› Суббота
› 18.01.2014
› 23:22
› Сообщение #
засада какая то
_group1 = [getmarkerPos "start", resistance, ["B_Soldier_TL_F", "B_Soldier_TL_F", "B_Soldier_GL_F"]] call BIS_fnc_spawnGroup; gruppagr1 copyWaypoints _group1; _group1 setCurrentWaypoint [gruppagr1, 1]}; в строке где setCurrentWaypoint ошибка на этот раз. на всяк случай gruppagr1 и_group1 менял местами в этой строчке то же самое. |
› Воскресенье
› 19.01.2014
› 00:50
› Сообщение #
|
› Воскресенье
› 19.01.2014
› 01:54
› Сообщение #
Ох я слоупок и олень . Скопировал кусок кода с другого скрипта и прихватил закрывающие кавычки. Вот блин невнимательный, пойду биться ап стену. Спасибо теперь все работает.
|
› Воскресенье
› 19.01.2014
› 09:12
› Сообщение #
|
› Воскресенье
› 19.01.2014
› 14:21
› Сообщение #
Путем выяснилось что
_group1 setCurrentWaypoint [gruppagr1, 1]; не корректно хотя ошибка не выскакивает. _group1 setCurrentWaypoint [_group1 , 1]; так правильно. И еще вопрос можно ли удалить юнитов которые протоптали эти вейпоинты, но что бы их группа осталась. На карте у меня ни одного юнита, все создаются скриптом. И убивать\удалять этих юнитов нельзя так как с удалением их тел исчезают и их группы, а они нужны так как копируются в другие группы в процессе всей миссии. Сообщение отредактировал AleksSan - Воскресенье, 19.01.2014, 14:29
|
› Воскресенье
› 19.01.2014
› 14:34
› Сообщение #
|
› Воскресенье
› 19.01.2014
› 15:54
› Сообщение #
AleksSan,
deleteGroup _groupname а имя группы просто переназначь на другого бота и удаляй эту группу уже с [_x] join grpnull. Хотя я не понимаю, зачем группу присоединять к др группе, когда в первой группе, удалили всех ботов. |
› Понедельник
› 20.01.2014
› 02:14
› Сообщение #
Нее, из первой группы нужны только вейпоинты, вторые и последующие группы должны при рождении копировать себе эти вейпоинты. Иначе в скрипте создании новых групп, каждой еще создавать по новому массу вейпоинтов, а так код значительно сократиться, это будет строчки создания отряда, код копирования вейпоинтов этим отрядам и код заставляющий идти к примеру сразу к 15 поинту, а не бегать заного по зачищенным путям. Действительно излишне для 10 групп, но в моей масштабной пострелушке за 50 групп будет в течении миссии создано, поэтому ищу пути упрощения, и минимизации бесполезных юнитов.
Юнит с вероятностью появления = 0% не появляется и группа ему не присваивается, соответственно он не может стать группой от которой будут браться пути вейпоинтов. Нашел как вариант - поставить модуль "менеджер симуляции" (модуль который убирает солдат пока к нему не приблизятся вражеские солдаты на расстояние настраиваемое в модуле) этот модуль синхронизированый на ботов - родоначальников нескольких путей вейпоинтов, просто напросто отключает их и убирает с карты, при этом как группы они сохранены и годятся для копирования их поинтов, а сами юниты физически отсутствуют и не будут отвлекать на себя ресурсы. В рамках той же минимизации, какой код меньше будет грузить ресурсы процессора? В конце скрипта созданных отрядов стоит проверка жива ли вся группа. Есть на выбор два кода: WaitUntil {{!Alive _x} forEach units _group1}; и WaitUntil {count units _group1 < 1}; Сообщение отредактировал AleksSan - Понедельник, 20.01.2014, 02:22
|
› Понедельник
› 20.01.2014
› 10:35
› Сообщение #
|
› Вторник
› 21.01.2014
› 15:18
› Сообщение #
Продолжая унификацию создания групп, пришла идея держать резерв юнитов в тылу на базе, на случай если одна из групп в бою несет сильные потери к ней будут присоединены юниты с группы резерва. Для определения того что потери в группе из 12 солдат стали критичными (в живых осталось только 5 или менее) можно использовать данный код:
WaitUntil {count units _group1 < 6}; После После к группе можно присоединить другую группу с резерва но так не совсем удобно так как для нескольких групп нужно делать выборку кто доступен. Проще держать на базе одну большую группу в резерве которые будут патрулировать окресности тыла или тупо стоять. Когда в одной из нескольких групп в бою потребуются пополнение нужно взять с группы резерва только 4 юнита и присоединить его к другой группе. Как одну группу присоеденить к друго знаю, а вот как выбрать из группы только 4 юнита и присоеденить? |
| |||
Чат сайта |