| Модератор форума: GUNNER161, Panikaha |
| Форум РЕДАКТОР - ArmA 3 Скрипты Виртуальный противник (Создание управляющей программы для боевых действий) |
| Виртуальный противник |
› Понедельник
› 20.10.2014
› 00:50
› Сообщение # 16
andrucio, вот наваял Skill:
_unit = _this select 0; _squad = units group _unit; _kom = _squad select 0; _zam = _squad select 1; waitUntil {not alive _kom}; { _skill = skill _x; _x setSkill ["general", (_skill-0.2)]; } forEach _squad; waitUntil {not alive _zam}; { _skill = skill _x; _x setSkill ["general", (_skill-0.1)]; } forEach _squad; Тут: командира убили - полохо, зама - еще хуже. сначала зама убили - можно жить (есть же командир), потом убили командира - все плохо (зама ведь тоже нет). Как-то так. |
› Понедельник
› 20.10.2014
› 14:22
› Сообщение # 17
Ну тут уже смотреть надо, как интереснее будет - двухступенчатое нарастание вселенской тоски и уныния или же возможным скачком на 0.3.
И я бы менял не все скиллы скопом. |
› Четверг
› 23.10.2014
› 20:38
› Сообщение # 18
Уууууууууууууу в какие дебри я залез! Ситуация подвергается классификации, определяется боевая задача и способ ее выполнения, каждое движение бойца отдельно прописывается. На все это уйдет уйма времени и ресурсов ПК.
Но это - лирика. По сути: решил для определения важности цели создать систему накопления баллов. Частично это уже сделано: рейтинг (rating) юнита больше, чем выше его звание. Кроме того рейтинг выше у рядового-танка, чем у рядового-человека. Добавил добавление баллов, если цель имеет пулемет или снайперский прицел, и добавление баллов, согласно близости. // боец _unit = _this select 0; //бойцы отделения _squad = units group _unit; //лидер отделения _leader = leader group _unit; while {true} do { //резервируем массив целей _targets = []; _man = []; _tank = []; // список объектов, известных лидеру _objCOM = _leader targetsQuery ["", "", "", "", ""]; // ФИЛЬТР ПО ВРАЖДЕБНОСТИ { // если сторона объекта враждебна стороне лидера if ((_x select 2) getFriend (side _leader) < 0.6) // то добавить имя объекта в массив ЦЕЛИ then {_targets set [count _targets, (_x select 1)]}; } forEach _objCOM; // для всех известных объектов // резервируем массив баллов (кол-во элементов массива соответствует кол-ву элементов массива ЦЕЛИ _balls = []; _i = 0; _j = count _targets; while {_i < _j} do { _weaponsItems = weaponsItems (_targets select _i); // вооружение цели и обвес на нем _optics = (_weaponsItems select 0) select 3; //оптика основного оружия _ammo = ((_weaponsItems select 0) select 4) select 1; // кол-во патронов в используемой обойме // ФИЛЬТР ПО РЕЙТИНГУ // коэффициент рейтинга _Krat = rating (_targets select _i); // ФИЛЬТР ПО НАЛИЧИЮ ПУЛЕМЕТА //коэффициент пулеметчика _Kgun = 0; // если кол-во патронов в обойме меньше 30, то добавить 50 очков if (_ammo > 30) then {_Kgun = 50}; // ФИЛЬТР ПО НАЛИЧИЮ СНАЙПЕРСКОГО ПРИЦЕЛА //коэффициент снайпера _Ksni = 0; // если цель имеет один из снайперских прицелов if ((_optics == "optic_SOS") or (_optics == "optic_LRPS")) // то добавить 100 баллов then {_Ksni = 100}; // ФИЛЬТР ПО РАССТОЯНИЮ // коэффициент дистанции _Kdis = 300 - (_leader distance (_targets select _i)); // добавить элемент в массив баллов _balls set [_i, (_Krat+_Kgun+_Ksni+_Kdis)]; // следующая цель _i = _i + 1; }; // ВЫБОР ЦЕЛИ // начальное значение выбранной цели и ее индекс в массиве _balls _maxBall = _balls select 0; _index = 0; _i = 1; _j = count _balls; while {_i < _j} do { if (_balls select _i > _maxBall) then { _maxBall = _balls select _i; _index = _i; }; _i = _i + 1; }; // выбранная цель _target = _targets select _index; }; Думаю теперь взяться за создание групп в своем отделении и распределять м-ду ними задачи (нечто вроде микроструктуры боя, о чем писал alex70-03). |
› Пятница
› 24.10.2014
› 00:06
› Сообщение # 19
Это все работает?
Хм.. рейтинг от убийств зависит. Автоматчик, заваливший пяток врагов, будет круче, чем пулеметчик, не заваливший ни одного.. Хотя, с другой стороны, у пулеметчика за единицу времени несколько больше шансов выбить цель, чем у простого стрелка.. Сообщение отредактировал andrucio - Пятница, 24.10.2014, 00:07
|
› Пятница
› 24.10.2014
› 09:49
› Сообщение # 20
Индеец, когда я писал о микроструктуре боя, я прежде всего имел в виду действия юнита в плане занятия укрытий. Но А3 пока не позволит это сделать - консервная банка или дом, одинаково воспринимаются и размер в расчёт не берётся.
Если бы разрабы придумали маркеры объектов не только по ИДу, а по категориям... Тогда бы можно было выбирать за что прятаться можно, а что не даст должного укрытия. Ещё было бы не плохо если бы вокруг объекта были шаговые зоны, выполненные в гексагональном виде. нумерация которых бы позволила просто спрятаться за них, или же, подойди к углу здания и вести огонь, и прятаться обратно.
|
› Пятница
› 24.10.2014
› 12:16
› Сообщение # 21
alex70-03,
Во-первых: наткнулся в нете на статью, где описаны действия отделения. Кратко: в отделении формируются две огневые и одна маневренная группа, маневренная группа выдвигается вперед под прикрытием огневых групп, далее под прикрытием закрепившейся маневренной передвигаются огневые группы. Примерно такой-же порядок передвижения бойцов в группах. Нечто вроде передвижения уступами. Во-вторых: когда-то делал такую вещь: принимал условный радиус (например "1") и с помощью команды modelToWorld раскидывал вокруг бойца штук 12 позиций. Имея координаты цели, приподнимал каждую позицию на уровень лежащего бойца и на уровень сидящего. Затем с помощью terrainIntersect проверял, какая из позиций не видна цели если боец лежит, и видна если сидит. И, если такая позиция есть, то боец ползком туда двигался, садился, поражал цель и возвращался ползком. Если позиция не находилась - увеличивал условный радиус. Думаю что-то почудить с этим. Может еще что-нибудь в голову придет. |
› Суббота
› 25.10.2014
› 09:20
› Сообщение # 22
|
› Воскресенье
› 26.10.2014
› 20:43
› Сообщение # 23
alex70-03, делал для одного. Пробовал слепить супер снайпера. Не пошло.
1. Подходящие позиции, определяемые глазом сразу, иногда не попадали под сетку и юнит оставался на месте. 2. Если врагов несколько, нужно для каждого определять просматриваемость. 3. Пока юнит лезет ползком напропалую, его видно. Ну и т.д. Но идея осталась. Кстати вон andrucio, для домов делает расстановку мебели. Возможно по его примеру для каждого типа домов сделать шаблон прикрепленных к углам домов позиций-маркеров "шаговых зон" - как ты их назвал... Добавлено (26.10.2014, 20:43) |
› Воскресенье
› 26.10.2014
› 22:06
› Сообщение # 24
Слишком много получится, включая мух,пчелок и прочую хрень. Думаю, за консервной банкой не особо спрячешься:)
К тому же, насколько я понимаю, у камней, деревьев и тд в А3 нет своего типа, то есть класснейма.. по крайней мере, мне не удалось его выцепить. Массив содержит лишь ИД и имя модели п3д |
› Понедельник
› 27.10.2014
› 00:36
› Сообщение # 25
andrucio, да. Но можно проверить какие из объектов лежат на линии боец-цель.
Добавлено (27.10.2014, 00:36) |
› Вторник
› 28.10.2014
› 16:16
› Сообщение # 26
|
› Вторник
› 28.10.2014
› 19:47
› Сообщение # 27
alex70-03, по ходу, раптор управляется игроком. Примерно с 2-35 наблюдается покраснение экрана как при ранении
Ну так возвращает только ИД и модель, нет? |
› Среда
› 29.10.2014
› 03:58
› Сообщение # 28
andrucio, да. Тип объекта возвращается как "". Как я понимаю (возможно ошибочно), такие объекты типа не имеют. Упомянутый Rube писал, что запись "All" включает в себя объекты, имеющие какой-либо класс, а "" будет возвращать объекты без класса. Во всяком случае, так перевел переводчик Google. Хотя если говорить о зданиях, то выскакивает объект, имеющий подкласс "house".
Увлекшись взаимодействием с окружающими предметами, забыл, что концепции конечного результата по-прежнему нет. Можно придумывать разные косвенные задачи, решать их, но основная проблема останется нерешенной. Согласен, что грамотное передвижение в бою невозможно без использования укрытий. Но даже простой анализ местности для оного бойца тянет за собой огромный скрипт, для отделения - нагрузка возрастает в 10 раз. В скриптах обороны взаимодействие м-ду группами осуществлялось только передачей целей минометному взводу поддержки. Здесь же нужно реализовать реакцию на действия противника. Использовать два-три шаблона согласованных действий хотя-бы групп внутри отделения (как в боксе: умеем всего понемножку, но две три комбинации умеем лучше всех). Кстати, понемногу постигаем военное дело: -старшемукаждой боевой группы указывается :
Пока не знаю, что такое полоса выдвижения, но пункт "способ атаки" может послужить как раз тем шаблоном, который я предлагаю. Использование дымовых гранат, при достижении рубежа атаки, считаю интересным. Опять-же, в долгожданном моде от RHS, группы представлены не как отделения, а как маневровая и огневая группы. Парни знают военное дело. P.S. Прошу написанное не считать направлением работы или указанием на недостатки. Это лишь для того, чтобы упорядочить мысли в голове и показать свое видение задачи. |
› Среда
› 29.10.2014
› 18:24
› Сообщение # 29
Вот-вот. А значит, с ним не получится оперировать, кроме как по ИД, а никакой системы соответствия, кроме визуального сопоставления (то есть ручного в редакторе) "ИД-тип_объекта" не существует.
Помню, ты когда-то спрашивал как заставить ботов перекатываться.. удалось решить? Это было бы полезнее ныканья за камнями\тушками мертвых овец:) тем более, что это - как оказалось - сложнореализуемо Как и дымы. Я не знаю, видят ли боты сквозь дым, но если под огнем противника каждый из них кинет по шашке в сторону этого противника, то можно даже хорошо сманеврировать. Не помню в какой кампании (кажется, Antistasi с армаголика) группы диверсантов, заметив игрока, кидала дымы, и я ничего не видел какое-то время. Очень эффективно.Лучше даже шире - "housebase", ибо в него и руины входят. Вся фишка в том, как оценить обстановку и в одних случаях переть фронтом а в других - обогнуть с фланга |
› Среда
› 29.10.2014
› 23:47
› Сообщение # 30
andrucio
Цитата как заставить ботов перекатываться.. удалось решить? Цитата как оценить обстановку и в одних случаях переть фронтом а в других - обогнуть с фланга И вот тут самое интересное: как перемещать группы. Насколько я понял, группы уступами передвигаются на рубеж атаки. Указывается расстояние: "Рубежатаки назначается на расстояниях 100 - 150 м (иногда до 200 м)" до ближайшего противника. Атака тоже описывается: "Атакапротивника совершается как правилоследующим образом. огневые группы(или одна из них) отвлекает внимание противника и сковывают его действия на одном из направлений, а тем временем, маневровая группа незаметно продвигается на один из его флангов или в тыл. Свыходом к объекту атаки, маневровая группа ослепляет дымами и закидывает противника гранатами и во взаимодействиями с огневыми группами, одновременно атакой во фланг или тыл уничтожает его (захватывают в плен)". Т.е. Первая огневая вызывает огонь на себя, вторая поддерживает, а гасает по позициям противника уже маневровая группа. Причем заходит только с фланга. Возможно, атака по фронту идет при наличии слабых мест в обороне, или при наличии бронетехники, или при кратном превосходстве. Возможно я ошибаюсь, но глупо ломиться на позиции противника имея открытые фланги, где противник имеет возможность стрелять из каждого ствола. Если же зайти с фланга, то противник будет иметь перед собой своих же, т.е. плотность огня будет ниже. Предлагаю:
Нужно пробовать. А то: "Гладко было на бумаге, да забыли про овраги". Есть несколько вопросов:
|
| |||
| Чат сайта |