2


Пятница-Fredas
27.12.2024 14:30

Летописи Тамриэля

TESmagic


В жизни нет ничего лучше собственного опыта. Вальтер Скотт

Приветствую Вас Путешественник | RSS Главная | НПС и компаньоны в Обливион - Форум | Регистрация | Вход |

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
НПС и компаньоны в Обливион
LunaДата: Среда-Middas, 12.03.2014, 21:11 | Сообщение # 1
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16776
Награды: 155
Статус: Выехал
Для создания НПС и компаньонов я всегда пользовалась отличными туториалами:
Evil'а:
Руководство по созданию компаньонов-NPC v2.01

Игоря Ра:  Как сделать дом собственностью NPC и немного о пакетах AI
Oblivion:Немного о пакетах AI (AI Package)
Oblivion:Немного о пакетах AI (AI Package) - стр 2

и  JBurgess:
Oblivion:Руководство по основам создания NPC

Но в процессе, после многочисленных проб методом тыка и перебора наилучших вариантов у меня появились дополнения и свои наработки. Ими я и хочу поделиться, возможно, они покажутся кому-то более простыми и удобными, чем уже имеющиеся.
Большая благодарность AleksTirex'у, который помог отредактировать и довести практически до идеального, на мой взгляд, состояния скрипт для работы компаньона.

Почему вообще возник вопрос о доработке уже имеющихся отличных туториалов?  Добавленные AI пакеты наотрез отказываются работать, если у НПС уже стоят  свои ежедневные пакеты. Кроме того, добавление пакетов, как и их удаление может вызвать сбои в работе компаньона.

Итак.. Приступим.

AI пакеты персонажа

Я считаю, что НПС уже создан вами по одному из приведенных руководств, пока - без фракций и АИ пакетов.  Отличие обычного НПС от компаньона заключается в АИ пакетах. Если у НПС они заранее предопределены и, за какими-то исключениями, вызванными разными ситуациями, неизменны, то для компаньона нужны свободные АИ пакеты, работающие в зависимости только лишь от желания игрока.  Кроме того, добавляемые АИ пакеты - достаточно глючный материал, и могут вызывать различные сбои в "интеллекте" компаньона. Поэтому сразу определимся:  все АИ пакеты будут  добавлены в лист АИ пакетов персонажа.  Для этого  сразу же делаем небольшую доработку, заключающуюся в следующем.
В любом интерьере, который нам удобен ( можно в стандартном, можно в ячейке, созданной специально для НПС) выбираем объект, подходящий для навешивания на него скрипта переменных. Это может быть любой контейнер, активатор, предмет или дверь, основные условия для выбора - отсутствие на объекте другого скрипта и неизменность в мире. То есть, если предмет любым образом удаляется из игры -  исчезает, складывается в контейнер  или умирает,  то он уже не годится для наших целей. Присваиваем объекту Ref ID



Создаем скрипт для хранения переменных:
В редакторе скриптов Script Edit открываем новый скрипт, пишем ему название и вписываем для начала парочку-другую переменных. Переменные могут быть любого типа и использоваться не только для компаньона, а и во всем моде.  Для работы АИ пакетов компаньона достаточно переменных типа short. Выглядеть это может подобным образом:



Теперь, при необходимости использовать значения этих переменных в любом месте мода достаточно будет выбрать эту переменную  и записать  в другой скрипт как    aaaMPMVDoorVarRef.ИМЯ ПЕРЕМЕННОЙ, либо выбрать наши объект и переменную в качестве цели  (Target) в окне при создании условий (об этом будет ниже).

Возвращаемся к нашему НПС. Пока еще у него совершенно чистый лист АИ пакетов. Открываем его - два раза ЛКМ по НПС, затем - кнопка AI, откроется новый лист.



Далее - открываем список стандартных АИ пакетов:
Character - Packages   и в списке доступных АИ пакетов выбираем те, которые нам нужны, обычно это стандартные пакеты сна и еды



Таким образом составляем обычное, ежедневное расписание НПС. Если нет нужного АИ пакета, есть смысл создать его, выбрав : ПКМ по окну AI Packeges - New.  Создание пакетов очень подробно и хорошо расписано в уже указанных выше руководствах, поэтому очень не будем заостряться на них.  Добавлю лишь, что если мы выбираем для АИ пакета  во вкладке Location  Near Reference, то нужно будет указать то место, к которому хотим привязать АИ пакет - определенную кровать, стул, спальник или прочее, предварительно присвоив им Ref ID. Если выбираем Near Current Location, то АИ пакет будет выполняться в любом удобном месте текущей локации, т.е. НПС сам найдет себе стул, чтобы поесть, или постель, чтобы лечь спать. Если выбираем Near Editor Location, то НПС будет возвращаться для выполнения АИ пакета туда, где его поставили в конструкторе, что удобно, если создано жилье, к примеру, для нескольких НПС и они часть дня проводят вне дома.  Тогда этот пакет достаточно добавить всем НПС, поселенным в ячейку, и они, как только подойдет время для сна или еды, вернутся домой. Теперь выбранные пакеты нужно "перетащить" в лист АИ пакетов НПС ( для упрощения можно выделить их все, удерживая клавишу ctrl и перетащить все кучкой)

Со вкладкой Location разобрались. Перейдем в самую важную для нас сейчас вкладку -  Conditions.
Это вкладка условий, при которых будет выполняться наш АИ пакет.  Тут можно поставить условия любые, какие нам нужны, начиная от того, какого пола наш персонаж, в какой ячейке будет выполняться АИ пакет, что у персонажа должно быть обязательным в инвентаре для выполнения пакета и прочее. Но нас сейчас волнует одно условие из всего выпадающего списка -  GetScriptVariable - скриптовая переменная, указанная в нашем скрипте переменных.



Если мы собираемся использовать НПС и как компаньона, и как обычного НПС (скажем, оставить подругу дома, пока вы ходите по ба.. хм.. по делам   biggrin  ) , то здесь и пригодятся наши переменные. Выбираем GetScriptVariable - ОК - Function Parameters - Target - Select Reference in Render Window



После этого откроется окно Render Window, в котором уже открыт наш объект для хранения переменных. (если вы по какой-то причине уже открывали другое окно, вернитесь и найдите его до  выбора GetScriptVariable, иначе потом это будет несколько неудобно.



В окне Render Window тут же появится перекрестье "прицела". Он будет красным, но побелеет, как только вы наведете его на предмет, имеющий Ref ID.  Остается лишь найти прицелом наш объект, щелкайте по нему два раза ЛКМ, и он появится в окошечке под кнопкой  Select Reference in Render Window. Далее - ОК, окошко закроется и вы вновь окажетесь в окне Select Function Parameters, где вам будет предложено выбрать нужную переменную.



Советую сразу много переменных не создавать, чтоб не путаться. Достаточно по одной на каждого НПС, которого вы делаете, и АИ пакеты которого будут зависеть от величины переменной.  При необходимости переменные можно добавить всегда. Выбрав нужное название переменной, переходим дальше, к окну Comparison , в котором нужно выбрать знак равенства или неравенства (значок  " != "  означает "не равно" ) и величину нашей переменной. Мне проще считать, что если переменная равно 0, то выполняются обычные ежедневные АИ пакеты. Можно составить список АИ пакетов с учетом значения переменной, например:

рак1 = 0    - обычные АИ пакеты
pak1 = 1    - АИ пакет следования (для компаньонов)
pak1 = 2    - АИ пакет еды в любое время (для компаньонов)
pak1 = 3    - АИ пакет сна в любое время (для компаньонов)
pak1 = 4    - АИ пакет ожидания в любое время (для компаньонов)
pak1 = 5    - АИ пакет путешествия в заданную точку в любое время (для компаньонов)

Вариантов может быть сколько угодно много, в зависимости от того, чем вы собираетесь занять своего НПС.



В моем случае, у девушки кроме обычных ежедневных АИ пакетов, расписанных по часам и локациям и с переменной pak1=0 стоят еще и неопределенные пакеты, без времени и места действия, но с переменной  pak1=1,2,3,4,... и т.д., которая будет определять, какой АИ пакет будет выполняться после фразы в диалоге. В списке АИ пакетов все они должны располагаться в строгом порядке - сначала определенные АИ пакеты, по времени от 0 до 24 часов, потом - неопределенные, последним - неопределенный пакет "брожения" Wander для текущей локации.

С АИ пакетами разобрались.

Диалоги с НПС

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

После написания топика в окне Result Script вписываю строку   Set aaaMPMVDoorVarRef.pak1 to 1



Пояснение: этот топик запускает пакет следования за игроком, то есть, переводит НПС в режим компаньона. ( здесь нам и пригодится список АИ пакетов с учетом значения переменной, который мы составили немного ранее)  В соответствии со списком, точно так же присваиваем значения переменной после соответствующих топиков.  Чтобы вернуть переменную к начальному значению, отменив тем самым все АИ пакеты компаньона и запустив снова АИ пакеты НПС, достаточно, например, после фразы типа "Пора нам расстаться" в поле результирующих скриптов записать
Set aaaMPMVDoorVarRef.pak1 to 0

На этом с диалогами закончим. Остальные переменные для других АИ пакетов добавляются аналогично.

Инвентарь НПС

Теперь внесем некоторые дополнения в скрипт на инвентарь компаньона. В руководстве о создании компаньонов НПС вопрос об инвентаре расписан очень подробно и хорошо, поэтому ограничимся  изменениями в скрипте.  Итак, считаю, что вы уже создали сундучок для НПС, присвоили ему RefID и теперь осталось только сделать  скрипт. В скрипт переменных добавим новую переменную целочисленного типа

Short Inv

Заменим добавление АИ пакета следования Follow и его удаление на скриптовую переменную следующим образом:

В диалогах с НПС в поле результирующего скрипта после фразы, которая должна запускать открытие инвентаря запишем:
Set aaaMPMVDoorVarRef.Inv to 1

Скрипт, который навешивается на НПС, изменим таким образом:

scn aaaMPMGerl1InvScr
short inventory
short invactiv
ref chest
Begin GameMode
if aaaMPMVDoorVarRef.Inv == 1
set inventory to 1
endif
if inventory == 1
if invactiv == 0
set chest to aaaMPMDungNecroChest01Ref
chest.setOwnership
set invactiv to 1
endif
if invactiv == 1
toggleActorsAI
RemoveAllItems aaaMPMDungNecroChest01Ref
aaaMPMDungNecroChest01Ref.Activate Player
set invactiv to 2
endif
if invactiv == 2 && MenuMode == 0
set invactiv to 3
aaaMPMDungNecroChest01Ref.RemoveAllItems aaaMPMNPC8Gerl1Ref
endif
if invactiv == 3
set invactiv to 0
aaaMPMNPC8Gerl1Ref.AddItem Torch02 1
aaaMPMNPC8Gerl1Ref.Equipitem Torch02
aaaMPMNPC8Gerl1Ref.RemoveItem Torch02 1
toggleActorsAI
set inventory to 0
Set aaaMPMVDoorVarRef.Inv to 0
endif
endif
End


где aaaMPMNPC8Gerl1Ref  RefID НПС, к которому мы будем "залезать" в инвентарь, а aaaMPMDungNecroChest01Ref RefID сундука, в котором будут храниться все вещи НПС для обмена.

С инвентарем закончили.

Пакет следования на лошади или в скрытности

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

Для начала продублируем уже имеющийся АИ пакет следования. Пусть он у нас называется, например, aaaNPCFollow. Цель следования - игрок (Player), время, локация - пропускаем. Conditions:  aaaMPMVDoorVarRef.pak1 = 1.
Дублируем этот АИ пакет, ставим галочку в окне - Use Horse,  Conditions - aaaMPMVDoorVarRef.pak1 = 11 (чтоб не путаться). 11 - в нашем списке переменных пусть означает - пакет следования на лошади, присваиваем новый ID пакету, например, aaaNPCFollowHorse. По желанию в обоих пакетах можно отметить другие флаги. Я отметила Always Run (всегда бежать - потому что мой перс не умеет ходить пешком, вечно куда-то несется), Allow Swimming (позволяет компаньону плыть вместе с нами, мало ли, куда занесет моего перса?), и Defensive Combat ( теперь компаньон будет отбиваться, если на него нападут). Оба пакета добавим будущему компаньону, поставим на листе АИ пакетов рядышком, чтоб не терять.
Теперь надо создать лошадь для компаньона.
Самое простое - взять готовую лошадь и просто поменять ей ID. Если у лошади есть какой-то скрипт, то убираем его, нам он не нужен совсем. Ставим лошадь в конюшню, любую, какую понравится. Разместив ее там, два раза щелкаем по ней ЛКМ - откроется окно Referense. Нам нужно зайти на вкладку Ownership, чтобы присвоить лошадь нашему компаньону. В окне NPC ищем ID созданного нами компаньона. Будьте внимательны, не ошибитесь, иначе компаньону придется бегать за Вами пешочком.



Остался маленький штрих. Представьте, что лошадь компаньона находится в Анвильской конюшне. А Вы совершили путешествие телепортом или фасттревелом в Бравил и собираетесь оттуда отправиться в путь верхом. Как-то скучно получается.. Вот если бы лошадку можно было призвать? А почему нет?? Сейчас мы сделаем ей заклинание вызова.

Рядом с лошадью, там, где мы ее поместили в конюшне, поставьте активатор. Для этого в окне активаторов Object Window в дереве находим Activator, щелкаем по списку ПКМ, выбираем new.



Появится окно активатора. Отредактируем его. Присваиваем ID. Name можно не писать, но зато нужно присвоить модель для активатора. Чтобы он никому не мешал и не мозолил глаза, сделаем его невидимым. Тем, кто давно занимается моддингом, не составит труда найти нулевую модель в магических эффектах. Если у Вас все BSA архивы запакованы, то можно просто их распаковать специальной программой. В папке Meshes - MagicEffeсts находим Null.nif Копируем по тому же пути, по какому он находится в BSA архиве: Meshes - MagicEffeсts (просто создаем его, если каких-то папок нет). Тогда потом, когда модель будет уже присвоена и сохранена, ее можно будет безболезненно убрать, и игра будет "доставать" ее из BSA архива. Теперь щелкаем по верхней кнопке окна с активатором. Выскочит список папок в Meshes. Находим Null.nif, выбираем его. Теперь наш активатор невидим.
Осторожно тащим его в конюшню и роняем клавишей F рядом с лошадью. После этого в окне Cell Viev (в нижнем правом углу экрана) находим нашу ячейку, куда поставили лошадь. ( самое простое - найти лошадь в окне Creature и выбрав ее, щелкнуть по ней ПКМ. Выпадет маленький список, найти там Use Info, пощелкать по нему. Тогда в Render откроется сразу же лошадь так, как она стоит в ячейке. )

Теперь в Cell Viev надо поискать наш активатор, щелкнуть ПКМ, выбрать Edit. Сразу же откроется окно Reference этого активатора. Присвойте ему Reference Editor ID, отметьте внизу галочкой Persistent Reference, нажмите ОК. Сохранитесь.
Теперь можно перейти к созданию заклинания перемещения. Идем в окно скриптов. Выбираем Script - New. Пишем в открывшемся окне:

Scn aaaMPMAreyaHorseScr

Begin ScriptEffectStart
aaaAreyaHorseAct.MoveToMarker aaaMPMNPC7Gerl2Ref 256,0,0

aaaMPMAreyaHorse.MoveToMarker aaaAreyaHorseAct
end
Begin ScriptEffectFinish

end

; где aaaAreyaHorseAct  - активатор с нулевой моделью, aaaMPMNPC7Gerl2Ref - наш компаньон, aaaMPMAreyaHorse - наша лошадь.

Тип скрипта Magic Effect. Сохраняем.

Теперь создаем заклинание. В Object Window находим Spell, ПКМ - new. Создаем заклинание - ID, название, в окошке Effect опять щелкаем ПКМ, выбираем new.



Редактируем: Effect - Script Effect, Range - Self, Script - наш только что созданный скрипт. ОК. Теперь это заклинание надо добавить компаньону, так? Иначе какой смысл во всей этой возне? Добавим его в спеллист.
Все. Теперь при необходимости компаньон призовет лошадь, и уже на ней сможет сопровождать Вас.

Теперь вернемся к диалогам. Выберем топик, в котором просим компаньона сопровождать нас. Там в поле результирующих скриптов стоит строчка Set aaaMPMVDoorVarRef.pak1 to 1. Немного доработаем результирующий скрипт, потому что у компаньона появилось ДВА пакета следования.:
В наш скрипт переменных добавим новую переменную целочисленного типа
Short CompFoll (к примеру)
В результирующем поле диалога записываем:

Set aaaMPMVDoorVarRef.CompFoll to 1

Set aaaMPMVDoorVarRef.pak1 to 1

Таким образом мы "включаем" пакеты следования за игроком и запускаем первый пакет следования, чтобы компаньон сразу "сообразил", что от него требуется. В дальнейшем, какой именно будет работать, будет зависеть от действий самого игрока.   Далее требуется составить скрипт квестового типа, который, собственно, и определит, какой из пакетов в данный момент должен будет работать.  Но сначала создадим квест, без стадий и названия, присвоим ему ID, например aaaCompanionQuest. Вот для него и будем писать скрипт.

Scn aaaMPMCompanionFollowScr

float fQuestDelayTime
Short cast

Begin GameMode
Set fQuestDelayTime to 1
If aaaMPMVDoorVarRef.compFoll == 1
If Player.IsRidingHorse == 1
if aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage aaaMPMGerlFollow2Horse == 0
Set aaaMPMVDoorVarRef.pak2 to 11
if cast == 0
aaaMPMNPC7Gerl2Ref.Cast aaaAreyaHorseSpell aaaMPMNPC7Gerl2Ref
Set cast to 1
endif
endif
else
If aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage aaaMPMGerlFollow2Horse
Set aaaMPMVDoorVarRef.pak2 to 1
Set cast to 0
elseif aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage aaaMPMGerlFollow2 == 0
Set aaaMPMVDoorVarRef.pak2 to 1
elseif aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage aaaMPMGerlFollow2
If player.IsSneaking && aaaMPMNPC7Gerl2Ref.IsSneaking != 1
aaaMPMNPC7Gerl2Ref.SetForceSneak 1
elseif player.IsSneaking != 1 && aaaMPMNPC7Gerl2Ref.IsSneaking
aaaMPMNPC7Gerl2Ref.SetForceSneak 0
endif
endif
endIf
else
If aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage aaaMPMGerlFollow2 || aaaMPMNPC7Gerl2Ref.GetIsCurrentPackage  aaaMPMGerlFollow2Horse
Set aaaMPMVDoorVarRef.compFoll to 0
endif
endIf
End

Навешиваем скрипт на квест aaaCompanionQuest, сохраняем.

AI пакеты использования предметов.

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

Для использования в АИ пакетах подходят очень многие стандартные предметы. Но нужно внимательно смотреть, потому что в движке прописаны не все предметы для подобных анимаций. Например, анимация питья из кружки использует не любую кружку, а любую из из трех оловянных, анимация питья из бутылки - тоже не любую бутылку.
Немного расскажу о некоторых трудностях, которые могут возникнуть у впервые сталкивающихся с АИ пакетами.
Для того, чтобы НПС использовал предмет, его нужно добавить к нему в инвентарь, а во вкладке Target  AI пакета типа  Use Item At указать либо конкретно этот предмет, либо тип объекта  ( например books).
Окно АИ пакета Use Item At выглядит так:



Некоторые АИ пакеты можно выполнять и сидя, и стоя (пить, читать).  В качестве точки для того, чтоб пакет выполнялся сидя, надо указать конкретный стул или кресло во вкладке Location, в другом случае достаточно маркера. Существует два вида маркеров для НПС: обычный XMarker (в виде крестика на полу)  или   XMarkerHeading (прямоугольник с "носом"), "нос" будет указывать, куда лицом будет стоять НПС во время выполнения пакета. Оба находятся в Object Window / Static.
Для использования предмета "кружка" следует выбирать одну из трех кружек: MiddleClassPewterMug01, MiddleClassPewterMug02 или MiddleClassPewterMug03, поместить ее в инвентарь НПС и выбрать ее заткем в качестве Object ID на вкладке Target.



Пить НПС может также зелья и напитки из бутылочек.




Для использования предмета "кисть и краски"  в инвентарь НПС добавляем кисть PaintBrush01 . Другой предмет НПС использовать не будет. XMarkerHeading ставим перед мольбертом так, чтобы "нос" задевал мольберт, тогда НПС кистью будет касаться картины.



Для использования книги надо также положить в инвентарь НПС книгу, любую. Главное - не ошибиться с выбором Target в окне ObjectID. Но можно и просто указать Books в окне ObjektType.

 

Если добавить в инвентарь НПС грабли (Rake01)  или мотыгу (Hoe01), то можно сделать АИ пакет работы в саду и огороде.



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



АИ пакетами Use Item At запускаются также тренировки - как с оружием, так и в магии и рукопашном бое. Используя маркер XMarkerHeading, показываем, где именно будут происходить тренировки, выбором в окне ObjeсtType  устанавливаем, в каком навыке будет тренироваться НПС. Для рукопашного боя, например, используется тип Weapons: NONE. Для спаррингов два маркера XMarkerHeading ставятся друг напротив друга с таким расчетом, чтобы  их "носы " соприкасались.



В дополнении  ShiveringIslend добавлены и другие анимации для АИ пакетов использования предметов.

Если добавим в инвентарь НПС метлу (тут надо быть внимательным, потому что в игре существует две метлы с разными ID). АИ пакет работает только с одной из них - BroomFarm01



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

Добавление анимаций

Теперь рассмотрим использование анимаций, не входящих в стандартные АИ пакеты, но , тем не менее, присутствующих в игре и оживляющих ее.

Анимации находятся в конструкторе на вкладке Gameplay / Idle Animations.
ПКМ щелкаем по левой части открывшегося окна, выбираем Incert Child. ID можно даже не писать, конструктор автоматически присвоит его. Выбирается анимация. Все стандартные анимации находятся в BSA архиве. Если мы собираемся использовать какую-то из них, то сначала должны распаковать архив, потом по пути Meshes - characters - _male - IdleAnims скопировать нужную анимацию из стандартных. Потом, когда мод будет готов, можно будет их удалить из папки, а игра будет брать их из BSA архива.
Как узнать, какая анимация нужна? В окне анимаций прокрутить бегунок, раскрывая выпадающие списки. Очень интересные анимации в дополнении Shivering Islend. Они находятся в UniqueIdleAnims - SEAnims. Применив даже начальные навыки перевода, можно примерно понять, что из себя представляет анимация. Выделив ее, на кнопке в правом верхнем углу можно увидеть, как называется модель, используемая для этой анимации и путь к ней.
Вот некоторые из стандартных анимаций из этого дополнения:

Танец ( модель анимации sedance.kf) :



Молитва ( модель анимации Praying.kf)



Наклониться и подобрать что-то ( модель анимации Checkcorpse.kf)



Записывать в тетради (модель анимации setakenotes.kf )



Готовить пищу (модель анимации  se_specialidle_makefood.kf)



Жонглировать ( модель анимации SE_Specialidle_JAGGLING2.kf )



Работать в кузнице ( модель анимации se_specialidle_blacksmith01.kf)



Для последних четырех анимаций -  писать пером, готовить пищу, жонглировать и работать в кузнице - используются анимированные объекты. Они находятся в Object Window / AnimObject. Чтобы  эти анимации заработали правильно, нужно присвоить им анимированные объекты.
Чтобы присвоить анимированный объект анимации, нужно выбрать необходимый объект, два раза щелкнуть по нему ЛКМ, появится небольшое окно. Под кнопкой, на которой указывается nif модель анимированного объекта, находятся два небольших окна с выпадающими списками. В первом - показаны типы анимаций, во втором - надо выбрать конкретную анимацию, к которой мы привязываем анимированный объект. Для некоторых анимаций используется не один предмет, тогда  каждому из них надо назначить нашу анимацию.  К примеру, для анимации готовки - миска и ложка (MixingBowl  и Spoon) , для письма пером - книга и перо ( WriteBook  и WritePen), для жонглирования шарики ( JugglingBalls), для ковки  молоток и клещи (SmithHammer  и SmithClamp)     и т.д.  Просто скопируйте анимированный объект, присвоив ему новый ID и вашу новую анимацию, на вопрос конструктора о создании нового ID ответьте "да".



Теперь у нас все готово для того, чтобы добавить анимацию НПС - создана сама анимация, присвоены анимированные объекты ( если необходимо).   Выберем точку, в которой должна проигрываться анимация, поставим на нее маркер  (XMarker или XMarkerHeading). Создадим АИ пакет, во время которого будет выполняться анимация тип Travel,   Location  - наш маркер, Condition  -  по нашему выбору. Это может быть либо определенное время, либо какая-то стадия квеста,  либо какое-то значение скриптовой переменной. Теперь, когда АИ пакет начнет работу, НПС переместится к маркеру и остановится на нем.  Но анимация сама по себе не будет проигрываться. Ей надо также задать определенные условия.
Снова открываем нашу анимацию.  В правой части, в окне Condition Function  выбираем New, и создаем следующие условия:



GetIsID     в выпадающем списке выбираем нашего НПС  ==  1
GetDistance     в качестве цели указываем наш маркер   < 64
GetIsCurrentPackage   выбираем наш пакет Travel     ==  1
MenuMode   1009    == 0   ( НПС не находится в меню разговора)

Закрываем окно анимаций, сохраняем мод. Точно так же добавляются и другие анимации.

Подведем итоги:

Мой только что созданный НПС-компаньон может иметь следующее расписание:

АИ пакеты, работающие, когда он находится в собственном доме (условие для работы пакетов скриптовая переменная Var = 0):
1. АИ пакет Sleep - в своей постели, с 0 часов в течение 7 часов.
2. АИ пакет утренней разминки Use Item At ( рукопашный бой Weapon: NONE) в тренировочном зале с 7 часов утра в течение 1 часа.
3. АИ пакет Eat в текущей локации, с 8 часов в течение 1 часа.
4. АИ пакет работы в саду возле дома Use Item At (предмет Hoe01) с 9 часов в течение 2 часов
5. АИ пакет купания в бассейне Travel (если указать скамейку, стоящую в воде, то он там будет сидеть в течение указанного времени, а если бассейн достаточно глубок, то будет плавать рядом с маркером) с 11 часов в течение 1 часа
6. АИ пакет Eat в текущей локации с 12 часов в течение 1 часа.
7. АИ пакет прогулки в саду - Wander в радиусе 2048 от указанного маркера с 13 часов в течение 1 часа.
8. АИ пакет домашней работы Use Item At (предмет BroomFarm01) в доме в радиусе 2048 от маркера с 14 часов в течение 1 часа
9. АИ пакет Use Item At (предмет - книга из инвентаря) на указанном стуле с 15 часов в течение 1 часа
10. АИ пакет прогулки до магазина (Храма, гильдии, проч.) - Travel (указать маркер путешествия) с 16 часов в течение 1 часа. (Либо можно указать таверну, и задать АИ пакет Use Item At - предмет кружка из инвентаря, тогда он будет пить в таверне)
12. АИ пакет готовки еды Travel к кухонному столу дома, с 17 часов в течение 2 часов. После достижения маркера цели путешествия включается анимация готовки se_specialidle_makefood. Этот же пакет заставит НПС вернуться домой с прогулки.
13. АИ пакет Eat в текущей локации с 19 часов в течение 1 часа.
14. АИ пакет вечерних занятий с 21 часа в течение 2 часов. Возможно для разных дней недели сделать разные пакеты: занятие алхимией во вторник, четверг (Use Item At - предмет MortarPestle ), тренировка в кастовании заклинаний в тренировочном зале в понедельник, среду, пятницу , рисование - в субботу (Use Item At - предмет PaintBrush01 ), записи в еженедельнике - в воскресенье (Travel к письменному столу и анимация setakenotes)
15. АИ пакет вечерней молитвы с 23 часов в течение 1 часа - Travel к маркеру возле иконы или статуи божества и анимация Praying.

АИ пакеты компаньона (переменная Var меняет значение после определенного топика в диалоге):

15. АИ пакет следования Follow без указания места, времени, цель следования Player - включается после топика "Следуй за мной" , Var = 1
16. АИ пакет Eat без указания времени, в текущей локации, в радиусе 2048, - включается после топика "Давай поедим", Var = 2
17. АИ пакет Sleep без указания времени, в текущей локации, в радиусе 2048, - включается после топика "Надо поспать", Var = 3
18. АИ пакет ожидания Wander без указания времени, в текущей локации в радиусе 1024 или меньше, - включается после топика "Подожди здесь", Var = 4
19. АИ пакет следования на лошади Follow с отмеченным окном Use Horse, без указания места, времени, цель следования Player Var = 11

АИ пакеты с анимациями для компаньона:
20. АИ пакет Use Item At - предмет - книга из инвентаря, без указания времени, в текущей локации, в радиусе от 0 до 512 ( компаньон будет читать стоя, т.к. невозможно указать стул, не зная, где именно в игре будет сказан топик), - включается после топика "Можешь почитать", Var = 5
21. АИ пакет Use Item At - предмет - MortarPestle, без указания времени, в текущей локации, в радиусе от 0 до 512, - включается после топика "Приготовь зелье", Var = 6
22. АИ пакет Use Item At - предмет - BroomFarm01, без указания времени, в текущей локации, в радиусе от 0 до 512, - включается после топика "ПРибери здесь, пожалуйста", Var = 7
23. АИ пакет готовки пищи - Travel, без указания времени, в текущей локации, в радиусе от 0 до 512, - включается после топика "Приготовь поесть, пожалуйста", Var = 8, к этому АИ пакету привязать анимацию готовки с условиями GetIsCurrentPackage - этот АИ пакет Travel, GetScriptVariable - Var =8, GetIsID = наш компаньон.

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

АИ пакеты для компаньона, если мы его планируем оставить жить в каком-нибудь из своих домов запускаются после топика "Теперь ты будешь жить здесь" и присвоения переменной Var значения 10:
24. АИ пакет Sleep в текущей локации, с 0 часов в течение 7 часов, Var = 10
25. АИ пакет Eat в текущей локации, с 8 часов в течение 1 часа, Var = 10
26. АИ пакет Eat в текущей локации, с 13 часов в течение 1 часа, Var = 10
27. АИ пакет Eat в текущей локации, с 19 часов в течение 1 часа, Var = 10
28. В промежутках между этими АИ пакетами можно добавить по желанию другие АИ пакеты, оживляющие расписание НПС, главное в них - действие в текущей локации, и при условии равенства скриптовой переменной Var = 10

29. АИ пакет Wander без указания времени, для текущей локации, в радиусе 1024 - ставится в конце списка АИ пакетов , на случай, если произойдет сбой, чтобы НПС, "забывший" о своем текущем пакете, просто побродил по локации в ожидании начала работы следующего АИ пакета.

Это все, что я хотела рассказать о работе с НПС и компаньонами. Желаю удачи!


Чем больше я сплю, тем меньше от меня вреда......
 
ProfessorSeverusДата: Пятница-Fredas, 14.03.2014, 12:02 | Сообщение # 2
Партурнакс Георгиевич
Группа: Главный администратор
Сообщений: 17608
Награды: 157
Статус: Выехал
Теперь вот есть полное руководство по полноценным партнерам без дополнительных CM Партнерс!
Моды конфликтовать не будут, если установлен, предположим партнер СМ Партнерс и сделанный по этому руководству?


О! Эльберет Гильтониэль!
Где бы не были бестолковые животные, хищники всегда неподалеку... Янус Гассилдор



Моя главная проблема в жизни — это равнодушие к внешнему миру. ©Карл Лагерфельд
 
LunaДата: Пятница-Fredas, 14.03.2014, 14:09 | Сообщение # 3
Министр Иносайтных дел
Группа: Администраторы
Сообщений: 16776
Награды: 155
Статус: Выехал
не будут)))

Чем больше я сплю, тем меньше от меня вреда......
 
  • Страница 1 из 1
  • 1
Поиск:

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


Copyright ImperialCity ©2009-2024 При копировании материалов - ссылка на сайт  обязательна!

free counters Rambler's Top100