Модератор форума: GUNNER161, Panikaha |
Форум РЕДАКТОР - ArmA 3 Скрипты Виртуальный противник (Создание управляющей программы для боевых действий) |
Виртуальный противник |
› Четверг
› 30.10.2014
› 14:16
› Сообщение #
тем временем,маневровая группа незаметно продвигается на один из его флангов или в тыл ![]() А "рубеж атаки" - очень хорошее понятие. Очень часто боты затевают пострелушки на 300-400м на открытой местности.. сам при этом мало что видишь, не говоря про попасть. Я в таких случаях ныкаюсь за камнями и ухожу курить:) А вот если часть группы, перемещаясь чуть в сторону, сократит это расстояние, тогда огонь будет эффективнее. Ну да, позиция лидера подходяща. Для маневровой - 90 град вправо-влево от вектора атаки (проще - вектора, соединяющего лидеров враждебных групп) Соотношение для атаки - ну хотя бы 1:2. Причем количество врагов вычислять исключительно по knowsabout. Спрятанная за складками местности засадная группа с not_fire может здорово похерить это наступление Черт, какая-то тактика пошла:) Вообще на эти темы можешь пролистать Клаузевица. Пусть и устаревшее, но кое-что там есть. |
› Четверг
› 30.10.2014
› 16:15
› Сообщение #
Цитата Маневровая - та, которой это удобнее будет. Тогда, согласен, нечего "маневровую тащить из центра на фланг под огнем". По поводу координат лидера. Я думаю, что в реальном бою сложно определить где командир отделения противника. Т.е. объектом атаки следует считать скорее позиции противника (или занимаемую территорию), чем изменчивые координаты вражеского лидера. С другой стороны, если мы хотим добиться обратной связи от работы скрипта, то нужно определить возможное изменение тактической ситуации (баланс сил, изменение кол-ва известных целей групп) и реакцию на них (изменение точек перемещения огневых групп). Опять же, с каким интервалом считывать тактическую информацию? По поводу knousAbout. Есть чудная команда countEnemy. По описанию она возвращает число известных врагов в заданном массиве. А т.к. тактическую информацию мы считываем в виде чисел (количества бойцов), то, в сочетании таинственной targetsQuery, я думаю, будет самое то. Добавлено (30.10.2014, 16:15) |
› Четверг
› 30.10.2014
› 20:52
› Сообщение #
Смотря тему ко мне пришла идея создания скрипта атаки города(имено атаки не обороны).
Как я все ето вижу срипт в котором автор мисии задайот массивы пехоты ,танков ,бтр артилерии ну и город маркером с радиусом или аналогичным тригером. Атака будет производится в три стадии . 1. обстрел города артой (если такова имеется) ,подступ отрядов пехоты и бронетехники занятия бронетехнекой и снайпами высот (но здесь проблема поскольку я не нашол функции для вычесленея высот относительно уровня моря водить их или вручную или сам незнаю). 2. после подступа отрядов "ближнего боя" к рубежам обстрела арты артелерия замолкает и используестся только по команде ком. отделений (чтото я видел в скрипте индейца ) но только при условии чото арта не зацепит своих тоесть установить проверку на растояния цели арты до своих.броня получает инфу от пехоты и тоже стреляет по врагам из высоты (ето можно и без команды просто передавая инфу танки стреляют на большое растояния и так). 3. пехота подошла к центру города и начинается зачиста бронетехника входид в город и начинает зачистку арта отключчается . ну что скажете стоит вобще за ето братся? |
› Четверг
› 30.10.2014
› 22:03
› Сообщение #
palch210, это игра. Захотел поиграть - играй. В принципе, имея терпение, здесь можно создать все что угодно. Я не имею военного образования, поэтому пробую воссоздать действия бойцов по реальным правилам (устав, рекомендации ит.д.). Правда, я не встречал чтобы были какие-то правила по обстрелу городов. Может это исключить? Хотя, если играть за пиндосов... Но у них своя организация военных действий. Я встречал в нете несколько раз их приемы по тактике, но специально не отбирал. Насколько я помню главный их девиз: "Не посылать солдат туда, куда можно послать ракету или снаряд". Почитай специальную литературу, если будут какие-то логические наброски - буду рад обсудить.
|
› Четверг
› 30.10.2014
› 22:32
› Сообщение #
Индеец,
Цитата "Не посылать солдат туда, куда можно послать ракету или снаряд" |
› Вторник
› 04.11.2014
› 21:34
› Сообщение #
palch210, у меня нет опыта в программировании. По указанию целей постараюсь помочь, но позже - нужно отлучиться на время.
Добавлено (04.11.2014, 21:34) Цитата по скрипту передачи информации по целям... Начну, как мы все славяне любим, через другое место. С конца: артиллерия стреляет по цели. Для этого я использовал команду commandArtilleryFire, для которой необходимо знать:
Согласно вопросу, ясен пень, нам прежде всего интересно знать координаты обстрела. А т.к. артиллерию мы используем вне прямой видимости цели (наверное), то нам нужен кто-то, кто эти координаты знает. Пусть это будет корректировщик той же стороны, что и артиллерия, хотя это может быть любой живой юнит (даже животное какое-нибудь). Спросить о известных целях у корректировщика мы можем разными командами. Как правило все они возвращают список массивов с характеристиками окружающих объектов (попробуйте правильно прочитать и понять написанное - я потратил несколько минут, чтобы это написать). Ниже приведены несколько команд с возвращаемыми ими массивами. targetsQuery - [какое-то число (не разобрался), имя, сторона, тип, координаты, игровое время обнаружения], nearTargets - [координаты, тип, сторона, стоимость (не разобрался), ID, точность определения], nearestObjets - [имя], nearestObjet - [имя] . Из полученной информации нужно выделить противника. Каждая команда имеет свои особенности написания, но суть сводится к одному: получить координаты. Получив их мы записываем их в commandArtilleryFire и получаем обстрел противника. Т.е. артиллерия будет стрелять по целям, известным корректировщику. Но и это не все. Если нужно просто передать какому-нибудь юниту или группе информацию о цели, я пользуюсь командой reveal. Пример есть в скриптах обороны. Вот так, сначала пространно порассуждав о разнообразии команд Armы, в конце сообщения ответил на вопрос по сути в одном предложении. Все как я люблю. P.S. Прочитал сам, и понял - "Сильному это не нужно, слабому - не поможет". |
› Вторник
› 04.11.2014
› 21:54
› Сообщение #
Индеец, спасибо за ответ ну з простыми командами типа командартилери я разобрался, а насчет таких передающих спасиба пояснил я впрынципи берусь за разработку надеюсь осилю
|
› Вторник
› 11.11.2014
› 13:20
› Сообщение #
Кому интересно привожу отчет о проделанной работе.
Порылся в литературе, для себя уяснил: атака - дело сложное. Сразу возникли проблемы с определением объект атаки. Потратив время нашел: Цитатаобъектоматакиявляется противникв окопах или других фортификационных сооружениях опорного пункта, атакже отдельно расположенные на направлении наступления танки, орудия, пулеметы и другие огневые средства противника. Т.е. координаты атаки - это изменчивые координаты противника. Тем более, что: Цитатав ходе выдвижения к переднему краю противника (сближении с противником), указанные задачи через каждые 50-100 м могут уточняться или ставиться заново (с учетом характера действий противника, потерь в л\с, и т.д.); Т.е. при атаке координаты объекта атаки уточняются каждые 30-60 сек. Если опустить детали, то атака мотострелкового отделения происходит следующим образом: во-первых отделение атакует в составе взвода; во-вторых атака поддерживается и сопровождается артиллерией и танками. Сначала отделение выдвигается на свою позицию обороны,затем производится артобстрел ближайших позиций противника, затем в ход идут танки, за танками на удалении 300м цепью выдвигается л/с отделения, и уже за ним (или в строю) - БМП. При этом артиллерией создается опережающий огненный вал, сопровождающий наступление. Не знаю будет ли интересно применение подобной тактике в Armе, но я решил все-таки плотнее заняться отделением. По написанному отделение наступает на участке фронтом 100 м. Боевые группы создаются Цитата "Для ведения боя в траншеях,ходах сообщения, в лесу, в горах, при выполнении задач в глубине обороны противника и в других случаях, а также для лучшего взаимодействия в отделении..." В принципе для Алтиса или, тем более, Стратиса (с его пересеченной местностью) эта тактика подходит. Как я уже писал, передвижение отделения по полю боя происходит уступами. Т.е. сначала передвигается одна группа, за ней - другая и т.д. В принципе такое передвижение организовать возможно: определить маршрутные точки для групп и чередовать их. НО нам-то интересна обратная связь, т.е. последующее действие (перемещение) нашего отделения вытекает из реакции противника на первое действие (перемещение) нашего отделения. Каким образом считывать эту обратную связь с противника? Если определять количество известных лидеру группы целей, то есть недостаток - фронт атаки небольшой, и лидеры групп знают о всех врагах на участке атаки отделения. Если ввести на позиции противника "зоны ответственности" для групп и по ним считывать количество врагов, то если в зоне №1 будет наименьшее кол-во врагов и атаку начнет соответственно группа №1, то из-за малого расстояния огонь по наступающим может идти и из зоны №2. И тогда атакующая группа будет уничтожена подавляющим огнем. Каким образом определить интерес врагов к какой либо группе? Знают они обо всех атакующих, так что knousAbout не подойдет, определить цель каждого врага - слишком затратно. Есть ли способ определить плотность огня по атакующей группе? Если эти вопросы решить, то появляется возможность создать скрипт передвижения отделения в котором: - отделение принудительно разбивается на группы, - для групп назначаются точки перемещения (тип, поведение, скорость и т.д.), - группа с наименьшей плотностью огня передвигается, с наибольшей - залегает, - при достижении 30м от противника группа бросает дымовые гранаты, 20м - РГД, - при уничтожении противника в своей "зоне ответственности", группа атакует соседнюю "зону", - при уничтожении всех врагов группы снова объединяются в одну (отделение). Добавлено (11.11.2014, 13:20) |
› Вторник
› 11.11.2014
› 14:53
› Сообщение #
Индеец, воплощение описанного будет напоминать битву под Москвой:)
Представь себе участок обороны, обычный для армы - пара сотен метров либо отдельные пункты вокруг города.. даже 1км фронта заставить юнитами-техникой укреплениями будет весьма затратно. А еще второй и третий эшелоны нужны. Потому как тот огневой вал выкосит все вокруг, и останется только пойти собрать трофеи:)ХЗ. Есть команда на suppressive fire, но она ничего не возвращает. Опять-таки банальным перебором и наличием критерия отбора (дистанция, кол-во врагов, опасные цели - пулемет\миномет\техника) |
› Среда
› 12.11.2014
› 22:23
› Сообщение #
Попробовал определить плотность огня.
Выделил всех людей в "зоне ответственности", определил у каждого текущее оружие, магазин и по ним определил массив типов пуль. Затем с помощью команды nearObjects определил список пуль в данный момент времени вокруг бойца. Кстати, как и описывает некто Katulobotomia, оказывается _unit nearObjects ["тип боеприпаса",50] не то же самое, что nearestObjects [_unit, ["тип боеприпаса"],50]. nearObjects - работает, nearestObjects - нет. Ну и, соответственно, определил количество пуль в данный момент времени. Заделал своему бойцу бессмертие, и, с мыслью "рвите твари комиссарское тело", вышел на вражескую группу. - И что? - спросите меня вы. - А то, - отвечу я, - что посекундный показатель количества пуль равен 1-2. И это при том, что враги патронов не жалели. Но из-за высокой скорости пули и мгновенного считывания, показатель слишком низкий. Рухнула моя идея. |
› Среда
› 12.11.2014
› 22:46
› Сообщение #
Индеец, а что если как-то использовать обработчик FiredNear, для определения плотности. Не думаю что такие ресурсоёмкие команды как nearObjects и nearObjects разумно использовать, тем более если использовать часто
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Четверг
› 13.11.2014
› 10:12
› Сообщение #
ZoRRo, попробовал - да, так лучше. Но есть нерешенный вопрос. По идее, определение плотности огня должно происходить в цикле. А мне, что бы считать информацию FiredNear для дальнейшего использования, нужно водить глобальные переменные. Я не очень хорошо знаком с private, setVariable и т.д. (да что там "не очень хорошо", не знаком вообще), можно ли обойтись без ввода глобальной переменной?
|
› Четверг
› 13.11.2014
› 11:48
› Сообщение #
Индеец,
private - отвечает за пространство имен внутри скрипта, здесь это тебе вряд ли нужно. setVariable - записывает переменную в сам объект - может пригодиться. Но для этого тебе нужно подобрать подходящий объект. Это не обязательно должен быть "юнит". Можно записать в: Control, Group, Namespace, Task, Location, Trigger. Пример: Код _object setVariable ["var", _var]; //запись _var = _object getVariable "var"; //чтение
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
› Четверг
› 13.11.2014
› 12:41
› Сообщение #
Нужно разбираться. По сути:
У меня определены типы боеприпасов в массиве. Через определенные промежутки времени я запускаю EventHandler, и в нем мне нужно сравнить выявленный боеприпас с элементами моего массива, и если пуля - вражеская, то увеличить счетчик. Это все, как я понимаю происходит во внутреннем коде EventHandler. Но показания счетчика мне нужны во внешнем скрипте, на их основании будут строиться дальнейшие команды. Как тут может помочь setVariable? Пока задаю счетчик и массив вражеских пуль в глобальных переменных, но как-то выглядит коряво. Вот что есть:Спойлер// боец _unit = _this select 0; // сторона отделения _side = side _unit; // название отделения _group = group _unit; // состав отделения _units = units _group; // командир отделения _leader = leader _group; _target = _this select 1; // ОПРЕДЕЛЯЕМ ДЛЯ ГРУПП НАПРАВЛЕНИЕ АТАКИ // определяем центры "зон ответственности" для групп _centerGroup0 = _target modelToWorld [ 0,0,getPos _target select 2]; // составляем списки всех людей, попавших в "зоны ответственности" _list = _centerGroup0 nearEntities [["Man"], 25]; // определяем количество врагов в списке _numberEnemy0 = _leader CountEnemy _list; // список типов пуль, используемых врагом _bullets = []; { // класс основного оружия врага _weaponClass = currentWeapon _x; // класс обоймы, используемой врагом _magazineClass = currentMagazine _x; // по классу обоймы определяем тип боеприпаса _bullet = getText (configFile >> "cfgMagazines" >> _magazineClass >> "ammo"); // если количество патронов в оружии больше или равно 30 if (((_x ammo _weaponClass) >= 30) // и тип боеприпаса не состоит в списке типов пуль and !(_bullet in _bullets)) // то добавить его в список типов пуль врага then {_bullets set [count _bullets, _bullet]}; //для всех людей, попавших в "зоны ответственности" } forEach _list; _test = - код, который будем использовать в дальнейшем для определения плотности огня { bullet = _bullets; - вот тут первая глобальная переменная (список вражеских пуль) n = 0;- вот тут вторая глобальная переменная (счетчик) _in = _leader addEventHandler ["FiredNear", { _butch = _this select 6; // определение типа пули if (_butch in bullet) then {n = n + 1}; // если тип пули есть в списке вражеских пуль, то пополнить счетчик }]; sleep 10; // период цикла _leader removeEventHandler ["FiredNear", _in]; hint str n; }; далее хватаем n и работаем с ней. |
› Четверг
› 13.11.2014
› 13:22
› Сообщение #
Индеец, Не согласен с логикой, по мне так нужно все пересмотреть. Что значит "вражеская пуля" ? А что если юнит использует трофейное оружие? А что если в потенциальной миссии будут использоваться аддоны с оружием, у которых совершенно другие боеприпасы? Почему нельзя "плясать" от стороны юнита использующего оружие?
Нужно составить алгоритм так, чтобы не было никакой привязки к конкретным "сущностям"
Cтруктуры данных важнее кода!
Список команд | Список оружия | Список техники | Список юнитов | Список объектов Armstalker Online |
| |||
Чат сайта |