Воскресенье, 22 Декабря 2024, 12:54

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Создание ботов для FPS Creator X9
PsychoДата: Вторник, 06 Октября 2009, 15:04 | Сообщение # 1
Психоламер
Сейчас нет на сайте
Здравствуйте. "Гуляя" по форумам о конструкторе игр FPS Creator X9 я не раз лицезрел всё изобилие жалоб на (мягко говоря) глупое поведение искусственного интеллекта. Но я все же решился делать проект именно на этом движке и... столкнулся с такой же поблемой. Однако изучение языка скриптов FPI, который используется в этом движке, навело меня на мысль о том, что ситуация с откровенно тупыми ботами поправима если не полностью, то до терпимого уровня.

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

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

Добавлено (06.10.2009, 15:01)
---------------------------------------------
Итак, перед нами Stealth AI для FPSC X9!

Quote
;Triggers

:state=0:state=1
:state=1,losetarget=5:state=10
:state=1,plrcanbeseen,plrdistwithin=400:state=20
:state=1,shotdamage=1:rotate toplr,state=20
:state=1,random=20:rotateheadrandom=55
:state=1:animate=2,movefore=2.5

:state=10,random=1:state=11
:state=10:rotatey=90 ,animate=2,movefore=2.5,state=0
:state=11:rotatey=-90,animate=2,movefore=2.5,state=0

:state=20,plrcanbeseen:state=21
:state=21,plrcanbe seen:settarget
:state=21,plrcannotbeseen,losetarget=1:state=10
:state=21,healthless=31:state=40
:state=21,ifweapon=1,plrdistfurther=100:f ollowplr=1,animate=5
:state=21,plrdistwithin=101:rotatetoplr
:state=21,ifweapon=1,plrdistwithin=301,plrcanbeseen=46:animate=1,rotatetoplr, freeze,useweapon,rundecal=6
:state=21,ifweapon=0:animate=1,freeze,state=22,setframe=6
:state=21,plrdistwithin=300,random=20:state=25
:sta te=21,plrdistwithin=100:state=30
:state=22:incframe=6
:state=22,frameatend=6:state=21,reloadweapon,sound=audiobank\guns\reload.wav
:state =25,random=1:state=26,setframe=4
:state=25:state=27,setframe=3
:state=26:incframe=4,strafe=90,rotatetoplr
:state=26,frameatend=4:state=21 ,animate=1
:state=27:incframe=3,strafe=-90,rotatetoplr
:state=27,frameatend=3:state=21,animate=1
:state=30:state=31,setframe=5
:state=31 :incframe=5,strafe=180,rotatetoplr
:state=31,frameatend=5:state=21,animate=1

:state=40:state=42
:state=42,ifweapon=1,plrdistwithin=601, plrcanbeseen=46:animate=1,rotatetoplr,freeze,useweapon,rundecal=6
:state=42:rotatetotarget,rotatey=180,resethead,animate=5,state=43
:state =43:runfore=10
:state=43,random=5:rotateheadrandom=65
:state=43,losetarget=1:state=50
:state=43,plrcanbeseen:settarget,state=42

:state =50:timerstart,state=51,rotatey=180,animate=31
:state=51,timergreater=5000:state=10,animate=5
:state=51,random=5:rotateheadrandom=35

;End of Script

Добавлено (06.10.2009, 15:02)
---------------------------------------------
Начало скрипта:

Quote
;Triggers

:state=0:state=1
:state=1,losetarget=5:state=10
:state=1,plrcanbeseen,plrdistwithin=400:state=20
:state=1,shotdamage=1:rotate toplr,state=20
:state=1,random=20:rotateheadrandom=55
:state=1:animate=2,movefore=2.5


Теперь разберем этот скрипт.

:state=0:state=1 - значение :state=0 означает самое первое дейсвие, которое является началом выполнения скрипта, далее за ним идет :state=1 (где "1" - порядковый номер действия)
ЭТО ВАЖНО! Воизбежании неработоспособности скрипта не дублируйте действие :state=0 .

:state=1,losetarget=5:state=10 - здесь проверяется выполнения условия losetarget= - этот параметр означает, что ИИ потерял игрока из поля зрения, т.е. если это условие выполняется, то ИИ выполняет действия из :state=10

:state=1,plrcanbeseen,plrdistwithin=400:state=20 - Если игрок видим для ИИ (параметр plrcanbeseen) при дистанции 400 (параметр plrdistwithin=400), то ИИ выполняет действие из :state=20

:state=1,shotdamage=1:rotatetoplr,state=20 - Если игрок стреляет в ИИ (параметр shotdamage=1), то ИИ поворачивается лицом к игроку (параметр rotatetoplr), затем выполняет действие state=20

:state=1,random=20:rotateheadrandom=55 - параметр random=20:rotateheadrandom=55 означает, что ИИ будет смотреть в разные стороны в поисках игрока.

:state=1:animate=2,movefore=2.5 - Анимация ИИ при поиске игрока

ЭТО ВАЖНО! Числовое значение параметра :animate= может быть изменено в зависимости от ваших предпочтений. Числовые значения анимации: 2-шаг, 5-бег. Остальные значения при передвижении ИИ не используются. 1-неподвижность, 3,4 - шаг в сторону (вправо/влево), 6-перезарядка.

Добавлено (06.10.2009, 15:03)
---------------------------------------------
ИИ теряет игрока из поля зрения:

Quote
:state=10,random=1:state=11
:state=10:rotatey=90,animate=2,movefore=2.5,state=0
:state=11:rotatey=-90,animate=2,movefore=2.5,state=0

Разберём этот скрипт.

:state=10,random=1:state=11 - параметр random=1:state=11 означает, что будет выполнено действие либо :state=10, либо :state=11. Команда random=1 хорошо подойдет, если Вы хотите сделать несколько реакций бота на одно и то же событие.

:state=10:rotatey=90,animate=2,movefore=2.5,state=0 и :state=11:rotatey=-90,animate=2,movefore=2.5,state=0 - эти команды отличаются лишь одним значением - rotatey=, при котором ИИ поворачивается и начинает идти в одну из сторон. Если вейпоинты ИИ зациклены, т.е. путь ИИ является круговым, то он выберет одно из направлений движения.

Добавлено (06.10.2009, 15:03)
---------------------------------------------
ИИ Вас заметил:

Quote
:state=20,plrcanbeseen:state=21
:state=21,plrcanbeseen:settarget
:state=21,plrcannotbeseen,losetarget=1:state=10
:state=21,healthless=31: state=40
:state=21,ifweapon=1,plrdistfurther=100:followplr=1,animate=5
:state=21,plrdistwithin=101:rotatetoplr
:state=21,ifweapon=1,plrdi stwithin=301,plrcanbeseen=46:animate=1,rotatetoplr,freeze,useweapon,rundecal=6
:state=21,ifweapon=0:animate=1,freeze,state=22,setframe=6
: state=21,plrdistwithin=300,random=20:state=25
:state=21,plrdistwithin=100:state=30
:state=22:incframe=6
:state=22,frameatend=6:state=21,r eloadweapon,sound=audiobank\guns\reload.wav
:state=25,random=1:state=26,setframe=4
:state=25:state=27,setframe=3
:state=26:incframe=4,str afe=90,rotatetoplr
:state=26,frameatend=4:state=21,animate=1
:state=27:incframe=3,strafe=-90,rotatetoplr
:state=27,frameatend=3:state=21, animate=1
:state=30:state=31,setframe=5
:state=31:incframe=5,strafe=180,rotatetoplr
:state=31,frameatend=5:state=21,animate=1

Разберем скрипт.

:state=20,plrcanbeseen:state=21 - Если ИИ Вас заметил, выполняется действие :state=21

:state=21,plrcanbeseen:settarget - Если игрок замечен, ИИ начинает атаку.
[/u]ЭТО ВАЖНО! В :state=21 команда plrcanbeseen: повторяется не случайно. В данном случае это значит, что ИИ продолжает Вас видеть, т.е. Вы не пропали из его поля зрения.

:state=21,plrcannotbeseen,losetarget=1:state=10 - Если ИИ больше не видит игрока (plrcannotbeseen,losetarget=1), то выполняется действие :state=10 (см. "ИИ теряет игрока из поля зрения")

:state=21,healthless=31:state=40 - Если здоровье ИИ будет меньше чем 31, ИИ выполнит действие :state=40

:state=21,ifweapon=1,plrdistfurther=100:followplr=1,animate=5 - в случае, если у ИИ есть оружие и патроны (параметр ifweapon=1), и игрок находится от ИИ на расстоянии 100 (параметр plrdistfurther=100:), он преследует игрока (параметр followplr=1) с анимацией animate=5 (в данном случае - бег. Напомню: Числовые значения анимации: 2-шаг, 5-бег. Остальные значения при передвижении ИИ не используются.

:state=21,ifweapon=0:animate=1,freeze,state=22,setframe=6 - Если же у ИИ нет оружия или паронов (параметр ifweapon=0), то проигрывается анимация (animate=1), при этом он ни куда не двигается (параметр freeze), выполняет действие state=22. setframe=6 - этот параметр показывает, что анимация останавливается на 6й позиции (кадре).
ЭТО ВАЖНО! Значение setframe=6 является оптимальным, изменение его приведет к некачественной анимации.

:state=21,plrdistwithin=300,random=20:state=25 - Если игрок находится на расстоянии 300 от ИИ (параметр plrdistwithin=300), либо продолжается выполнение всех действий помеченных state=21, либо выполняется действие :state=25

:state=21,plrdistwithin=100:state=30 - Если игрок находится на расстоянии 100 от ИИ (параметр plrdistwithin=100), выполняется действие :state=30

:state=22:incframe=6 - включение анимации начиная с 6й позиции (параметр :incframe=6)

:state=22,frameatend=6:state=21,reloadweapon,sound=audiobank\guns\reload.wav - Когда анимация вновь приходит к началу, т.е. к позиции 6, выполняется действие :state=21, одновременно с этим происходит перезарядка оружия (параметр reloadweapon) и проигрывается звук audiobank\guns\reload.wav (параметр sound=)
ЭТО ВАЖНО! Процесс перезарядки представлен из стандартного скрипта ИИ, изменять его нет смысла. В этой статье он представлен для ознакомления.

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

Добавлено (06.10.2009, 15:04)
---------------------------------------------
ИИ преследует игрока:

Quote
:state=40:state=42
:state=42,ifweapon=1,plrdistwithin=601,plrcanbeseen=46:animate=1,rotatetoplr,freeze,useweapon,rundecal=6
:state=42:rota tetotarget,rotatey=180,resethead,animate=5,state=43
:state=43:runfore=10
:state=43,random=5:rotateheadrandom=65
:state=43,losetarget=1:st ate=50
:state=43,plrcanbeseen:settarget,state=42

:state=50:timerstart,state=51,rotatey=180,animate=31
:state=51,timergreater=5000:state =10,animate=5
:state=51,random=5:rotateheadrandom=35

;End of Script


Что это значит.

:state=40:state=42 - переход к действию :state=42

:state=42,ifweapon=1,plrdistwithin=601,plrcanbeseen=46:animate=1,rotatetoplr,freeze,useweapon,rundecal=6 - Если у ИИ все в порядке с оружием и патронами (параметр ifweapon=1), и игрок надодится на расстоянии 601 от ИИ (параметр plrdistwithin=601) и при этом видит игрока (параметр plrcanbeseen=46), то выполняется анимация (параметр animate=1), при этом ИИ поворачивается к игроку (парамер rotatetoplr) не делая шагов с стороны (параметр freeze), и использует оружие (параметр useweapon). Параметр rundecal=6 является деколью выстрела, изменять его не имеет смысла.

:state=42:rotatetotarget,rotatey=180,resethead,animate=5,state=43 - в этой команде отображается поворот ИИ к игроку (параметр rotatetotarget), его поворотливость (параметр rotatey=180), восстановление стандартной позици головы ИИ (параметр resethead) и анимация бега ИИ (параметр animate=5). Т.е. ИИ периодически приближается к игроку.

:state=43:runfore=10 - скорость приближения ИИ

:state=43,random=5:rotateheadrandom=65 - при беге ИИ оглядывается

:state=43,losetarget=1:state=50 - Если несмотря на предидущий пункт, ИИ все же потерял игрока из поля зрения, выполняется действие :state=50

:state=43,plrcanbeseen:settarget,state=42 - Если ИИ все же увидел игрока, он возвращается к выполнению действия state=42

:state=50:timerstart,state=51,rotatey=180,animate=31
:state=51,timergreater=5000:state=10,animate=5
:state=51,random=5:rotateheadrandom=35
- Эта часть скрипта отвечает за действия ИИ при потере игрока. Параметр timergreater=5000 задает 5000 мс времени прежде чем ИИ начнет действие :state=10

Сообщение отредактировал Psycho - Вторник, 06 Октября 2009, 15:31
BuROBДата: Вторник, 06 Октября 2009, 15:30 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
wacko я лично не понял

Мой клан Half-life 2 Deathmacht


...<Scripter>...
VinchensooДата: Вторник, 06 Октября 2009, 16:38 | Сообщение # 3
Злобный социопат с комплексом Бога
Сейчас нет на сайте
BuROB, это программировании ии скриптами, насколько я понял..

PsychoДата: Пятница, 09 Октября 2009, 09:29 | Сообщение # 4
Психоламер
Сейчас нет на сайте
Quote (Vinchensoo)
это программировании ии скриптами, насколько я понял..

Да. Это так скажем перевод языка скриптов ИИ на человеческий язык biggrin

Добавлено (09.10.2009, 09:29)
---------------------------------------------
Добрался-таки своими загребущими ручёнками до озвучки ботов. В скором времени выложу скрипт с уже озвучеными ботами wink

warr11rДата: Воскресенье, 11 Октября 2009, 03:22 | Сообщение # 5
Скептик
Сейчас нет на сайте
Немного неправильный перевод фпи-языка, но в общем заметно понимание автором предмета урока. Видно, что автор не новичок, и скорее всего, я должен быть с ним знаком. Psycho, под какими никами я могу тебя знать на других форумах?

Модератор форума про FPSC.


PsychoДата: Среда, 14 Октября 2009, 19:35 | Сообщение # 6
Психоламер
Сейчас нет на сайте
Quote (warr11r)
Немного неправильный перевод фпи-языка

Вполне возможно) На момент написания материала я изучал FPI в течении 4х дней.
Quote (warr11r)
заметно понимание автором предмета урока

Благодарю)
Quote (warr11r)
Видно, что автор не новичок

Вот тут вы ошиблись biggrin Я не так давно начал работу с этим конструктором))
Quote (warr11r)
и скорее всего, я должен быть с ним знаком. Psycho, под какими никами я могу тебя знать на других форумах?

Эм... вообще кроме этого форума я больше то ниге и не сижу... Но, если честно, у меня тоже создалось ощущение что мы знакомы)))
warr11rДата: Пятница, 16 Октября 2009, 11:35 | Сообщение # 7
Скептик
Сейчас нет на сайте
Quote (Psycho)
Вполне возможно) На момент написания материала я изучал FPI в течении 4х дней.

Неплохой прогресс для такого промежутка времени.
Тем более для самоучки.


Модератор форума про FPSC.


VinchensooДата: Пятница, 16 Октября 2009, 16:15 | Сообщение # 8
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (warr11r)
Неплохой прогресс для такого промежутка времени.
Тем более для самоучки.

видимо, Psycho, умный парень happy


ArtempДата: Вторник, 23 Марта 2010, 02:36 | Сообщение # 9
был не раз
Сейчас нет на сайте
Очень помогло, немного стал представлять как работают мозги ботов, вот только вопрос, как же всё таки можно улутшить "интелект" комьпьтерных ботов? Из вышесказанного я понял только что могу изменить несущественные детали, игру они инересней ни сделают (скорее наоборот), а для улутшения AI нужно менять алгоритм, так ведь? Может есть идеи на этот счёт? Я ничего лутше чем уже есть себе непредставляю.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг