Morrowind:Работа с NPC и AI

Материал из Tiarum
Перейти к: навигация, поиск
Morrowind: Работа с NPC и AI
45px-Scroll.png

автор: zOmb aka ZomBoss
перевод: Garin
редактирование: Garin
ccылка на оригинал: Работа с NPC и AI
ссылка на сайт: LastDwemer, официальный сайт проекта "Сыны Кагренака"


Работа с NPC и AI



Диалоговое окно свойств NPC

В поле свойств мы видим много полей.

Пойдём по порядку:

  • ID - уникальное обозначение NPC. Обычно существует только 1 непись с одним ID, но есть исключения типа стражников, вампиров и спящих. Вы можете наделать много копий NPC, но помните, что с копиями не могут работать удалённые скрипты.
  • Name – просто имя. Может быть что угодно. Именно это и увидит плейер. Если тут будет пусто, плеер увидит ID.
  • Script – скрипт, висящий на персе.
  • Race – раса персонажа. Справа галочка, отвечающая за смену пола NPC. Поставили – женщина, не поставили – мужик. Ещё правее вы видите 2 окна со списком. В верхнем вы выбираете голову, а в нижнем – причёску подопытного.
  • Class – класс персонажа. Он отвечает за начальные навыки непися. Если вы установите галочку "auto calculate stats", то только класс и уровень будут определять навыки персонажа, в противном случае вы можете выставить их сами. Навыки влияют на броню, оружие, магию, которую использует непись. Если навык будет развит слабо (слабее, чем другой), то он просто не оденет выданную ему броню и возьмёт в руки оружие. Так что выдавайте неписям оружие и броню, которой они умеют пользоваться. Также класс влияет на услуги, которые оказывает персонаж. Если вы хотите сделать кузнеца, который будет чинить и торговать, то и ищите, соответственно, класс smith. Если хотите вора-торговца, то ставьте thief-service и т.д.
  • Faction&Ranc – соответственно, фракция, в которой состоит персонаж и его ранг.

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

  • Corpses Persist – если поставить, то труп непися не пропадёт никогда.
  • Respawn – отвечает за возрождение персонажа. Вы наверняка замечали, что стражники, погонщики силтстрайдеров, вампиры возрождаются через некоторое время. Вот тут это и устанавливается.


Ниже идут стандартные характеристики от силы и ловкости до стамины и магии.


  • Disp - начальное отношение лично непися к вам. Но в игре оно может быть другим, ведь будут учитываться такие факторы, как отношение раса-раса, и фракция-фракция.
  • Rep – репутация само непися. Чем она выше, тем труднее будет с ним договориться.
  • Blood texture – текстура вылетающей из него крови. У всех она всегда красная, но если вам вдруг захочется, можете сделать белой или золотой.


Ниже идут скиллы персонажа.

Переходим на правую сторону окна.


  • Кнопка Add animation file - позволяет добавить свою собственную анимацию движений неписю. Мало кто может делать хорошие анимации, тем более для людей, так что оно вам вряд ли понадобится. Сами бефсесдовцы использовали, а точнее, хотели использовать эту функцию только 1 раз. Помните танцовщиц в Суране? Так они должны танцевать. В архивах игры есть их анимация xanim_dancinggirl.nif, но её почему то забыли подключить. Кстати, кроме выбранной в этом пункте анимации, непись не будет делать ничего.
  • Закладка Items - в ней лежат все предметы, которые есть у непися и которыми он торгует. Кроме того, он может торговать и предметами, которые ему приписаны в их свойствах, но только если по классу он может торговать предметами этого типа. Вы замечали, что у ростовщиков можно купить всякую фигню типа тарелок и вилок? Это именно из-за этого. Все эти предметы лежат в его доме на столах и полках и, по идее, не предназначены для продажи. Также, если вы хотите, чтобы предметы у непися не кончались, то поставьте слева отрицательное количество.
  • Закладка Spells – заклинания, которые знает персонаж. Но если он недостаточно хорошо знает какую-то школу магии, то он и не будет пользоваться такими заклинаниями.
  • Кнопка Dialogue вызывает меню диалогов с уже выставленным на этого непися фильтром.
  • Кнопка Animation позволяет просмотреть, какие анимации доступны персонажу. Они тут все стандартные.
  • Кнопка AI позволяет настроить поведение непися. Давайте туда и перейдём:


Кнопка AI

На первой закладке Package можно настроить перемещения непися в пространстве.


Wander


В списке по умолчанию присутствует только 1 пункт - Wander. Он отвечает за анимации, проигрываемые неписём (почёсывания, верчение головой…) и за перемещение его вокруг точки, где он был поставлен в редакторе. Для изменения пункта щёлкните по нему 2 раза, а для удаления - выделите и нажмите клавишу Delete на клаве. Итак, там Distance означает расстояние, на которое он отойдёт от своего начального положения. 2 соседних окошка отвечают за то, как часто и как долго он будет бродить.

Idle chance – шанс в процентах, что непись совершит какую-то анимацию. Приведём список этих анимаций:

Человек мужчина:

Idle1 Стоять смирно
Idle2 Перенос веса с одной ноги на другую
Idle3 Посмотреть назад
Idle4 Почесать голову, потрясти головой
Idle5 Поправить одежду или броню на плече
Idle6 Зевать и потягиваться
Idle7 Посмотреть на пальцы и оглянуться вокруг
Idle8 Положить руку на грудь, как при боли в сердце
Idle9 Потянуться за оружием, затем дотронуться до головы.


Человек женщина – как и выше, кроме:

Idle5 Рука на бедро


Хаджит женщина – как Человек мужчина, кроме:

Idle9 Почесать голову, потрясти головой


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

AIWander, 512, 5, 0, 0,20,0,0,10,30,0,0,0

где 1-е число соответствует Distance, затем Duration, time и все idle.

Итак, если вы сделаете режим Wander с параметрами 512, 5, 0, 0, 20, 0, 0, 10, 30, 0, 0, 0, то ваш непись будет регулярно прогуливаться по локации на расстояние не более 512 ед. от своего первоначального положения, изредка останавливаясь(idle), почёсываясь(idle4) и поправляя одежду на плече (idle5). В общем, он будет вести себя живенько. Большинство стандартных неписей ведёт себя похожим образом и, если ваш подопытный ничем не выделяется из их числа, то можно вообще оставить стандартные настройки. А вот если нет... Вот, например, паромщик из моего плага WindyBoat, который стоит на корпусе лодки, не должен никуда ходить или он свалится. Поэтому я поставил Distance на 0. Если вы делаете какого-нибудь божка или короля, то будет не совсем разумно позволять ему почёсываться. Тогда ставим вероятность выпадения соответствующего idle на 0.


В меню Add package также можно выбрать и другие действия.


Travel


Travel заставляет непися идти в назначенную точку. Нажав на кнопку View location, вы можете визуально её определить по красному кресту. Этот крест вы можете спокойно двигать мышкой. Если вы поставите несколько travel’ов, то можете сделать маршрут и заставить непися «патрулировать территорию», бегая между этими точками. Можно также задать это строкой: AITravel [координата х] [координата у] [координата z]


Escorte


Escorte заставляет вести куда-то выбранного актора (плейера, непися, кричера). Он идёт впереди и, если ведомый отстаёт, будет ждать его. Помните белого гуара? Когда вы с ним встречаетесь, он ласково смотрит вам в глаза, разворачивается и уходит. Если вы не идёте за ним, он останавливается и ждёт. Это очень удобно применять, чтобы довести плейера до квестовой точки, как, например труп, вещи, дом, в конце концов. Только есть один нюанс. Актор остановится не только, если плеер отстанет, но и если будет опережать его. Можно также задать это строкой:


AIEscort, "Actor ID", duration [координата х] [координата у] [координата z].


Follow


Follow заставляет непися следовать за целью, как компаньон из Трибунала. В начальных настройках почти никогда не используется. Глупо переводить непися в компаньоны, если вы с ним даже не познакомились. А вот устанавливать в разговоре или по скрипту – это применяется часто. Команда выглядит так:


AiFollow, "Actor ID", duration, [координата х] [координата у] [координата z]


Если указать нулевые координаты, то цель будет следовать за актором до поступления новых инструкций. Так, например, если вы укажете в результате диалога строку AiFollow, "Player", 0,0,0,0, то заставите непися следовать за плейером и охранять его. Для того, чтобы отменить это действие, то есть попросить непися “подождать здесь”, надо установить команду AIWander, например


AIWander, 512, 5, 0, 0,40,40,10.


Activate


Activate, который, по идее, должен заставлять непися активировать какой-то объект не работает.


Поле Fight


Поле Fight отвечает за агрессивность персонажа. Коротко говоря, если эта величина более 50, то он на вас нападёт, а если не коротко, то вот выдержка из MSfD8:

100 Всегда атакует
95 Атакует, если игрок ближе 3000 единиц
90 Атакует, если игрок ближе 2000 единиц
80 Атакует, если игрок близко или вы ему не нравитесь (1000 единиц, 40 Disp)
70 Атакует, если игрок близко, и вы ему сильно не нравитесь (1000 единиц, 35 disp)
60 Атакует, если вы ему не нравитесь и находитесь близко (Disp меньше 30)
50 Атакует, если он ненавидит вас (Disp 0)
40 Атакует, если игрок близко или вы ему не нравитесь. (500 единиц, Disp 10)
30 Будет атаковать, если он ненавидит вас, и вы совершили преступление.
20 Будет атаковать, если он ненавидит вас, и вы совершили много преступлений.
10 Атакует, если он ненавидит вас, и вы совершили много преступлений по отношению к нему.
0 Атакует ТОЛЬКО, если атакован первым


Flee


Flee влияет на желание непися смотаться от вас при драке. Если 100 –мотает, не дожидаясь столкновения, если 0 – не бежит никогда. Но результат не всегда такой, так как актер учитывает другие факторы, такие как количество повреждений, которые он может получить, или другая стратегия, которую они могут использовать, например магию и дальний бой.

Alarm


Alarm влияет на отношение его к вашим криминальным наклонностям. На то, что он сделает, если увидит кражу или нападение, на то, что сделает, если за вашу голову назначена награда. Соответственно, чем больше цифра, тем ретивее перс защищает закон.

Hello


Hello – расстояние, на котором непись с вами поздоровается. Для получения реального расстояния умножайте на 7.


Все эти параметры можно также изменять и устанавливать при помощи скриптов и из диалогов: SetFight #, SetFlee #, SetAlarm #, SetHallo #.

Services


Следующая закладка Services отвечает за услуги, предоставляемые неписём. Если вдруг тут окажется закрыто что-то, что вы хотите использовать, значит, вы выбрали не тот класс персонажа. Сверху мы видим типы предметов, которые мы можем продать/купить у этого непися. В "Barter gold" указывается сумма, которой обладает непись. Внизу слева типы услуг, а справа места, в которые персонаж нас может отправить.


Управление с помощью скриптов


Кроме того, есть команды AI, которые можно ввести только при помощи скрипта или диалога. Большая их часть требует версии игры 1.2 или выше (Трибунал или БладМун).

ForceSneak, ClearForceSneak 

Команда ForceSneak переводит актера в режим скрытности, все движения будут выполняться, как будто он крадется. ClearForceSneak завершает режим ForceSneak.


ForceRun, ClearForceRun 
ForceJump, ClearForceJump 
ForceMoveJump, ClearForceMoveJump

Все эти функции управляют движением указанного NPC. ForceRun заставляет актера всегда бежать при движении, ForceJump заставляет актера постоянно прыгать, ForceMoveJump заставляет актера постоянно прыгать при движении. Функции ClearXXX используются для сброса этих режимов. Каждый NPC может быть только в одном из этих режимов одновременно. Приоритет для этих режимов:

Sneak > Running > Jump > MoveJump


Path Grid

Также, если говорить о перемещениях NPC, нельзя не сказать о путях их перемещений, так называемых Path Grid (Сетка путей). Если в редакторе вы нажмёте на кнопку с изображением «Красных и синих точек, связанных жёлтыми палочками» в любой стандартной локации вы увидите эти самые точки и палочки.


Итак, зачем они нужны? Геймер всегда видит, где есть проход, как обойти препятствие и тому подобные навигационные действия. Для компьютера же это очень сложная задача. В реальной жизни, задача ориентирования и распознавания является одной из наиболее трудоёмких в кибернетике. В игре это намного легче, но тоже доставляет неудобства. Все вы видели, как во время боя, неписи застревают в камнях, статуях и пр. Если вы тестировали только что созданные локации с неписями, то замечали, что те норовят потоптаться по кроватям, залезть на стол или учудить подобные безобразия. Это из-за неверной расстановки тех самых точек.


Как оно работает? Вы видите точки и линии. Эти точки являются как бы железнодорожными станциями, а линии – путями. В нормальном (небоевом) состоянии, непись будет ходить точно между точками и только по путям. В состоянии блуждания (Wander) он идёт к какой-либо случайной точке, находящейся в пределах [Distance] от начальной точки. Если эта точка окажется для него недостижимой, он будет вечно крутиться по локации, пока её не достигнет или пока плейер не уйдёт другую локацию. По этому надо внимательно следить за расположением этих точек. Когда NPC дойдёт до этой точки, он переходит к следующей операции (движению idle, следующему переходу и т.д.). Короче, если вы хотите, чтоб неписи вменяемо передвигались, правильно расставляйте пафгриды.


Для того чтоб они появились в вашей новой локации, нажмите на кнопку Generate default grid в выскочившем окне. Коэффициент, значащийся рядом, показывает расстояние, на котором будут укладываться точки. Если вы сделали открытое пространство, то можно поставить что-то типа 1024, а если это инт, то 128-256, хотя наверняка всё равно придётся расставлять их вручную. Вы можете подцепить стандартные (красные) точки и перетащить их. Тогда они превращаются в пользовательские (синие) и для их сохранения надо поставить соответствующую галочку. Для перемещения по вертикали зажмите “Z”. Вы можете произвольно создавать точки, нажав правую кнопку мыши. Для соединения точек выделите одну, зажмите Ctrl и щёлкните по второй. Точки должны лежать в легкодоступных местах, на поворотах. Линии не должны быть перегорожены предметами, иначе непись в них уткнётся и всё. Для сохранения точек нажмите Save.



Вот, кажется и всё, что можно извлечь из непися. Что-то новое можно поставить через скрипты, что-то через диалоги, но самое лёгкое было описано выше. Надеюсь, моя статья вам поможет.


При написании статьи использованы материалы из MSfD8 GhanBuriGhan’а с переводом Gwathlobal’а (Для MPT).


zOmb (c) 2005

edit 2.09.2005