Feb 102017
 

Nextbot – это искусственный интеллект, который используется в Team Fortress 2 и Left 4 Dead. В этом пошаговом руководстве описан простейший ИИ, который будет искать противника (Вас) и преследовать его, пока тот не умрет или не исчезнет с поля зрения. Также он будет выполнять разные произвольные действия, если поблизости нет врагов.

Начнем

Сначала создайте файл с расширением .lua для вашей энтити. Тот, который я сделал для этого руководства расположен в “addons/Nextbot_tut/lua/entities” и называется “simple_nextbot.lua”. Теперь откройте этот файл, чтобы начать добавлять код.

Код

Основные вещи, которые нам требуются для энтити

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

Вещи, связанные с противником

Здесь мы добавим некоторые полезные функции, связанные с противником. НПС/Бот неполноценен, если он не может определить цель, так ведь? Поэтому нам нужны функция для проверки наличия текущего противника и функция поиска противника. Я добавил всякие комментарии, так что вы точно поймете, что делают эти функции.

Корутины

Теперь, когда наш бот умеет искать противника, нам потребуется обучить его некоторым вещам, кроме как просто владеть этим противником. Это будет следующей частью, в которой будет настроена основа нашего ИИ. Корутины (Сопрограммы) – это большая зацикленная часть кода в виде функции, поддерживающая остановки и продолжения выполнения кода с помощью coroutine.wait( время ). Они позволяют делать что-либо в определённом временном порядке. Таким образом, мы можем повернуть бота в сторону противника или воспроизвести анимацию. Это будет работать в цикле до тех пор, пока бот существует. После того, как выполняться все инструкции, бот вернется в начало и снова повторит свои действия. Ниже приведён пример для простейшего бота.

Проще простого, да? Дойти до случайной точки и ждать две секунды, после чего переходить к следующей. К счастью, это не то, чего мы хотим достигнуть. Следующий шагом мы улучшим наш ИИ.

“Мозг” нашего бота

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

  • Проверить наличие противника и если его нет, то использовать описанную выше функцию HaveEnemy().
  • Если противник есть, то воспроизвести некоторые анимации и бежать к игроку.
  • Если противника все же нет, то двигаться к случайной точке.
  • Остановиться на 2 секунды.

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

Что же делает функция ChaseEnemy() ?

Вы, наверное, заметили, что эта функция пока еще нигде не определена и её нет на вики. Она очень похожа на гарисовскую Nextbot функцию MoveToPos, за исключением некоторых полезных изменений:

  • Она строит пусть непосредственно к противнику.
  • Продолжает обновлять путь при изменении позиций бота с противником.
  • Перестает преследовать противника, если он исчез. Используется функция HaveEnemy().

Это выглядит вот так:

Взгляните на гарисовскую функцию и на эту, если хотите увидеть конкретные изменения.

Почти готово

Теперь бот завершен и Вам необходимо только добавить его во вкладку с NPC. Это достаточно просто:

Здесь замените оба “simple_nextbot” на название файла Вашего бота. Остальные параметры говорят сами за себя.

Задачи

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

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

Весь код

Источник: http://wiki.garrysmod.com/page/NextBot_NPC_Creation

Psycrow

Один из основателей и ведущий разработчик Next21 Team (или нет). Имеет специфичные вкусы. Любит геймдев и музыку. Характер мягкий. Не женат.

Оставить комментарий

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