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


Фотография

findNearestEnemy


Лучший Ответ vlad333000 , 28 January 2019 - 16:49

...
private ["_enemy"];

waitUntil { _enemy = _unit findNearestEnemy _unit; !isNull _enemy; };

hint str _enemy;
...

я пытаюсь посчитать (count) цели:

Посчитать можно только массив или строку, но не объект:
Return Value: Object

Вариант (все время 0).

nearTargets так же как и findNearestEnemy в результате выдает только те цели, которые известный виртуальному мозгу солдафонов Перейти к сообщению


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

#1 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 27 January 2019 - 22:36

Добрый вечер всем. Снова нужна помощь.

Делаю следующее:

 

 

 

_SafePos = [getPos Player, 10, 15, 5, 0, 0, 0] call BIS_fnc_findSafePos;
 
_CreateMortarTeam = createGroup West;
_Unit = "B_Soldier_TL_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "SERGEANT"];
_Unit = "B_support_Mort_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "CORPORAL"];
_Unit = "B_support_AMort_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "PRIVATE"];
 
_MortarTeam = group leader _CreateMortarTeam;
_MortarTeamUnits = units _MortarTeam;
_Mortar_Gunner = _MortarTeamUnits select 1;
_Mortar_Gunner_Support = _MortarTeamUnits select 2;
 
_Wp_MortarTeam = _MortarTeam addWaypoint [position leader _CreateMortarTeam, 1];
_Wp_MortarTeam setWaypointBehaviour "SAFE";
_Wp_MortarTeam setWaypointCombatMode "GREEN";
_Wp_MortarTeam setWaypointSpeed "LIMITED";
_Wp_MortarTeam setWaypointType "SAD";
 
Sleep 5; comment "Нужно условие на развертывание миномета.";
 
comment "Далее ищу ближайшего врага.";
 
_MortarTeam_NearestEnemy = leader _MortarTeam findNearestEnemy leader _MortarTeam; comment "В зоне действия миномета стоит вражеская машина.";
 
comment "Далее развертываю миномет.";
 
[_MortarTeam, leader _MortarTeam, getPos _MortarTeam_NearestEnemy, leader _MortarTeam] call BIS_fnc_unpackStaticWeapon;
Sleep 15;
_MortarTeam setCombatMode "RED";
_Mortar_Gunner commandArtilleryFire [getPos _MortarTeam_NearestEnemy, "8Rnd_82mm_Mo_shells", 5];
 
Выскакивает ошибка и жалуется на позицию цели (ошибка в функции - типа нужен объект или маркер)
Помогите получить цель дляминомета и функции на его развертывание.
 
Спасибо заранее.
 

 


  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 27 January 2019 - 23:22

D_Donskoy, findNearestEnemy находит только тех врагов, которые "известны" для виртуального мозга солдафонов, которыми управляет ИИ. И в данном коде, результатом команды будет objNull. Следовательно команда getPos вернет [0, 0, 0], а далее сработает условие внутри функции:
if (_targetPos isEqualTo [0,0,0]) exitWith _err_badPosition;

Сообщение отредактировал vlad333000: 27 January 2019 - 23:22

  • 0

#3 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 27 January 2019 - 23:34

Решение? Сделать так, что бы отряд знал о каком-либо противнике, либо просто самому выбрать цель
  • 0

#4 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 27 January 2019 - 23:54

Да спасибо.

До меня уже доехало.

Т.е. нужно разворачивать миномет по условию типа: командиру миномета известно что это враг и где он и враг в зоне работы миномета;

И только тогда уже цеплять позицию врага - цели.


Сообщение отредактировал D_Donskoy: 27 January 2019 - 23:55

  • 0

#5 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 28 January 2019 - 14:54

В общем что то не получается у меня отсрочить развертывание миномета.

Прошу помощи в определении условия.

 

 

_SafePos = [getPos Player, 10, 15, 5, 0, 0, 0] call BIS_fnc_findSafePos;
 
_CreateMortarTeam = createGroup West;
_Unit = "B_Soldier_TL_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "SERGEANT"];
_Unit = "B_support_Mort_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "CORPORAL"];
_Unit = "B_support_AMort_F" createUnit [_SafePos, _CreateMortarTeam, "", 1.00, "PRIVATE"];
 
_MortarTeam = group leader _CreateMortarTeam;
_MortarTeamUnits = units _MortarTeam;
_Mortar_Gunner = _MortarTeamUnits select 1;
_Mortar_Gunner_Support = _MortarTeamUnits select 2;
 
_Wp_MortarTeam = _MortarTeam addWaypoint [_SafePos, 0];
_Wp_MortarTeam setWaypointBehaviour "SAFE";
_Wp_MortarTeam setWaypointCombatMode "YELLOW";
_Wp_MortarTeam setWaypointSpeed "LIMITED";
_Wp_MortarTeam setWaypointType "SAD";
 
/*waitUntil {У коммандира _MortarTeam есть цель или коммандир _MortarTeam знает о цели};*/
 
[_MortarTeam, leader _MortarTeam, getPos Цель, leader _MortarTeam] call BIS_fnc_unpackStaticWeapon;
Sleep 15;
_Mortar_Gunner commandArtilleryFire [getPos Цель, "8Rnd_82mm_Mo_shells", 3];
Sleep 30;
[_MortarTeam] call BIS_fnc_packStaticWeapon;
 
Я пробовал:
1. findNearestEnemy (

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

2. nearTargets (

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

 
Короче говоря я чего то не догоняю, потому что даже если я пытаюсь посчитать (count) цели:
1. Вариант. (выдает ошибку).
_NearestEnemy = leader _MortarTeam findNearestEnemy leader _MortarTeam;
_count_NearestEnemy = count _NearestEnemy;
sleep 0.25;
while {true} do {
 _count_NearestEnemy = count _NearestEnemy;
 hint formatText ["%1", _count_NearestEnemy];
 sleep 0.25;
};
2. Вариант (все время 0).
_NearestEnemy = leader _MortarTeam nearTargets 10000;
_count_NearestEnemy = count _NearestEnemy;
sleep 0.25;
while {true} do {
 _count_NearestEnemy = count _NearestEnemy;
 hint formatText ["%1", _count_NearestEnemy];
 sleep 0.25;
};
 
Как прикрутить "knowsAbout" или еще что ни будь про цель, у меня тоже не получается.
В общем, вот... помогите).

  • 0

#6 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 28 January 2019 - 16:49   Лучший Ответ

...
private ["_enemy"];

waitUntil { _enemy = _unit findNearestEnemy _unit; !isNull _enemy; };

hint str _enemy;
...

я пытаюсь посчитать (count) цели:

Посчитать можно только массив или строку, но не объект:
Return Value: Object

Вариант (все время 0).

nearTargets так же как и findNearestEnemy в результате выдает только те цели, которые известный виртуальному мозгу солдафонов

Сообщение отредактировал vlad333000: 28 January 2019 - 16:51

  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 28 January 2019 - 21:34

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

 

1 установить миномёт

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

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


  • 0

#8 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 28 January 2019 - 21:57

ЗЫ

Или как вариант заюзать это

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

с выборкой по базовому классу вражеской стороны.

если после запроса возвращён пустой массив, противников не найдено.

 

Но нужно учитывать это замечание

If you use "Man" as the class to look for, it will only find dismounted men. IE, men in vehicles will NOT be found.

 

А так же без излишнего фанатизма относиться к размеру радиуса опрашиваемой площади.


Сообщение отредактировал SteelRat: 28 January 2019 - 22:03

  • 0

#9 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 29 January 2019 - 00:26

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

 

1 установить миномёт

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

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

Что значит дать свободу?)

Тут надо тогда расстояние прикрутить - а то … из за угла выбегает противник и они такие хоп миномет собрали)))

Хотя в первом случае такое то же возможно)))


  • 0

#10 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 29 January 2019 - 01:30

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


 

Тут надо тогда расстояние прикрутить - а то … из за угла выбегает противник

Это война, воин)

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


Сообщение отредактировал SteelRat: 29 January 2019 - 01:33

  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 29 January 2019 - 02:50

SteelRat, что-то я сомневаюсь, что эти болваны догадаются с миномета стрелять.
а так да, D_Donskoy, что вам нужно в более широком смысле?
  • 0

#12 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 29 January 2019 - 10:34

Идея была прикрутить данный код к WARLORD или своему сценарию.

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

Так же дать игроку возможность запрашивать у них возможность поддержки минометом.

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

Все равно нужно говорить им об этом.

Вот в этом я не понимаю бисов - все как будто не доделано.


  • 0

#13 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 29 January 2019 - 20:26

Так же дать игроку возможность запрашивать у них возможность поддержки минометом.

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

Сообщение отредактировал vlad333000: 29 January 2019 - 20:27

  • 0

#14 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 29 January 2019 - 23:32

Подмогите еще чуток - как выйти из данного лупа?

 

waitUntil {
 if (not (_Targets == objNull)) then{
  hint "true";
 } else {
  hint "false";
 };
 Sleep 5;
};


  • 0

#15 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 30 January 2019 - 02:27

D_Donskoy, поменять местами if и sleep.
Добавить в конце каждого блока if-else значение true/false.
Заменить == на isNull (objNull != objNull - истинное выражение т. к. особенность Null - не быть равным ничему, даже самому себе).
И все же определиться с тем какую цель проверяете, _Targets - множественное число, а значит вы сюда массив запихали:
waitUntil {
    sleep 5;
    if (!isNull _target) {
        hint "true";
        true;
    } else {
        hint "false";
        false;
    };
};

  • 0

#16 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 30 January 2019 - 13:51

Спасибо.

Цель в единственном числе конечно - ближайшая (

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

)


  • 0




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