Модератор форума: GUNNER161, Panikaha |
Форум » РЕДАКТОР - ArmA 3 » Вопрос - ответ » Тема для небольших вопросов по Arma 3 (взаимопомощь в режиме вопрос-ответ) |
Тема для небольших вопросов по Arma 3 |
› Воскресенье
› 27.03.2016
› 10:21
› Сообщение #
Подскажите есть ли в арма 3 модули (и как их настроить) или готовые скрипты скрывающих, убирающий\скрывающий группы солдат по условию, и возвращающий по другому условию.
Пред история такова что движок не тянет много солдат приходится компромисить. Хочу блок посты, охранные группы в поселениях скрывать\убирать если в радиусе 400 м. от них нет врагов, и вытаскивать всю группу назад когда противник вошел за радиус взаимодействия 400м. |
› Воскресенье
› 27.03.2016
› 16:26
› Сообщение #
AleksSan, а почему бы не сделать по-другому: создавать группировку по приближении и удалять при отдалении?
В скрипте создаются объекты (солдаты в том числе), каждый записывается в массив, а потом при ненадобности массив целиком удаляется. Я так делал для своего мебелирования. Можно расставить маркеры в селениях - для проверки дистанции, и каждому привязать свой скрипт. Работы много:) |
› Воскресенье
› 27.03.2016
› 20:11
› Сообщение #
Надеялся что и БИС уже есть готовые модули на это дело. А можно пример кода как сохранить данные о группе (тип юнитов, их состав, вооружение) в массив? Для начала хочу попробовать реализовать идею DAC в упрощеном виде (под Арма 1 - 2 набор скриптов, но они тяжеловесны) Когда в безопасном в радиусе 400м из группы остается пара юнитов которые движутся по своим путям вейпоинтам или стоят на блокпосту, а если вражина подойдет ближе чем 400м то из массива востановится первоначальный состав той группы. Соответствено вражеская группа приблизившись тоже из двух юнитов разрастется до полноценной. Здесь центрами отсчета будут лидеры групп, а не маркеры в ключевых местах или поселках, что добавит гибкости при сохранении кажущейся масштабности.
|
› Воскресенье
› 27.03.2016
› 20:14
› Сообщение #
AleksSan, Возможно есть готовые модули, только нет людей знакомых с этими модулями.
можеш попробывать сам разобраться https://community.bistudio.com/wiki/Category:Arma_3:_Functions |
› Воскресенье
› 27.03.2016
› 21:47
› Сообщение #
AleksSan, тоже вариант, но надо прежде четко уяснить, что именно требуется и чем будут группы заниматься. Если кто-то остается топать по своим ВП, то это постоянная сотня (или сколько там НП на острове) юнитов и сотня групп. Плюс временно добавляемые внутри этих 400м.
А если всю группу перебьешь, тогда как? ВП похерятся. Со статичными проще, их можно спавнить вместе с объектами. Сохранять в массив каждого, тип и вооружение задается при спавне. Если надо нестандартное, то вооружение оформлять скриптом и запускать его на юните _sol1 = _grp createUnit ["B_Soldier_F", [X,X,Z], [], 0, "CAN_COLLIDE"]; _s = [_sol1] execVM "weapon\w_sol1.sqf"; _sol1 setdir 0; _ms set [count _ms, _sol1]; Но сначала - анализ хотелок. Интересно будет посмотреть на критерий вхождения в зону каждого из лидеров групп. Такой нехилый switch с сотней case |
› Понедельник
› 28.03.2016
› 00:12
› Сообщение #
Цитата Но сначала - анализ хотелок. Пока с простого к сложному. Каждой группе присвоен свой массив. Выглядет так: GrupEast1 (группа east с 1 командиром, 1 гранатаметчиком, 2 пулеметчиками, снайпером, медиком) Группа должна пройтись из пункта А в пункт Б. В этом промежутке все спокойно, враги далеко, можно большую часть отряда за невостребованностью убрать в виртуал. То есть оставить группу из командира и гранатометчика, а пулеметчиков снайпера и медика записать в массив и удалить. В этом и вопрос как? Хотя бы минимум, без учета боеприпасов, только состав. Придя в пункт Б, из массива должен считаться полный состав группы и востановиться с штатным оружием для данного класса юнита. |
› Понедельник
› 28.03.2016
› 15:48
› Сообщение #
Зачем оставлять двоих? Одного вполне достаточно
_ms = units _grp; _msdel = _ms - [leader _grp] если уж хочется двоих, то вычесть еще и units _grp select 1 {deletevehicle _x} foreach _msdel; затем восстановить for "_i" from 0 to (count _msdel -1) do { _sol1 = _grp createUnit [typeof (_msdel select _i), [position leader _grp], [], 0, "CAN_COLLIDE"]; }; Последнее - чисто теоретически. Проверять надо После прихода в Б группа остановится? То есть это все одноразовое. Было бы проще спавнить группы целиком и приклеивать к ним bis_fnc_taskpatrol. А там пусть сами, как получится. |
› Вторник
› 29.03.2016
› 19:46
› Сообщение #
|
› Среда
› 30.03.2016
› 00:55
› Сообщение #
Цитата Последнее - чисто теоретически. Проверять надо Оставил в коде только по существу. Для теста создается группа, через 5 секунд удаляется все юниты кроме первых двух. И еще через 5 сек удаленные должны в полном составе восстановиться. Но они не появляются. Как будто после удаления солдат переменная _msdel тоже обнуляется. Добавил созданной группе солдата гранатометчика на которого игрок может переключится и на которого не срабатывает команда удаления. Так вот на этого юнита при восстановлении создается его клон гранатометчик, остальные нет. Код grupawest1 = [getmarkerPos "poz", WEST, ["B_Soldier_TL_F", "B_Soldier_GL_F", "B_HeavyGunner_F", "B_Soldier_M_F", "B_Soldier_F"]] call BIS_fnc_spawnGroup; "B_Soldier_LAT_F" createUnit [getmarkerPos "poz", grupawest1, "addSwitchableUnit this", 1]; sleep 5; _ms = units grupawest1; _msdel = _ms - [units grupawest1 select 0, units grupawest1 select 1]; {deletevehicle _x} foreach _msdel; sleep 5; for "_i" from 1 to (count _msdel - 2) do { _sol1 = grupawest1 createUnit [typeof (_msdel select _i), position leader grupawest1, [], 0, "CAN_COLLIDE"]; }; |
› Среда
› 30.03.2016
› 08:02
› Сообщение #
{deletevehicle _x} foreach _msdel;
.......... [typeof (_msdel select _i) Если ты всё удалил, тип чего ты пытаешся определить? сделай неудаляемый массив, из него создавай и востанавливай _ms = ["B_Soldier_TL_F", "B_Soldier_GL_F", "B_HeavyGunner_F", "B_Soldier_M_F", "B_Soldier_F"]; grupawest1 = [getmarkerPos "poz", WEST, _ms] call BIS_fnc_spawnGroup; .......... for "_i" from 2 to (count _ms) - 1 do { _sol1 = grupawest1 createUnit [ _ms select _i, |
› Четверг
› 31.03.2016
› 00:42
› Сообщение #
Цитата неудаляемый массив, из него создавай и востанавливай Да такой вариант действенным оказался. Только восстанавливается юниты в полном составе из стартового массива солдат. А хотелось бы правдоподобнее, что бы поредевшая в стычках группа, в безопасной зоне уменьшалась с сохранением в массив текущего состава группы. Делаю так, что присваиваю переменную уменьшившейся в боях группе на текущий момент msgrupa = units grupawest1; Потом делаю копию массива из units grupawest1 mscopy = [] + msgrupa Но почему то из массива mscopy не восстанавливаются юниты. |
› Четверг
› 31.03.2016
› 00:56
› Сообщение #
странная конструкция. Копия делается просто присвоением переменной. mscopy = msgrupa
|
› Четверг
› 31.03.2016
› 05:42
› Сообщение #
Потому что в массиве ты сохраняеш Объекты
msgrupa = units grupawest1; а потом их удаляеш, и массив оказывается пустой для восстановления группы, нужны не Объекты а их названия. _ms = units grupawest1; // массив объектов _msdel = []; // массив названий для востановления { _msdel set [count _msdel, typeOf _x]; deletevehicle _x } foreach _ms; .......... for "_i" from 2 to (count _msdel) - 1 do { _sol1 = grupawest1 createUnit [ _msdel select _i, |
› Пятница
› 01.04.2016
› 00:24
› Сообщение #
Цитата странная конструкция. Копия делается просто присвоением переменной. mscopy = msgrupa Вот тут написано про проблемы такого копирования https://arma3.ru/forums/topic/1678-uroki-po-skriptopisaniiu/ Цитата если вы присваиваете значения одного массива другому, навроде _array2=_array1, вы не создаёте независимый массив _array2, но создаёте ссылку на _array1. Если после этого вы меняете каким-либо образом _array2, те же изменения произойдут и в _array1. И если бы на этом всё заканчивалось, но нет же! Если вы передадите _array1 в какую-либо функцию, как параметр, а внутри функции присвоите его значения массиву _array2, то изменения в _array2 будут и в этом случае влиять на _array1. _array1 = [1,2,3]; _array2 = _array1; _array2 set [2,0]; //_array1 равен [1,2,0] Во избежание сего конфуза вы можете добавить или вычесть пустой массив из оригинального массива, затем присвоить результат вашему новому создаваемому массиву, или исопользовать оператор +, который создаёт копию массива, а не создаёт ссылки на оригинальный массив. Хорошенько запомните это, поскольку это спасёт вас от вырывания волос на собственной голове (или спине - кто уж откуда вырывает) при отлаживании скриптов. Slon, Спасибо удаление\восстановление работает как и хотел, но всплыл нюанс. При _ms = units grupawest1; недавно убитые но еще не осознанные группой (проходит до минуты пока лидер не скажет в общем канале что кто то из группы погиб) записываются как живые в массив. Сделал запись на только живых _ms = {alive _x} units grupawest1; выходит ошибка. |
› Пятница
› 01.04.2016
› 19:07
› Сообщение #
Доброго времени суток! Ребят, помогите пожалуйста решить неприятность. Нужно замедлить открывание дверей в здании (типо открываешь что бы ни кто не услышал). Какими командами это делается? Я так понимаю, нужно замедлить саму анимацию открывания или время открывания. Вобщем не знаю. Выручайте братцы!
|
| |||
Чат сайта |