Перейти к контенту

AI вертолетов


Kirag

Рекомендуемые сообщения

Monnoroch, а нужно ли удерживать нескольких неписей одной схемой?

 

Ведь бойцы одного отряда в реале тоже не управляются одним мозгом. Каждый действует под управлением собственного мозга - собственной схемы, и решения в конечном итоге принимают самостоятельно. Это (и только это, причем в ущербном виде, ведь новичок с ПМом попрет на толпу экзоскелетчиков только потому, что они враждебной группировки, соотношение сил никак не учитывается) уже есть в игре и сейчас.

Но в реальном бою каждый боец действует все таки не сам по себе, а с оглядкой на действия своих товарищей. Но именно с оглядкой, а не товарищи решают за него. Ну и кроме этого учитывается ситуация, приказ командира, поставленная задача. Именно это и есть координация действий в том понимании, которое вкладываю в это я.

 

И именно поэтому я считаю важным ВНЕШНИЙ источник информации, опираясь на который каждый отдельно взятый непись будет сам принимать решение.

 

Вот на том же примере боя в тройке снайпер-пулеметчик-штурмовик. Есть три схемы - снайпера, пулеметчика и штурмовика. Под какую схему попадет НПС, зависит от его оружия. Есть список целей.

Если схема снайпера, то отстреливает в первую очередь тех, кто находится далеко, во вторую очередь средние дистанции. Не может отходить дальше определенного от остальных.

Пулеметчик стреляет по средней и короткой дистанциям. Опять таки, далеко от товарищей не отходит.

Штурмовик прикрытия - самое интересное. Стрелять начинает тогда, когда враг подходит на короткую дистанцию. Либо когда

враг сбоку. Либо в то время, когда пулеметчик перезаряжает оружие.

 

Теперь неизбежные вопросы - что значит "враг зашел сбоку" и "пулеметчик перезаряжает оружие".

За "сбоку" принимаем какой-то угол от направления фронта, за которое, в свою очередь, берем линию между двумя отрядами на момент начала столкновения. Либо, еще лучше, между "центрами масс" двух отрядов в данный момент. Чтобы это работало, нужно держать во внимании положения всех участников столкновения. В реале это понятно каждому, если речь не идет об успешном обходе, когда кругом враги. Но это уже финиш.

А чтобы определить, когда же начинается перезарядка у пулеметчика, нужно держать во внимании количество патронов в магазине его пулемета. В реале - видно невооруженным глазом, или слышно на крайний хрен.

 

Вот для удержания всей этой информации во внимании и нужна внешняя база данных. Не запрашивать же каждый раз напрямую все объекты (причем вообще все, включая ящики, мол "Друг! Сколько у тебя патронов осталось? А! Так ты вообще не человек! Ну, звиняй. До следующего апдейта..."). Проще взять из глобальной таблицы боеспособных объектов уже готовые данные, и заодно обновить данные о себе.

 

В результате все три бойца будут сражаться как одна группа, в которой у каждого свои цели и задачи, т.е. скоординированно. И для этого не нужна одна схема на всех, каждый действует по своей схеме, но каждая из схем учитывает глобальную таблицу - окружающую ситуацию, которая и связывает три схемы воедино.

 

Вот примерно так. По такому принципу я и вертолеты в пары объединял.

 

А что касается взаимосогласованных позиций... Нам же требуется только, чтобы неписи не лезли своим же на линию огня, а уж в двух мертах он слева или в пяти метрах справа - это уже пусть сам решает, главное, чтобы под союзные пули не лез.

Кстати же, про держание строя есть схема patrol, взять хоть солдат, патрулирующих дорогу около блокпоста на кордоне.

Изменено пользователем Kirag

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Не все так просто.

Чтобы управлять 2мя и больше нпс надо поймать их в одном комплекте акшн-эвалуатор.

В одном.

Из разных эффекта будет ноль.В том плане,что из разных и делать не надо - уже ПЫС сделало.

А чтобы они реально вместе были надо из одного.

А вот это уже нереал.....чтобы поймать в нем 3 обьекта + прописать им разное поведение.

Ссылка на комментарий

Monnoroch

Верю, что нереально запихнуть несколько объектов в один эвалуатор. Ты с ними работаешь, и понимаешь в разы лучше, чем я.

Единственно, с чем я не могу полностью согласиться, это с отсутствием толка при использовании индивидуальных схем. Нам ведь не сильно нужно, чтобы неписи реально были вместе. Достаточно, чтобы они просто выглядели командой. А к этому теоретически можно приблизиться и на индивидуальных схемах.

 

Мы, похоже, просто говорим о разных вещах. Ты - о реальном управлении группой НПС, а я - о создании индивидуальных схем, где для принятия решения просто учитывается куда больше факторов, чем у ПЫС, и потому решения получаются более адекватными ситуации. И выглядеть могут, как скоординированные действия, по сути ими не являясь. Как у муравьев - вроде волокут травинку слаженно, а отделить тех, кто сзади - поволокут куда быстрее. Внешне - кооперация, по сути - перетягивание каната.

 

Применительно, скажем, к подбору десантников. Если каждый десантник сам по себе решит: рядом сел вертолет - бегом к нему, то все ломанутся внешне очень даже слаженно. И плевать, что каждый в механике игры бежит сам по себе.

Если поставить не просто бег к вертолету, а так, что пять секунд НПС бежит, следующие пять - отстреливается, опять бежит и т.д., и при инициализации схемы поставить 50% вероятности, с чего начинать - бежать или отстреливаться, то выглядеть это будет как то, что команда, отходя к вертолету, прикрывает друг друга, поделившись примерно поровну. Очень разумное поведение, а то, что они на самом деле каждый за себя, на фоне такой внешней слаженности заметно не будет.

В конце концов, мало кто, играя, отдает себе отчет, что держит в руках не калаш, а wpn_ak74_hud.ogf

 

А по поводу ПЫСовских схем... Как-то по диагонали смотрел боевую схему зомби - там вообще всего два объекта участвуют - зомб и цель. Ну, зомбу адекватность и не нужна, так ведь и сталкеры недалеко ушли. Добавляются только укрытия и перебежки между ними. Чтобы банально отступить, а не переть с шашкой на танки - такого нет. А ведь могло бы быть, если добавить в индивидуальную схему каждому умение оценивать, сколько поблизости своих и сколько чужих, да как кто вооружен. Или сколько раз одинокий сталкер ломился прямо под мост, где шестеро военных. Там и оставался, ума обойти не хватало. А ведь недалеко ж переться. Опять таки - был бы алгоритм обхода превосходящих сил противника, наподобие обхода аномалий (тоже не ПЫСовский) - глядишь и уцелел бы одиночка. В общем-то, тоже вид координации, только с противником.

 

Я вот об этом, о доработке индивидуальных схем.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Да,так реально сделать.С этим согласен.Но это же все эмуляция.

А обход противника как анамалий - это кстати мысля дельная.Это даже не сложно.

 

Но все равно индивидуальные схемы выглядеть будут на 1-2 порядка слабее....

 

О том,чтобы 1 присел а 2й сзади встал и стреляли и речи быть не может к сожалению...

Или с 2х сторон из за дерева...или обход 2 сторон противника....

Только как ты написал - рандомом.

Изменено пользователем Monnoroch
Ссылка на комментарий

Индивидуальные послабее, оно да, но далеко не всегда это хуже. Ведь и в жизни не обязательно принятое решение будет оптимальным.

 

А вот обход противника с двух сторон можно и на индивидуальных схемах сделать: Допустим, нас тут воюет восемь рыл. ИД всех известны. Для простоты снаряжение у всех одного класса. Значит, двое с наименьшими ИД обходят слева, еще двое с наибольшими - справа, остальные четверо развлекают противника.

 

Кстати, с забором десанта рандом - только первый пришедший в голову вариант, не самый лучший. Можно сделать толковее: координаты вертолета известны, координаты десантников известны. Стало быть, расстояния тоже известны. Первыми начинают отход та половина, которая в начальный момент находится дальше от вертолета. Можно сделать еще и с учетом здоровья - раненные вперед. А вот возможно ли сделать, чтобы непись тащил к вертолету тяжело раненного товарища - вот этого не знаю, далеко не факт.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

А зачем нам ловить всю эту ораву в одной схеме? Эвалуатор ведь умеет выбирать из всех возможных вариантов действия нужный. На этом и можно попробовать сыграть. Смотри:

 

У каждого НПС своя схема. Основной идея в том, что каждый НПС знает ИД тех, кто сражается рядом с ним. А дальше в эвалуаторе каждой из схем происходит следующее (от имени НПС, каждого в отдельности, но все делают то же самое):

Я сравниваю свой ИД с ИД из списка группы. Если мой ИД первый или второй в порядке возрастания - обхожу гадов слева. Если последний или предпоследний - иду справа. Иначе - держу центр.

При таком подходе двое пойдут слева, двое справа, а четверо останутся на месте. У них просто нет шансов принять другое решение, ведь список ИД бойцов группы у каждого НПС один и тот же, меняется от бойца к бойцу только его собственный ИД, на чем и построен механизм отбора.

 

Чтобы такой вариант заработал, ИД всех бойцов группы должны как-то попасть в эвалуатор. А вот для этого уже нужна внешняя (относительно эвалуатора), единая для всех НПС, база данных о ситуации (имеются ввиду боеспособные онлайн объекты - мутанты, люди, БТРы и вертолеты), из которой эти сведения и берутся.

 

Через что-то подобное я объединял вертушки в пары, только таблица пар очень ущербная (я понял это на середине процесса, но переделывать было лень, выкрутился и так). Там ведь похожая ситуация - у каждого из вертолетов пары свой собственный биндер и схема, но в нем учтено, ведущий это или ведомый (данные об этом идут извне биндера и схемы), и на основании этого выбирается поведение. Так что могу сказать с уверенностью, что сам по себе принцип рабочий.

 

З.Ы. Если можно, распиши подробнее, что именно ты представил, говоря, что предполагается поймать 8 НПС в одной схеме? Потому как мне кажется, мы снова говорим о разных подходах.

Я ищу обходной путь. Возможно даже, очень обходной. Поскольку в лоб, известными путями, задача нерешаема. В этом я с тобой полностью согласен.

Изменено пользователем Kirag

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

"каждый НПС знает ИД тех, кто сражается рядом с ним" - для этого нужно поймать их в 1 схеме :)

Тогда будет перекрещивание действий если просто id собирать.А чтобы они не делали полный бред необходимо управлять из 1 схемы.

 

в том то и дело,что не получится так стабильно делать таблицу ид бойцов.она будет периодичеси меняться и т.д. - т.к. условия в бою часто меняются.

 

8 НПС - это когда перебором обьектов выбираются 8 ближайших дружественных <= 25 гдето метров и управление анимациями идет для всех сразу.ну или по очереди.не важно.важно что из 1 комплекта схемы.

 

то есть есть npc у которого есть db.storage[npc:id()] а есть остальные 7 обьектов у которых тоже есть db.storage[obj:id()] но им всем надо запретить использовать данную схему чтоб не было конфликта что он одновременно и npc и 7!!! раз obj. (из других экземпляров obj - не своего эвалуатор-экшн)

Изменено пользователем Monnoroch
Ссылка на комментарий

Ого, баталия. Уважаю, что называется.

 

Делюсь наработками/идеями для группового взаимодействия:

1) такого взаимодействия, как показывает практика не нужно! достаточно создать видимость.

2) приняв подобную идею, приходим к уровню логики, который выше уровня логики отдельного непися (в ЧН что-то подобное - сквады и группировки, но очень тупо реализованное)

3) для такого уровня требуется собственное хранилище (я использую распределенное - каждый непись в себе хранит "свою" часть общего состояния, что позволяет сохранять и загружать эти состояния не боясь переполнить pstor), в котором хранится информация о "расстановке сил" какие неписи каких группировок где находятся, на базе информации формируются "сквады" (гы) по расстоянию друг от друга, по целям и т.п.

4) для каждого сквада производится распределение - кому из неписей какую роль "отыгрывать", например, снайпера выбрали (по оружию) и послали к каверу недалеко от тех неписей, которых приняли за один сквад. Точно так же и с остальными поступить.

5) все это сводится к ручному манипулированию эвалюаторами - выставление тех или иных в true (просто чуть-чуть модифицируем код эвалюаторов)

6) как следствие - неписи двигаются сами по себе, но внешне это выглядит как групповое действие.

 

Подобную вещь я делал, когда заменял боевую схему: неписи стараются кучковаться, но не сильно, стараются не стоять друг у друга на линии обстрела, меняют укрытия и т.д. и т.п. (ролик на ютюбе, хоть и сумбурный, показывает это)

Или торговля - две таблицы, одна "мастер-слейв", другая "слейв-мастер" (для быстрой выборки). Одна схема, но с ветвлением - если мастер, то играть одно, а если слейв - другое. Получается синхронное взаимодействие. Так же спокойно восстанавливаются эти пары при загрузке игры (п.3), что позволяет даже после загрузки продолжать наблюдать торговлю. Иначе после перезагрузки игры теряются таблицы пар и каюк :)

 

Так что верной путей идете, товарищи.

 

PS 2Kirag: к id объектов низзя привязываться для выбора направлений. Так как получится каша. И да, у ПЫС боевая схема в движке, для сталкеров, и она не такая уж и простая. Другое дело, что не очень адекватная.

PPS 2Kirag: тебе с десантом могу предложить вариант такой: составляешь единожды таблицу, кого надо "забрать" и у вертолета смотришь, чтоб таблица была пустая, тогда улетать. У написей же делаем схему, где эвалюатор выдает true, если непись в такой таблице, ну а в схеме - что угодно, например, пробежать от 2 до 5 секунд, присесть пострелять во врага 2 секунды, метнуться в сторону и все это в виде графа с переходами по ребрам из одного состояния в другое. Можно усложнить - если отслеживать через таблицу у кого из группы какое состояние, запрещать переход в какое-либо состояние, если более 70% группы в таком состоянии уже находятся. Не суть, главное - когда добегает непись до цели (проверка расстояния, например), то удаляем себя из этой таблицы, а на finalize экшна непися ... еще раз удаляем себя из таблицы (на тот случай, если финалайз вызван переходом в оффлайн, например, считаем, что добежали), вставить его же собственное удаление через alife():release(), или если вылеты, то косвенными способами - через промежуточные функции и таблицы. Итог: бегут неписи, постреливают, шхерясь и абсолютно несинхронно, к вертушке и один за другим исчезают "в ней" после чего вертушка деловито завывая улетает :) Главное - запоминать состояние таблицы в сейве.

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

Это все просто замечательно,но на деле хотелось бы конечно реальное взаимодействие сделать...Как у меня в торговле.Только боевое.Но это я идеализирую...

Изменено пользователем Monnoroch
Ссылка на комментарий

это и есть реальное взаимодействие :)

они делают общее действие при этом выполняя каждый свои схемы.

а набор этих схем и есть групповое взаимодействие.

надо просто сделать уровень абстракции выше схем

 

Та же торговля, тот пример, что я описал - он рабочий, и синхронизация абсолютная, с точностью до одного апдейта непися (зависит от мощности компа)

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

xStream, пара вопросов.

а если таким образом 2 снайпера полезут в 1 каверу?

а если 2 пулеметчика сядут стрелять под 1 углом?

а если...

а если...

 

по-твоему же не координация действий. а "умные" поступки каждый в одиночку + насильственное удержание группы НПС рядом друг с другом (относительно,конечно).

"как бы" вместе,но не вместе.

 

или я не прав?

Изменено пользователем Monnoroch
Ссылка на комментарий

а для того и нужен верхний уровень, чтоб определять кого куда и что бы не было конфликтов.

то есть составлять наборы данных, исходя из которых непись переходит под ту или иную схему

Пример: когда отправляем одного быть снайпером, то в таблицу "снайперов" добавляем непися и точку, которую он пасет. Если из другого сквада снайпер попрется туда, ему достаточно проверить, а не занято ли там. Довольно просто. И вообще неписи будут стараться держать дистанцию относительно друг друга, а в пределах сквада - не сильно разбредаться и будет получаться действие в группах.

Твоя ошибка в том, что ты пытаешься конечные действия представить, а надо наоборот - составляем глобальную картину и "высший разум" раздает "задания" учитывая состояние неписей, их вооружение и вообще все что угодно.

 

"как бы" вместе,но не вместе.

Я говорил, что реально не надо запариваться о том, что бы синхронизировать неписей. Под действием управляющих сигналов "сверху" они будут рядом, но без сильной синхронизации, просто "будет совпадать" то, что мы видим, с тем, что подразумевается, но на деле - неписи каждый под своим GOAP работает, просто мы корректиируем их поведение, но не жестко. То есть - детали реализуют неписи, мы указываем общую цель. Не забывай, как работает планировщик.

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

И впрямь консилиум скриптеров :D. Оборву проблемами своими насущными:

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ...hing\s.t.a.l.k.e.r\gamedata\scripts\heli_move.script:172: attempt to call field 'alt_choose_look_point' (a nil value)

 

 

переодически выходит такой вот лог

Цитата

"Все на свете есть Калаш. А что Калашом не является - стремиться уподобиться ему" ©

 

Мои оружейные релизы

Ссылка на комментарий

Ох! Всего день не заглядывал, а столько пропустил!

 

xStream, спасибо за комментарии и пояснения. Все-таки не совсем я тупой, что приятно. Принцип тот самый, синхронизация и выбор действия на внешней базе данных. Пока читал, возникла пара вопросов:

 

У тебя информация о каждом НПС хранится в нем самом, что облегчает сейв/лоад. А при лоаде вся эта инфа собриается в общую таблицу, я верно понимаю? Или запрашиваются все НПС?

И еще вопрос: почему привязка по ИД не подойдет для выбора направления? Дело именно в направлении, в нем какие-то хитрости? Просто если снаряжение у группы сталкеров одного класса, то откуда получится каша?

 

По десанту я планировал сделать чуть по-другому, записывать в вертолет, кого и сколько там сидит. Если больше некого забрать или вертолет полный - взлетаем. Просто мало ли, понадобится этот десант снова высадить, а высадятся совсем не те, что садились. Но в любом случае, это я точно нескоро смогу сделать, с вертушками я разобрался, а вот сталкеров только спавнить и релизить и умею. Послать его куда-нибудь пока выше моего умения.

 

Chingy, а ты фикс из шапки ставил? Он именно этот вылет и правит.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Kirag, ну как я выше писал послать его к вертолету с релизом в конце - вообще нет проблем.

Я тебе это за 10 минут напишу - ты только скажи как получить нужный обьект вертолета.

Ссылка на комментарий

Monnoroch

Пока я даже не до конца понимаю как определить, кого и когда нужно посылать к вертолету. И что должно происходить с вертолетом при высадке/посадке людей тоже только общее представление, я имею в виду список пассажиров. Да и осваивать управление сталкерами мне по-любому нужно.

Определить же, что вертолет сел - достаточно просто: скорость равна нулю, расстояние между координатами левел вертекса вертолета и координатами собственно вертолета меньше какого-то значения, около 3 метров. Другое дело, что при посадке пары таких вертолетов будет два. Тогда, наверное, ближайший из подходящих.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

1)При загрузке игры каждому неписю вызывается onregister метод серверного объекта. Ну и в нем, непись отправляет в общее хранилище свои данные. Запись проще - реалтайм, как надо сохранить инфу, сразу в него и пишем, при сохранении все это попадет в сейв.

2)По ид я имел ввиду следующее - если брать непися с ИД=10 и послать налево, а непися с ИД=11 направо, томожет получиться смешно - 10-й стоит справа, а 11 слева, вот и пойдут "крест-накрест".

Только это и ничего более.

Изменено пользователем xStream

Все, кто стоит на моем пути: идите нахрен и там погибните! ©

Ссылка на комментарий

TAYLI

Ну, почему оффтоп? Вполне по теме.

 

На данный момент уже сделано:

+ В дополнение к Ми-24 появился вертолет Ми-2 (из госпиталя ЧН) Тактика боя пока что от 24-ки, хотя это совершенно разные машины, с разными ТТХ и углами обстрела пулеметов. Так что для Ми-2 очень даже подойдет тактика висения над жертвой.

 

+ Вертолет - противник опасный, поэтому в игре появился ПЗРК "Игла". Добавлены модели ракеты, самого ПЗРК, ХУД к нему. Применение комплекса старался сделать поближе к реальности, то есть никакого "забыл-выстрелил" (как в первых опытах) не будет. Честное "выстрелил-забыл", причем в варианте "если выстрелил, то забыл... наверное..." По этой линии остались косметика с моделью ПЗРК, ну и отстроить алгоритм наведения ракеты - срыв наведения уже возможен, но пока не учитываются меры противоракетной защиты вертолетов. В общем, уже не халява. Ну, и как доделаю - инструкцию ко всей этой дряни надо не забыть.

 

+ На модели обоих вертолетов добавлены пусковые установки управляемых ракет "Игла-В". Пока только модели, применение УР компьютером пока совсем не прорабатывалось, хотя наметки есть. В принципе, для вертушек проще, чем для ГГ. Если б еще в сталкерах что-то понимал...

 

+ Высадка десанта с вертолетов. Только на заранее в логике прописанных левел вертексах, и только безмозглых НПС безо всякой логики. Опять-таки, понимал бы что в сталкерах. Но если прямо на голову - мало не покажется.

 

Пока вроде бы все.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...