Тут: командира убили - полохо, зама - еще хуже. сначала зама убили - можно жить (есть же командир), потом убили командира - все плохо (зама ведь тоже нет). Как-то так.
Ну тут уже смотреть надо, как интереснее будет - двухступенчатое нарастание вселенской тоски и уныния или же возможным скачком на 0.3. И я бы менял не все скиллы скопом.
Уууууууууууууу в какие дебри я залез! Ситуация подвергается классификации, определяется боевая задача и способ ее выполнения, каждое движение бойца отдельно прописывается. На все это уйдет уйма времени и ресурсов ПК. Но это - лирика. По сути: решил для определения важности цели создать систему накопления баллов. Частично это уже сделано: рейтинг (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; // кол-во патронов в используемой обойме
// ФИЛЬТР ПО НАЛИЧИЮ ПУЛЕМЕТА //коэффициент пулеметчика _Kgun = 0; // если кол-во патронов в обойме меньше 30, то добавить 50 очков if (_ammo > 30) then {_Kgun = 50};
// ФИЛЬТР ПО НАЛИЧИЮ СНАЙПЕРСКОГО ПРИЦЕЛА //коэффициент снайпера _Ksni = 0; // если цель имеет один из снайперских прицелов if ((_optics == "optic_SOS") or (_optics == "optic_LRPS")) // то добавить 100 баллов then {_Ksni = 100};
// добавить элемент в массив баллов _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).
Это все работает? Хм.. рейтинг от убийств зависит. Автоматчик, заваливший пяток врагов, будет круче, чем пулеметчик, не заваливший ни одного.. Хотя, с другой стороны, у пулеметчика за единицу времени несколько больше шансов выбить цель, чем у простого стрелка..
Сообщение отредактировал andrucio - Пятница, 24.10.2014, 00:07
Индеец, когда я писал о микроструктуре боя, я прежде всего имел в виду действия юнита в плане занятия укрытий. Но А3 пока не позволит это сделать - консервная банка или дом, одинаково воспринимаются и размер в расчёт не берётся. Если бы разрабы придумали маркеры объектов не только по ИДу, а по категориям... Тогда бы можно было выбирать за что прятаться можно, а что не даст должного укрытия. Ещё было бы не плохо если бы вокруг объекта были шаговые зоны, выполненные в гексагональном виде. нумерация которых бы позволила просто спрятаться за них, или же, подойди к углу здания и вести огонь, и прятаться обратно.
alex70-03, Во-первых: наткнулся в нете на статью, где описаны действия отделения. Кратко: в отделении формируются две огневые и одна маневренная группа, маневренная группа выдвигается вперед под прикрытием огневых групп, далее под прикрытием закрепившейся маневренной передвигаются огневые группы. Примерно такой-же порядок передвижения бойцов в группах. Нечто вроде передвижения уступами. Во-вторых: когда-то делал такую вещь: принимал условный радиус (например "1") и с помощью команды modelToWorld раскидывал вокруг бойца штук 12 позиций. Имея координаты цели, приподнимал каждую позицию на уровень лежащего бойца и на уровень сидящего. Затем с помощью terrainIntersect проверял, какая из позиций не видна цели если боец лежит, и видна если сидит. И, если такая позиция есть, то боец ползком туда двигался, садился, поражал цель и возвращался ползком. Если позиция не находилась - увеличивал условный радиус. Думаю что-то почудить с этим. Может еще что-нибудь в голову придет.
alex70-03, делал для одного. Пробовал слепить супер снайпера. Не пошло. 1. Подходящие позиции, определяемые глазом сразу, иногда не попадали под сетку и юнит оставался на месте. 2. Если врагов несколько, нужно для каждого определять просматриваемость. 3. Пока юнит лезет ползком напропалую, его видно. Ну и т.д. Но идея осталась. Кстати вон andrucio, для домов делает расстановку мебели. Возможно по его примеру для каждого типа домов сделать шаблон прикрепленных к углам домов позиций-маркеров "шаговых зон" - как ты их назвал...
Добавлено (26.10.2014, 20:43) --------------------------------------------- Интересную особенность нашел в команде nearestObjects. Как пишет некий Rube от 10.08.10 (не дословно): если вместо искомого типа объектов задать [], то команда вернет все объекты, включая камни, деревья и т.д. Т.е. можно определить для слепых юнитов, где находятся потенциальные объекты-укрытия. Осталось выбрать подходящие и с какой стороны юниту прятаться.
команда вернет все объекты, включая камни, деревья и т.д.
Слишком много получится, включая мух,пчелок и прочую хрень. Думаю, за консервной банкой не особо спрячешься:) К тому же, насколько я понимаю, у камней, деревьев и тд в А3 нет своего типа, то есть класснейма.. по крайней мере, мне не удалось его выцепить. Массив содержит лишь ИД и имя модели п3д
andrucio, да. Но можно проверить какие из объектов лежат на линии боец-цель.
Добавлено (27.10.2014, 00:36) --------------------------------------------- Чушь написал. Объекты на линии можно вернуть lineIntersectsWith. Тоже возвращает камни и деревья.
andrucio, да. Тип объекта возвращается как "". Как я понимаю (возможно ошибочно), такие объекты типа не имеют. Упомянутый Rube писал, что запись "All" включает в себя объекты, имеющие какой-либо класс, а "" будет возвращать объекты без класса. Во всяком случае, так перевел переводчик Google. Хотя если говорить о зданиях, то выскакивает объект, имеющий подкласс "house".
Увлекшись взаимодействием с окружающими предметами, забыл, что концепции конечного результата по-прежнему нет. Можно придумывать разные косвенные задачи, решать их, но основная проблема останется нерешенной. Согласен, что грамотное передвижение в бою невозможно без использования укрытий. Но даже простой анализ местности для оного бойца тянет за собой огромный скрипт, для отделения - нагрузка возрастает в 10 раз. В скриптах обороны взаимодействие м-ду группами осуществлялось только передачей целей минометному взводу поддержки. Здесь же нужно реализовать реакцию на действия противника. Использовать два-три шаблона согласованных действий хотя-бы групп внутри отделения (как в боксе: умеем всего понемножку, но две три комбинации умеем лучше всех). Кстати, понемногу постигаем военное дело: -старшемукаждой боевой группы указывается :
направление наступления,
полоса выдвижения,
рубеж перехода в атаку (или условный сигнал на переход в атаку),
способ атаки противника (с фронта, с выходом во фланг или в тыл, одновременно с соседней боевой группой или самостоятельно, с применением средств задымления или без них),
объект атаки и направление продолжения наступления
Пока не знаю, что такое полоса выдвижения, но пункт "способ атаки" может послужить как раз тем шаблоном, который я предлагаю. Использование дымовых гранат, при достижении рубежа атаки, считаю интересным. Опять-же, в долгожданном моде от RHS, группы представлены не как отделения, а как маневровая и огневая группы. Парни знают военное дело.
P.S. Прошу написанное не считать направлением работы или указанием на недостатки. Это лишь для того, чтобы упорядочить мысли в голове и показать свое видение задачи.
Вот-вот. А значит, с ним не получится оперировать, кроме как по ИД, а никакой системы соответствия, кроме визуального сопоставления (то есть ручного в редакторе) "ИД-тип_объекта" не существует. Помню, ты когда-то спрашивал как заставить ботов перекатываться.. удалось решить? Это было бы полезнее ныканья за камнями\тушками мертвых овец:) тем более, что это - как оказалось - сложнореализуемо Как и дымы. Я не знаю, видят ли боты сквозь дым, но если под огнем противника каждый из них кинет по шашке в сторону этого противника, то можно даже хорошо сманеврировать. Не помню в какой кампании (кажется, Antistasi с армаголика) группы диверсантов, заметив игрока, кидала дымы, и я ничего не видел какое-то время. Очень эффективно.
ЦитатаИндеец ()
имеющий подкласс "house"
Лучше даже шире - "housebase", ибо в него и руины входят.
ЦитатаИндеец ()
способ атаки противника (с фронта, с выходомво фланг или в тыл, одновременно с соседней боевой группой или самостоятельно,
Вся фишка в том, как оценить обстановку и в одних случаях переть фронтом а в других - обогнуть с фланга
как заставить ботов перекатываться.. удалось решить?
Нет, не удалось. Причем в ASR моде боты лихо отклоняются, имея перед собой лишь палку!
Цитата
как оценить обстановку и в одних случаях переть фронтом а в других - обогнуть с фланга
Нужно еще поковырять военную литературу. Думаю стандартную группу принудительно разделить на три. Построение: маневровая - в середине, огневые - по флангам. У каждой соответственно есть лидеры - у них узнать количество известных целей и сравнив показания, определить скопление противника. Это даст понять где больше противника: слева, справа или посредине. И вот тут самое интересное: как перемещать группы. Насколько я понял, группы уступами передвигаются на рубеж атаки. Указывается расстояние: "Рубежатаки назначается на расстояниях 100 - 150 м (иногда до 200 м)" до ближайшего противника. Атака тоже описывается: "Атакапротивника совершается как правилоследующим образом. огневые группы(или одна из них) отвлекает внимание противника и сковывают его действия на одном из направлений, а тем временем, маневровая группа незаметно продвигается на один из его флангов или в тыл. Свыходом к объекту атаки, маневровая группа ослепляет дымами и закидывает противника гранатами и во взаимодействиями с огневыми группами, одновременно атакой во фланг или тыл уничтожает его (захватывают в плен)". Т.е. Первая огневая вызывает огонь на себя, вторая поддерживает, а гасает по позициям противника уже маневровая группа. Причем заходит только с фланга. Возможно, атака по фронту идет при наличии слабых мест в обороне, или при наличии бронетехники, или при кратном превосходстве. Возможно я ошибаюсь, но глупо ломиться на позиции противника имея открытые фланги, где противник имеет возможность стрелять из каждого ствола. Если же зайти с фланга, то противник будет иметь перед собой своих же, т.е. плотность огня будет ниже. Предлагаю:
вышеуказанным способом определить фланг позиции отделения, где врагов меньше;
скрытно сместить маневровую группу к указанному флангу;
на противоположном фланге первая огневая немного(на сколько?) выдвигается, залегает и открывает огонь;
маневровая группа мощным броском проникает на фланговые позиции противника;
одновременно вторая огневая группа в боевом режиме передвигается на позиции первой группы;
маневровая двигается по позициям противника на соединение с огневыми группами.
Нужно пробовать. А то: "Гладко было на бумаге, да забыли про овраги". Есть несколько вопросов:
как определить координаты точек перемещения для групп (позиция лидера вражеской группы, среднее арифметическое координат врагов в списках целей или еще как-то);
при каком соотношении сил начинать атаку и при каком отступать (можно поиграть с "courage");
действия при наличии бронетехники - отдельная тема;
действия при наличии артподдержки - отдельная тема.