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


Фотография

Вопросы по значениям "knowsAbout"


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

#1 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 26 February 2021 - 19:32

Добрый день. У меня есть два вопроса по поводу KnowAbout:
 
 
1) Я знаю, что число «KnowAbout» варьируется от 0 до 4, где 4 - максимальное значение.
 

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

 
Посему, вопрос - я хотел бы знать, какое значение использует стандартный триггер обнаружения, если, например, игрок использует условие триггера «BLUFOR обнаружен OPFOR» в активации триггера?
 
При каком именно значении «KnowAbout» сработает триггер? К сожалению, я не знаю этого числа ...
 
 
 
2) Например, я хочу создать триггер, который будет активироваться только в том случае, если осведомленность красной стороны (OPFOR) о синей (BLUFOR) имеет значения > 3.5, только это значение, не меньше!
 
Подскажите пожалуйста, как это правильно написать в ините триггера? Я пробовал использовать триггер с условиями активации "присутствие синих единиц внутри триггера" и дополнительных значений триггера таким образом:
 
this and (east knowsAbout west > 3.5);
я пробовал и так:
 
this and (opfor knowsAbout blufor  > 3.5);
 
Но игра этого не принимает! Я вижу сообщение об ошибке
 
Это выглядит очень странно, так как я использую переменные, взятые на вики Богемии - 

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

 
В чем моя ошибка, если переменные фракций верны?

Сообщение отредактировал mickeymen: 26 February 2021 - 19:36

  • 0

#2 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 26 February 2021 - 20:41

 

Добрый день. У меня есть два вопроса по поводу KnowAbout:
 
 
1) Я знаю, что число «KnowAbout» варьируется от 0 до 4, где 4 - максимальное значение.
 

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

 
Посему, вопрос - я хотел бы знать, какое значение использует стандартный триггер обнаружения, если, например, игрок использует условие триггера «BLUFOR обнаружен OPFOR» в активации триггера?
 
При каком именно значении «KnowAbout» сработает триггер? К сожалению, я не знаю этого числа ...
 
 
 
2) Например, я хочу создать триггер, который будет активироваться только в том случае, если осведомленность красной стороны (OPFOR) о синей (BLUFOR) имеет значения > 3.5, только это значение, не меньше!
 
Подскажите пожалуйста, как это правильно написать в ините триггера? Я пробовал использовать триггер с условиями активации "присутствие синих единиц внутри триггера" и дополнительных значений триггера таким образом:
 
this and (east knowsAbout west > 3.5);
я пробовал и так:
 
this and (opfor knowsAbout blufor  > 3.5);
 
Но игра этого не принимает! Я вижу сообщение об ошибке
 
Это выглядит очень странно, так как я использую переменные, взятые на вики Богемии - 

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

 
В чем моя ошибка, если переменные фракций верны?

Добрый день.
Все дело в том, что target в команде knowsAbout не может быть стороной, а может быть только объектом (одним словом - определенным ботом).
Если Синих на карте не так много, можешь попробовать такой код:

this && ({if (east knowsAbout _x > 3.5) exitWith {true}; false} forEach (allUnits select {side _x == west}));

  • 1

#3 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 26 February 2021 - 23:05


Все дело в том, что target в команде knowsAbout не может быть стороной, а может быть только объектом (одним словом - определенным ботом)

 

Спасибо!

 

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

 

Как одна сторона идинтифицирует другую?

Ведь если в тебя стреляют с расстояния 500 метров ты никогда не поймешь кто в тебя стреляет американец или русский)

 

 


Если Синих на карте не так много, можешь попробовать такой код

А какая разница сколько синих? неужели это может влиять как то на стабильность этого кода?

В общем я провел тест. Создал триггер на активацию присутсвия Синих в его радиусе и в ините прописал так:

this and ({if (east knowsAbout _x > 2.5) exitWith {true}; false} forEach (allUnits select {side _x == west}))

вроде сработало!

 

Только совершенно не понимаю что означают переменные в данной скриптовой линии. Все как то усложнено


Сообщение отредактировал mickeymen: 26 February 2021 - 23:51

  • 0

#4 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 27 February 2021 - 00:30

mickeymen, количество Синих влияет на производительность, потому что код в триггере каждый раз считывает значение knowsAbout для  каждого бойца Синих.

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

Идентификация, насколько я понимаю, происходит по "родителю снаряда", но могу ошибаться.

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


  • 0

#5 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 27 February 2021 - 01:12

mickeymen, количество Синих влияет на производительность, потому что код в триггере каждый раз считывает значение knowsAbout для  каждого бойца Синих.

Должно быть чуть производительнее:

this and { (allUnits findIf { ((side _x) == blufor) and { (opfor knowsAbout _x) > 2.5 } }) >= 0 }

  • 1

#6 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 27 February 2021 - 02:02


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

 

Спасибо за разьяснение.

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

 

 

 


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

Знаю об этом! Это меня и раздражало.

По этой причине триггер на "обнаружение по фракции" мгновенно срабатывал если установленная синими мина взрывалась!. посему, я хотел создать активацию триггера по значению knowsAbout в пределах 0-4

 

 


Должно быть чуть производительнее:

Благодарю, нужно будет протестить.

 

 

Спасибо друзья, уже очень помогли мне!


Сообщение отредактировал mickeymen: 27 February 2021 - 02:09

  • 0

#7 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 08 October 2021 - 02:15


Должно быть чуть производительнее: this and { (allUnits findIf { ((side _x) == blufor) and { (opfor knowsAbout _x) > 2.5 } }) >= 0 }

 

Привет! Я пробовал играться с этими кодами, но каждый раз, для того чтобы триггер сработал на максимальное значение обнаружения требуются лишь несколько выстрелов игрока! Это ведь такая чушь, я стреляю с расстояния 500 метров с глушителем!
Какой солдат, на таком расстоянии обнаружит за несколько секунд противника с глушителем и максимально идентифицирует его!?
Или Арма работает так тупо и неестественно или код не правильный.  Я понимаю что скорее всего это первое, но мне хочется понять может что то мы делаем не так?
 
Я делаю так, ставлю себя синим на карте, ставлю условие треггера "присутствие синих в радиусе" в котором я нахожусь и добавляю этот блок в условие триггера:
this and { (allUnits findIf { ((side _x) == blufor) and { (opfor knowsAbout _x) > 3.9 } }) >= 0 }

В общем получается треггер, который должен сработать если я в нем присутствую и если противник обо мне максимально осведомлен (уровень осведомленности ИИ - 4.0)

 

Далее, Ставлю себя на расстоянии 500 метров от группы противника, одеваю глушитель+маскировочный костюм и треггер срабатывает уже, на 3-4 выстрел! Я бы хотел понять сто означает ">= 0", если мы уже указываем значение обнаружения "> 3.9"

 

Я пробовал снижать в настройках игры значение "уровень ИИ" (Я обычно играю на цифре "0.8" до "0.35", но разница будет микроскопическая. ИИ все равно полностью обнаружит меня, на 3-5 секунде позже.

 

Моя задача создать триггер, при котором игрок будет иметь хоть какую то возможность оставаться полностью не обнаруженным какое то время. Я надеялся на этот интервал (0-4), но как выясняется, если Игрок стреляет (не важно с глушителем или без и не важно какой боеприпас, какой костюм) то уровень осведомленности у вражеского ИИ поднимается мгновенно до максимального значения 4.0! 

 

 @Schatten  Может код не верный?

 

PS: Я использую мод Real Engine, он позволяет лучше оставаться не замеченным бойцу, использующему костюм Full Ghilie, это прекрасно работает но лишь до той поры пока прячущийся не начнет стрелять. Таким образом, маскировка костюма не влияет на обнаружение стреляющего при стрельбе, визуальное обнаружение не стреляющих работает отдельно

 

 

 


Сообщение отредактировал mickeymen: 08 October 2021 - 02:22

  • 0

#8 OFFLINE   Ibragim

Ibragim

    Сержант

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

Отправлено 08 October 2021 - 12:27

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

_enemy forgetTarget player;
_enemy reveal [player, 0];

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

 

Но попробуй поставить игроку обработчик событий "FiredMan" и изменить в блоке родителя пули:

_projectile setShotParents [objNull, objNull]; 

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

player setUnitTrait ["audibleCoef", 0.1];
player setUnitTrait ["camouflageCoef", 0.1]; 

 
 

 


  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 10 October 2021 - 16:26

Может код не верный?

Код верный, но ИИ Arma 3 странно работает -- сам удивляюсь, что боты без проблем распознают игрока, стреляющего с глушителем. Ничего не могу сказать.


  • 0

#10 OFFLINE   ToxaBes

ToxaBes

    Ефрейтор

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

Отправлено 12 October 2021 - 19:55

 

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

 

 

Насколько я помню проблема в скорости передачи информации между ботами. Вам стоит попробовать динамически менять часть субскиллов:

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

_3:_AI_Skill

 

Обратите внимание на commanding - как быстро боты передают информацию о целях друг другу. Возможно стоит указать околонулевые значения когда игрок с глушителем и увеличивать этот параметр если игрок стреляет без глушителя. 

Для подавления индивидуальной внимательности ботов используйте параметры spotDistance - влияет на дальность зрения и слуха ботов; spotTime - влияет на скорость и точность обнаружения. Их тоже можно менять динамически в зависимости есть глушитель или нет.


Сообщение отредактировал ToxaBes: 12 October 2021 - 19:56

  • 0

#11 OFFLINE   mickeymen

mickeymen

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

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

Отправлено 13 October 2021 - 02:44

Спасибо всем, но все это очень сложно. Думать и создавать скрипты потом тестить их и снова...

 

Я нашел алтернативу в качестве модов для ИИ, с ними ситуация получше.

Всегда использовал LAMBS Danger как один мод, но когда скачал обновленную версию LOGIC FSM и совместил их, то сделал тест.

В LOGIC FSM можно настраивать многое , в том числе, при какой дистанции ИИ слышит выстрел.

Жаль что мод не делит настрйку на "с глушителем" и "без", однако я заметил что автор мода сам учел эту разницу.

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

Так же с этим модом моя формула :

this and { (allUnits findIf { ((side _x) == blufor) and { (opfor knowsAbout _x) > 3.9 } }) >= 0 }

будет работать лучше! ИИ заметит игрока несколько позже! Всем советую этот мод, он просто суперский!

Причем исправляет много других вещей не связанных с ИИ!


  • 0




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