Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Виртуальный противник (Создание управляющей программы для боевых действий) |
Виртуальный противник |
› Четверг
› 13.11.2014
› 14:02
› Сообщение #
А дистанция между ловцом пуль и стрелком? Та, которая _this select 2 должна быть. Дефолтная? Сколько это? Если мало, то стреляющий вне диапазона учитываться не будет, если много, то посчитаются вообще все стреляющие враги в зоне
Ну разве что вышесказанное относится к группе целиком, причем расстояние между группами сравнимо по величине с зоной ловли пуль |
› Четверг
› 13.11.2014
› 14:50
› Сообщение #
andrucio,
Цитата А дистанция между ловцом пуль и стрелком? Та, которая _this select 2 должна быть. ZoRRo, даже если используются другие аддоны или трофейное оружие, тип оружия определяется у тех юнитов, которые попадают в эти чертовы "зоны". Но предложи свой вариант. Любой логический прием интересен. Как определить тип оружия противной (в смысле вражеской) стороны? |
› Четверг
› 13.11.2014
› 19:18
› Сообщение #
Ну это и есть как бы радиус.. от имеющего ЕХ до стреляющего (Triggered when a weapon is fired somewhere near the unit or vehicle.)
Только такая штука: Цитата distance: Number - Distance in meters between the unit and firer (max. distance ~69m) Я у себя в кампании использовал такую конструкцию: Здесь просто fired. юниты группы caravan идут по своим делам и реагируют только на выстрел игрока ближе 200м А тип оружия исходя из side unit == enemy и typeOf primary weapon unit Сообщение отредактировал andrucio - Четверг, 13.11.2014, 19:20
|
› Четверг
› 13.11.2014
› 20:46
› Сообщение #
Если вдруг мало теоретики)))
http://masters.donntu.edu.ua/2013/fknt/ilkun/library/ii.htm |
› Четверг
› 13.11.2014
› 21:07
› Сообщение #
NearFired здесь действительно не прокатит из-за дурацкого ограничения ~69m
Не совсем то, но тем не менее вариант: 1. Всем юнитам ставится обработчик Fired; 2. При выстреле берётся позиция назначения пули 3. Проходя по всем юнитам циклом сравнивается дистанция до позиции пули, и если она < определённого радиуса, юниту записывается +1, т.е по его району стреляют) 4. У каждого юнита есть такой показатель, записываемый с помощью setVariable 5. После чтения переменной её необходимо ставить в nil Код //радиус внутри которого считывается плотность огня (у меня так для удобства, можно зашить в код) denRadius = 30; { { _ehIndex = _x addEventHandler ["Fired", { _this spawn { private ["_last_pos"]; _unit = _this select 0; _bullet = _this select 6; //высчитывается позиция пули while{(getPosATL _bullet) select 0 > 0}do{_last_pos = getPosATL _bullet; sleep 0.01}; //проходя по всем юнитам увеличивается счетчик если надо { { if(_x distance _last_pos <= denRadius)then{ if(isNil {_x getVariable "densityFire"})then{_x setVariable ["densityFire", 0]}; _x setVariable ["densityFire", (_x getVariable "densityFire") + 1]; }; } foreach units _x; } foreach allGroups; }; }]; } foreach (units _x); }foreach allGroups;
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Четверг
› 13.11.2014
› 23:07
› Сообщение #
ААААА - чуть жбан не лопнул!
andrucio, у тебя: Цитатаplayer addEventHandler ["fired", {shooter=_this select 0}]; sleep 1; if ({player distance _x < 200} count (units caravan)>0 and shooter==player) Т.е. sooter работает и вне кода обработчика? Это радует. Я то думал, что из скобок ничего вытянуть нельзя - "век живи - век учись!". alex70-03, что-то высоко я замахнулся. ZoRRo, сейчас нет времени разбираться. Может что-то пригодится. Но, думаю, лучше считывать информацию с троих лидеров групп, чем со всех бойцов вообще. Да и пригодится еще NearFired на конечном этапе атаки. Может, действительно, плюнуть на все и наступление вести подсчитывая количество врагов, а в конце врубил NearFired, и ну морочить врагов залеганием и внезапными атаками? Тем более, что наступление идет в открытую (враги знают количество атакующих). Тут важен маневр, а он должен определяться несколькими факторами. Эти факторы и хотелось бы определить. Один из них - плотность огня, другой - количество врагов, может еще есть какие? |
› Четверг
› 13.11.2014
› 23:20
› Сообщение #
Индеец, надеюсь найдешь что полезное. Я всем ставил обработчик чтобы не заморачиваться, так сказать от общего к частному, от простого к сложному. По идее конечно надо смотреть от лидера группы, ведь он принимает решения. И еще, думаю что будет лишним на начальном этапе влиять на поведение юнита, т.е положение его, куда ему смотреть, о чём ему думать (если у тебя такое в планах). Это уже описано в его логике бисами, могут возникнуть конфликты. Пока просто стоит ограничится behaviour`ом группы, и маршрутными точками.
Насчет тактики, конечно же ещё нужно определить примерное направление врага относительно группы, чтобы определять наиболее подходящие тактические маневры.
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Четверг
› 13.11.2014
› 23:48
› Сообщение #
Цитата нужно определить примерное направление врага относительно группы Тут мне нужно полистать геометрию. Цитата наиболее подходящие тактические маневры А вот тут тактику. |
› Пятница
› 14.11.2014
› 13:16
› Сообщение #
Индеец, скажу больше - доступна и в другом скрипте:) это же глобальная переменная внутри обычного кода.
У NearFired слишком маленький радиус действия, максимум для боя в городе. Насчет плотности - ты говорил, что пробовал считать. Секунда - мало в любом случае, а если поставить 5? Это может получиться уже 10 пуль за время, а 10 гораздо проще сравнивать с пятью или двумя случайными:) |
› Пятница
› 14.11.2014
› 13:32
› Сообщение #
andrucio, да, считать пробовал. Носился своим Кащеем, считал пули. Так вот, что 10 врагов стреляет, что 1 - разница небольшая. Пробовал увеличить время подсчета, радиус обнаружения - некоторые враги перезаряжают оружие, теряют время, но самое главное в nearObjects - наличие пуль считывается в одно мгновение. Эта команда не отражает плотность огня по позиции бойца. Вот EventHandler - другое дело, цифры совсем другие. Нужно с ним дружить.
О маневрах: их при атаке всего два. Обход (удар с фланга) и охват (выход по флангу в тыл). Теперь нужно определить условия выбора. О факторах, влияющих на маневр - наличие тяжелого вооружения в обороне (доты, БМП, танки). |
› Суббота
› 15.11.2014
› 06:51
› Сообщение #
"Охват - маневр, осуществляемый подразделениями в целях выхода для удара во фланг противнику. Обход - более глубокий маневр, совершаемый подразделениями для удара по противнику с тыла. Охват осуществляется в тесном тактическом и огневом взаимодействии, обход - в тактическом взаимодействии с войсками, наступающими с фронта, а иногда и с тактическим воздушным десантом. Отход - маневр, применяемый в целях вывода своих войск изпод ударов превосходящих сил противника, выигрыша времени и занятия более выгодного рубежа (района)"
Охват - сравнительно небольшая дистанция до противника, и условие контакта Обход - насколько я понимаю, чисто коллективный маневр. Может быть реализован при наличии минимум 2х отрядов. Тут уже нужна полноценная система координаций между отрядами. И передача информации о местоположении обнаруженного противника, а так же её обновления. Отход - без определения плотности вражеского огня здесь не обойтись. Так же потребуется определить основное направление врага, чтобы иметь возможность проверки собственно удался маневр или нет (есть вроде команда такая formationDirection может быть в А3 добавлено что то ещё для работы с группами - не знаю). Не совсем уверен, но думаю что маневр нужно делать без палева: сначала отход, затем в режиме стелса потихоньку не спеша - маневр. Иначе они просто превратятся в бегающие мишени для врага. Добавлено (15.11.2014, 00:56) Добавлено (15.11.2014, 06:51)
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Суббота
› 15.11.2014
› 10:22
› Сообщение #
|
› Суббота
› 15.11.2014
› 18:49
› Сообщение #
alex70-03, влезу с советами, посмотри knowsAbout, особенно комментарии. Там таблица есть, описывающая зависимость коэффициента знания о цели от расстояния и времени суток. Насчет слуха - ни разу не встречал какой-либо команды, имеющей к нему отношения.
ZoRRo, как определить когда нужно произвести обход, а когда охват? Как я вижу наше действо: Отделение идет походным порядком - колонной. Получает приказ о координатах наступления. Вот тут щекотливый момент. Как я понял цель атаки - занять определенную территорию, освободив ее от противника. Поэтому, предлагаю определить цель наступления как позиция. Отделение развертывается в предбоевой порядок: три колонны, м-ду ними 50-70 м (лучше 50 для Armы). На какой-то дистанции (на какой?) отделение перестраивается в боевой порядок: три группы - в линию. Отделение не знает о противнике, сколько его, места концентрации. Наступает момент, когда нужно определить: когда принимать решение о способе атаки (по дистанции, по количеству видимых целей или еще как-то). Пускай мы определили, что наименьшее количество врагов - на левом фланге. Тогда: правая группа выдвигается вперед (насколько?), открывает (подавляющий?)огонь по противнику и залегает (отходит?). Тем временем левая группа скрытно смещается влево (насколько?), заходит противнику во фланг (или в тыл - тоже нужно определить) и начинает сближение с противником. Как ответные перемещения противника могут изменить план действий? Предлагаю определить ближайшего врага к лидеру атакующей группы, через него узнать имя его командира и степень его знания о лидере атакующей группы. По степени знания определить позу атакующей группы: стоя, пригнувшись или лежа. При достижении какой-либо из групп 70 м рубежа - бойцы группы бросают в противника дымовые гранаты, 30 м рубежа - РГД. Если 70 м рубеж достигли две группы, начинается самое интересное. Каждому из лидеров групп прикручиваем EventHandler, и по плотности огня определяем какая из групп передвигается, а какая залегает в обороне. Тут степень знания уже не имеет значения: противник выяснил количество атакующих и теперь важно куда он стреляет. Передвижение атакующих корректируется на позицию лидера вражеской группы, а при отсутствии таковой (вражеская группа уничтожена) - на первоначальную позицию атаки. Т.е. атакующие группы будут гоняться за врагами, пока не перебьют всех, известных на начало атаки, а затем займут нужную позицию. Отход еще нужно продумывать. |
› Воскресенье
› 16.11.2014
› 14:40
› Сообщение #
Цитата Вот тут щекотливый момент. Как я понял цель атаки - занять определенную территорию, освободив ее от противника. Поэтому, предлагаю определить цель наступления как позиция. Цитата Как ответные перемещения противника могут изменить план действий? Предлагаю определить ближайшего врага к лидеру атакующей группы, через него узнать имя его командира и степень его знания о лидере атакующей группы В общем попробуй что-то реализовать, какую-то основу. Главное не тони пока в деталях. Тебе в помощь описал небольшую функцию, которая поможет в определении флангов и тыла, исходя из азимута и позиции. Код getRelativePos = { /* Description: Return position at _distance and _position of the incoming _azimuth. If argument _direction is specified, the position will be relative to the _direction Syntax: [position, azimut, distance, (direction)] call getRelativePos position: array azimut: number distance: number direction: number (optional) Return: array */ private ["_position", "_azimut", "_distance", "_direction"]; _position = _this select 0; _azimut = _this select 1; _distance = _this select 2; if(!isNil {_this select 3})then{_azimut = _azimut + (_this select 3)}; [(_position select 0)+_distance * sin(_azimut),(_position select 1)+_distance * cos(_azimut), _position select 2] }; Пример. Определить стартовую позицию для захода с левого фланга, исходя из текшей дистанции до цели Код _pos = [getPos _enemy, getDir _enemy, _enemy distance _leaderGroup, -90]
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Воскресенье
› 16.11.2014
› 18:45
› Сообщение #
ZoRRo, функцию хорошо бы запускать повторно для проверки, ибо враг в момент считывания может огибать препятствие, отползать и тп.. тогда getDir _enemy даст совершенно фееричный результат.
Индеец, а не хочешь прикрутить зависимость скилла юнита от времени суток? По идее, ночью падает меткость, но растет слух, да и в пнв угол обзора снижается прилично |
| |||
Чат сайта |