Перейти к содержимому


Фотография

Как указать для АИ конкретную цель и заставить АИ преследовать ее до победного конца


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 31

#1 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 22 April 2015 - 17:33

Все привет. 

 

Мой простой пример:

1) я расположил свой отряд (красные), в котором игрок не командир, а подчиненный.

2) я расположил вражеский вертолет в полете(синие) с вейпоинтом "Найти и уничтожить" (чтобы он атаковал мой отряд)

3) сделал тригер для синих "обнаружен красными" с  активацией вейпоинта - "Найти и Уничтожить"

 

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

В своем отряде я разместил одного ракетчика ПВО и он в большинстве случаев он лишь сильно повреждает вертолет.

Этот поврежденный вертолет начинает экстренную посадку и в этот момент летит в не предсказуемом направлении!

В итоге мой вейпоинт  "Найти и уничтожить" для моего отряда, конечно же не совпадает с координатами приземления вертолета. Разница может быть огромной.

Мой АИ отряд, конечно не стремится к месту экстренной посадки вертолета.

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

 

Возникает вопрос: Как заставить АИ атаковать конкретную и указанную цель до победного конца, чтобы отряд всегда пытался сблизится с ней в конечном итоге?

Я бы сделал это вейпоинтом, но координаты приземления поврежденного вертолета заранее не будут известны для игрока. 

Может быть можно как то связать вейпоинт "Уничтожить" с конкретной целью? Я пробовал но у меня не получилось.

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

Нужно чтобы АИ всегда преследовал конкретные-указанные цели.

Спасибо за ответ


Сообщение отредактировал mickeymen: 22 April 2015 - 17:44

  • 0

#2 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 22 April 2015 - 19:49

1.'

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

' - условие на прикосновение чего - нибудь к земле.

 

Через .sqf:

 

Обязательно появление вертолета в полете.

 

группа = group имя_командира_твоего_отряда; /// задаешь имя своему отряду.

 

if (isTouchingGround вертолет) /// условие на прикосновение вертолета к земле.

 

then {_wp = ГРУППА addWaypoint [

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

Вертолет, 0]}; /// добавление вейпоинта на вертолет, когда выполниться условие.

 

Через триггер:

 

Условие:

 

isTouchingGround вертолет;

 

Активация:

 

имя_командира_твоего_отряда doMove (position вертолет); 

 

PS. Правда вот не знаю - если через триггер, командир то побежит к вертолету, но вот как за ним побегут остальные, х.з.?


Сообщение отредактировал D_Donskoy: 22 April 2015 - 19:50

  • 0

#3 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 22 April 2015 - 21:02

 

Как заставить АИ атаковать конкретную и указанную цель до победного конца, чтобы отряд всегда пытался сблизится с ней в конечном итоге?

Попробуйте коллега заюзать для опыта эту миссию, по моему вы с ней уже знакомы

http://arma3.ru/foru...-obekt/?p=41020

Просто доработайте под свой частный случай и по экспериментируйте.

Мне кажется

doTarget

и

doFire

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


  • 0

#4 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 22 April 2015 - 23:41

Donskoy. 

я пробовал вариант тот что проще. Тот что с тригером. 

Тригер срабатывает на касание вертолета с землей, но командир не движется к вертолету.

Отдельный вопрос: Как я могу связать вейпоинт  "Уничтожить" с конкретной целью?

 

 

SteelRat.

На этот раз я открыл файл, разбираюсь.

Прежде я извлекал его в папку с таким же именем. Получалась папка в папке, видимо по этому не окрывался.

Сейчас АИ-солдат атакует сразу.

А как сделать чтобы АИ-солдат атаковал цель лишь после срабатывания тригера?


Сообщение отредактировал mickeymen: 23 April 2015 - 00:14

  • 0

#5 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 23 April 2015 - 00:29

'

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

'

'

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

_Group:_Waypoints'

 

Связать вейпоинт с конкретной целью, .sqf:

 

_wp = ГРУППА addWaypoint [

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 Вертолет, 0];

_wp setWaypointType "DESTROY";

 

И кстати, SteelRat прав, должно сработать.


Сообщение отредактировал D_Donskoy: 23 April 2015 - 00:31

  • 0

#6 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 23 April 2015 - 00:36

Donskoy я попробовал второй вариант с sqf! 

Двигается только командир, а отряд остается на месте.

 

Кстати в чем различие между doTarget и doFire?

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

Или я не прав? Обломок вертолета будет все еще считаться координатами или нет?


Сообщение отредактировал mickeymen: 23 April 2015 - 00:51

  • 0

#7 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 23 April 2015 - 00:50

Какой вариант? 


  • 0

#8 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 23 April 2015 - 01:14

группа move getpos вертолет;

и не надо больше ничего выдумывать!


  • 0

#9 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 23 April 2015 - 01:44

Какой вариант? 

 

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

 

Вариант с sqf я тоже пробовал, однако не заметил никаких изменений.

Может я не правильно что то написал в нем:

 

PlayerGroup = group RedCommander1; /// задаешь имя своему отряду.


if (isTouchingGround HELICOPTER1) /// условие на прикосновение вертолета к земле.


then {_wp = PlayerGroup addWaypoint [position HELICOPTER1, 0]}; /// добавление вейпоинта на вертолет, когда выполниться условие.

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


 

 


группа move getpos вертолет;

 

А это как использовать?


Сообщение отредактировал mickeymen: 23 April 2015 - 02:39

  • 0

#10 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 23 April 2015 - 01:54

Блин, сча попробую.


  • 0

#11 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 23 April 2015 - 02:34


  • 0

#12 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 23 April 2015 - 02:42

_=this addeventhandler ["hit",{[_this select 1,_this select 0,10] execVM "move.sqf"}];

или

_=this addeventhandler ["killed",{[_this select 1,_this select 0,10] execVM "move.sqf"}]; 

move.sqf

private ["_gr","_obj"];
_gr = _this select 0;
_obj = _this select 1;
while {count units _gr > 0 } do {   
 _gr move getpos _obj;
    waituntil {(leader _gr distance _obj > (_this select 2) && unitready leader _gr) || count units _gr < 1 }
};
_gr move getpos leader _gr;

Сообщение отредактировал Dimon UA: 23 April 2015 - 02:52

  • 0

#13 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 23 April 2015 - 02:50

Тут еще проще. Версия DEV!

Но появилась другая проблема - если вертолет падает на воду, будет ошибка условия.

Придумай другое условие и усе.

 

Прикрепленные файлы


  • 0

#14 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 23 April 2015 - 22:36


Придумай другое условие и усе.

не понял ничего...

Я попробовал вашу миссию Donskoy.

Вроде бы отряд двинулся к вертолету, правда не сразу. Но я думаю, это особенность АИ армы.

Пока командир не скажет "чисто" отряд будет отлеживаться в кустах. 

С одной стороны это реалистично, но с другой, стороны нет никакого способа для АИ устроить прорыв к цели, даже под обстрелом.

Такие прорывы иногда тоже могут быть нужны.

С вертолетом мы вроде разобрались.

 

Остается один вопрос: Как можно связать любой вейпоинт с конкретной целью? 

Я получил не совсем ясный ответ:

_wp = ГРУППА addWaypoint [position Вертолет, 0];
_wp setWaypointType "DESTROY";

Как это использовать? Как я понимаю это лишь кусок кода из .sqf?

 

Например можно связать вейпоинт "Уничтожить" с движущейся машиной противника? 

Я пробовал но этот вейпоинт вообще никак не работает.

 

Или можно привязать вейпоинт "Поддержка" или "Передвижение" к конкретному объекту или отряду?


Сообщение отредактировал mickeymen: 23 April 2015 - 23:20

  • 0

#15 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 23 April 2015 - 22:42

Ничего, это чего?)


  • 0

#16 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 23 April 2015 - 23:19


Ничего, это чего?)
насчет условия, которое нужно придумать
  • 0

#17 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 23 April 2015 - 23:50

Давайте разберем вашу миссию Donskoy, какой скрипт что делает, это будет полезно для меня и некоторых читающих тему.

Я вижу у вас в миссии два триггера. Собственно это все что нужно, как я понял.

 

Условие первого триггера:

isTouchingGround Hilo

Активация первого триггера:

hint "Все бегут к вертолету.";HiloKillerGroup move position Hilo;Hilo allowDamage true;HiloKillerGroup setBehaviour "SAFE";HiloKillerGroup setSpeedMode "FULL";

Условие второго триггера:

damage Hilo > 0.25

Активация второго триггера:

Hilo allowDamage false;

Условия лично мне кажутся понятными, а вот активация не совсем.

Что означает "false" в конце каждой линии?

Например перевод последнего мне не ясен: Hilo позволяет/допускает повреждение фальшивый.


Сообщение отредактировал mickeymen: 23 April 2015 - 23:51

  • 0

#18 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 24 April 2015 - 11:53

Что означает "false" в конце каждой линии?
Например перевод последнего мне не ясен: Hilo позволяет/допускает повреждение фальшивый.

true/false - булевое значение (Boolean) - логический тип, переводится как: Истина/Ложь.
Почему он её в конце ставил - синтаксис команды:
object allowDamage boolean
Сама команда запрещает или разрешает нанесение урона объекту
  • 0

#19 OFFLINE   mickeymen

mickeymen

    Ст. Прапорщик

  • Пользователи
  • 731 сообщений

Отправлено 24 April 2015 - 12:25


переводится как: Истина/Ложь.

это то понятно


Сама команда запрещает или разрешает нанесение урона объекту

но это:

Hilo allowDamage false;

остается неясным.

Я уже писал перевод этого выше. Судя из ваших слов и из перевода, ЭТА ЛИНИЯ запрещает получать повреждения вертолету! 

Ведь False - должен иметь отрицательный эффект.

Зачем вертолету запрещать получать повреждения?

Мне нужно понять логику этой линии


Сообщение отредактировал mickeymen: 24 April 2015 - 12:27

  • 0

#20 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 24 April 2015 - 20:07

 


переводится как: Истина/Ложь.

это то понятно


Сама команда запрещает или разрешает нанесение урона объекту

но это:

Hilo allowDamage false;

остается неясным.

Я уже писал перевод этого выше. Судя из ваших слов и из перевода, ЭТА ЛИНИЯ запрещает получать повреждения вертолету! 

Ведь False - должен иметь отрицательный эффект.

Зачем вертолету запрещать получать повреждения?

Мне нужно понять логику этой линии

 

Хило получатьповреждения ложь; - что означает, невозможность повредить вертолет, т.е. вертолет бессмертный.

Попробуй эту команду на примере Юнита, т.е. поставь Юнита и в инит впиши ему this allowDamage false, а затем прицелься и стреляй в него) и посмотри что будет.

Вторая команда для закрепления понятого будет: this allowDamage true; - что означает: это получатьповреждения правда;

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

Я тебе сделал "РАСКРАШЕННЫЙ ПРИМЕР" - проверю скину.

this allowDamage true; - это получатьповреждения правда. '

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

'

this allowDamage false; - это получатьповреждения ложь. '

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

'

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

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

Вот и все.


Сообщение отредактировал D_Donskoy: 24 April 2015 - 20:27

  • 0




Яндекс.Метрика