• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: TES 4: Oblivion. Скрипты - Анимация и Al  (Прочитано 10309 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
0
Скриптовые функции для управления
анимацией и искусственным интеллектом (Al)


Тема создана для обсуждения вопросов управления новой анимацией в TES 4 Oblivion с помощью скриптовых функций.
Под эту категорию подпадают также функции управления искусственным интеллектом (Al). Ведь известно, что анимация и искусственный интеллект тесно связаны и дополняют друг друга.

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

В Обливионе анимация устроена несколько иначе, чем в Морровинде. В TES 3, если вы помните, анимация для 3-лица (PC и NPC) находилась в одном длин-н-н-ом файле – base_anim.nif (в комплекте с двумя другими - xbase_anim.nif и xbase_anim.kf). Он содержал более 6000 фреймов. Было также несколько других файлов со вспомогательной анимацией - для женщин, хаджитов и аргониан, которые игровой движок использовал в случае необходимости, заменяя некоторые характерные, чисто мужские, жесты и поведение.

Что касается Обливиона, то в этой игре анимация разделена, и находится в файлах с файловым расширением *.kf. Вспомогательных файлов с префиксом "X" уже не требуется, а файл KF имеет новую версию.

Такое построение анимации гораздо удобнее. Теперь есть возможность довольно простыми методами добавлять новую анимацию или заменять существующую. Заменил файл – и непись делает нечто совершенно другое.  С появлением последних версий неофициального импортера-экспортера NifPlugin for 3dsMax ситуация улучшилась настолько, что уже стало возможным внедрение в TES 4 новой анимации.

 
Управление анимацией непосредственно в игре осуществляется довольно просто. Для этого есть несколько методов, одним из которых является использование скриптовых функций. Всего насчитывается пять таких функций:
  • IsAnimPlaying
  • LoopGroup
  • PickIdle
  • PlayGroup
  • SkipAnim

Рассмотрим скриптовые функции TES 4 Oblivion для управления анимацией.
Описание взято из учебника по скриптингу OSFM v1.0.



Анимационные функции
Источник: Category: Animation Functions
Перевод: Garin

Функции, связанные с анимацией.

Всего в этой категории 5 функций:
  • IsAnimPlaying
  • LoopGroup
  • PickIdle
  • PlayGroup
  • SkipAnim



IsAnimPlaying

Синтаксис:
IsAnimPlayingФункция IsAnimPlaying возвращает 1, если вызываемый объект в текущий момент времени проигрывает анимацию.



LoopGroup

Cинтаксис:
LoopGroup <GroupName>, 2, [flags] Примеры:
LoopGroup Idle2
LoopGroup Idle2, 1

Функция LoopGroup проигрывает анимационную группу, определенную в <GroupName>.

Анимация будет воспроизводиться циклично  некоторое целое количество раз, после чего последует возврат к анимации бездействия.
Анимационные группы любого NPC вы найдете в TES 4 CS в его анимационной таблице (Animation Tab), открыв его свойства.
Необязательные флаги [flags] могут использоваться, чтобы начать проигрывание анимационной группы различными способами.

Флаги:
  • 0 = Обычный старт (Normal). Это означает, что если в данный момент времени какая-нибудь анимация уже проигрывается, то эта текущая анимация проиграется до конца полного цикла и лишь затем начнется проигрывание новой анимации со своего первого стартового фрейма.
  • 1 = Немедленный старт  (Immediate Start) – Установка флага в единицу приведет к немедленной остановке проигрываемой в данный момент анимационной группы в текущем фрейме, после чего начнется проигрывание новой анимации со своего стартового фрейма.
  • 2 = Немедленный запуск цикла (петли) (Immediate Loop) – Установка флага в 2 приводит к немедленному прекращению проигрывания в текущем фрейме анимационной группы, после чего стартует новая анимация со своего стартового фрейма и будет воспроизводиться в цикле много раз (по петле).

В скриптах Обливиона функция LoopGroup не используется.



PickIdle

Cинтаксис:
PickIdleФункция вынуждает вызванного актера выбрать новый айдл (сменить анимационную группу).

Функция PickIdle используется в игре в 24 скриптах, в том числе:
  • AlessiaCaroScript
  • ArmandChristopheScript
  • DAMolagBalMelusPetilusScript
  • DANamiraForgottenScript
  • DANamiraForgottenScript2



PlayGroup

Cинтаксис:
PlayGroup <GroupName>, [flags]Примеры:
PlayGroup Walk
PlayGroup Walk, 1
Фунция PlayGroup проигрывает анимационную группу, определенную в <GroupName>.
Необязательный флаг [flags] может использоваться, чтобы начать проигрывание анимационной группы различными способами.

Флаги:
  • 0 = Обычный (Normal) - текущая анимация проиграется до конца полного цикла, затем начнется проигрываение новой анимации с самого начала, со своего первого стартового фрейма.
  • 1 = Немедленный старт  (Immediate Start) – Установка флага в единицу приведет к немедленной остановке в текущем фрейме проигрываемой в данный момент анимационной группы, после чего начнется проигрывание новой анимации со своего стартового фрейма.
  • 2 = Немедленный запуск цикла (петли) (Immediate Loop) – Установка флага в 2 приводит к немедленному прекращению проигрывания в текущем фрейме анимационной группы, после чего стартует новая анимация со своего стартового фрейма и будет воспроизводиться в цикле много раз (по петле).

Примечание:
Проигрывание этой функцией некоторых анимационных групп на персонаже игрока может его "заморозить" и он перестанет реагировать на ваши действия. Вернуть его в нормальное состояние поможет вызов функции PickIdle или вызов PlayGroup со следующими параметрами: PlayGroup Idle, 1
В игре используется в 291 скрипте, например, в таких:
  • AbandonedMineTrap02Script
  • AngaTrigPressurePlate01SCRIPT
  • AngaWallSwitch01SCRIPT
  • AnvilCastleSecretDoorLever01REFSCRIPT
  • AnvilCastleSecretDoorLever02SCRIPT



SkipAnim

Cинтаксис:
SkipAnim
Вызов функции SkipAnim приводит к безусловному завершению проигрываемой анимации в текущем фрейме (кадре).

Примечание: Действие функции SkipAnim на объект будет продолжаться до тех пор, пока объект остается загруженным.



Анимационные группы (AnimGroups)

AnimGroups являются группами анимаций, которые могут быть проиграны на актерах и существах, а также на некоторых объектах.
Анимационные группы вы можете посмотреть в конструкторе TES 4 CS в анимационной таблице (Animation Tab) в свойствах любого NPC, и не только просмотреть, но и увидеть их "в движении" в специальном окне просмотра.
Отметим, что некоторые анимации боя могут быть проиграны только в том случае, когда актер находится в состоянии тревоги (alerted) и в руках у него имеется оружие.

В WIKI на данный момент определено 43 анимационных группы:
  • AttackBackPower
  • AttackBow
  • AttackForwardPower
  • AttackLeft
  • AttackLeftPower
  • AttackPower
  • AttackRight
  • AttackRightPower
  • Backward
  • BlockAttack
  • BlockHit
  • BlockIdle
  • CastSelf
  • CastSelfAlt
  • CastTarget
  • CastTargetAlt
  • CastTouch
  • CastTouchAlt
  • Death
  • DynamicIdle
  • DodgeBack
  • DodgeForward
  • DodgeLeft
  • DodgeRight
  • Equip
  • FastBackward
  • FastForward
  • FastLeft
  • FastRight
  • Forward
  • Idle
  • JumpLand
  • JumpLoop
  • JumpStart
  • Left
  • Recoil
  • Right
  • SpecialIdle
  • Stagger
  • TorchIdle
  • TurnLeft
  • TurnRight
  • Unequip
Награды За огромный вклад в развитие Румора

Оффлайн Garin

  • *
  • Сообщений: 1564
  • Репутация: 5
  • Пол: Мужской
    • ICQ клиент - 244260055
    • Просмотр профиля
    • tiarum.com
TES 4 Oblivion. Скрипты - Анимация И Al
« Ответ #1 : 21 Май, 2006, 02:47:59 »
0
Рассмотрим скриптовые функции, отвечающие за искусственный интеллект в TES 4 Oblivion.
Информация взята с официального сайта, WIKI.

Category: AI Functions

Категория:  Функции, связанные с ИИ (AI Functions)

Всего в этой категории 19 функций:

AddScriptPackage
EvaluatePackage
ForceFlee
ForceTakeCover
GetCurrentAIPackage
GetCurrentAIProcedure
GetIsCurrentPackage
GetRestrained
GetUnconscious
IsContinuingPackagePCNear
Look
RemoveScriptPackage
SetAlert
SetPackDuration
SetRestrained
SetUnconscious
StopLook
StopWaiting
Wait



Рассмотрим эти функции более подробно:




AddScriptPackage

Описание:
Функция AddScriptPackage добавляет скриптовый пакет для вызванного актера. Когда эта функция вызвана, этот пакет станет преобладающим над всеми другими пакетами.
Отметим, что в случае, когда добавленный пакет не принуждает актера к чему-то ("должен завершить" и/или "должен достичь расположения"), то он будет исключен в будущем, когда актер этот пакет переоценит.

Синтаксис:  AddScriptPackage PackageID
Примеры:  AddScriptPackage MQ07BeggarToTavern

Справка:
Список скриптов Обливиона, которые используют AddScriptPackage (WIKI):

AmuseiScript
ArmandChristopheScript
BanditSentryFemaleScript
BanditSentryMaleScript
bernadettepenelesscript
CPRollingRock01SCRIPT
DASanguineSpell
DavideSurilieScript
HieronymusLexScript
KurtTestMagicEffect2
MartinScript
MethredhelScript
MQ09Script
MQ14StatueScript
MQ15AnaxesDoorSCRIPT
MS45DarMaScript
OrrinScript
TG03ChapelUndercroftGuardScript
TG11BlindMonkBossScript
ToutiusSextiusScript
TrigZonePlayerDoonce01DABoethiaSCRIPT01
TrigZonePlayerDoonce01DABoethiaSCRIPT02
TrigZonePlayerDoonce01DABoethiaSCRIPT03
TrigZonePlayerDoonce01DABoethiaSCRIPT04
TrigZonePlayerDoonce01DABoethiaSCRIPT05
TrigZonePlayerDoonce01DABoethiaSCRIPT06
TrigZonePlayerDoonce01DABoethiaSCRIPT07
TrigZonePlayerDoonce01DABoethiaSCRIPT08
TrigZonePlayerDoonce01DABoethiaSCRIPT09




EvaluatePackage

Синтаксис: EvaluatePackage PackageID
 evp PackageID


Call this function on a specific Actor, to force the actor to re-evaluate which package they should be running immediately. If a script has changed a condition and needs an actor to respond immediately, this function can be called on the actor.

For example, you want an actor to activate a switch when a flag in a script is set to true. In order for the actor to activate the switch right after the flag is set you need to force the actor to re-evaluate his packages right away instead of waiting for the next hour by calling EvaluatePackage.

This function should be used sparingly as it can be slow if the actor has a long list of packages and conditions to test.



ForceFlee

Синтаксис:  
ForceFlee CellID (optional), ObjectRefID (optional)
 evp PackageID

Примеры:
ForceFlee ChorrolTheGreyMare
 ForceFlee ChorrolTheGreyMare, BongondRef


Causes the actor to flee, whether or not the actor is currently in combat.

If called with no parameters, the actor will choose where to flee and will decide when to stop fleeing in the same way that actors normally do.

If called with a CellID, the actor will flee until it reaches the specified cell.

If called with a ObjectRefID, the actor will flee until it reaches the specified reference (in this case CellID will be ignored, although a valid cell is still required for the script to compile).



ForceTakeCover

Синтаксис:  ForceTakeCover TargetID, duration
Примеры:   ForceTakeCover player 30

Forces an actor to move away from the TargetID actor for duration number of seconds.



GetCurrentAIPackage

Синтаксис:  ActorID.GetCurrentAIPackage
 
GetCurrentAIPackage возвращает следующие значения для типов пакета:
0 = EXPLORE
1 = FOLLOW
2 = ESCORT
3 = EAT
4 = SLEEP
5 = COMBAT
6 = DIALOGUE
7 = ACTIVATE
8 = ALARM
9 = SPECTATOR
10 = FLEE
11 = TRESPASS
12 = GREET
13 = WANDER
14 = TRAVEL
15 = ACCOMPANY
16 = USEITEMAT
17 = AMBUSH
18 = FLEE_NON_COMBAT
19 = CAST_MAGIC
20 = COMBAT_LOW
21 = GET_UP
22 = MOUNT_HORSE
23 = DISMOUNT_HORSE
24 = DO_NOTHING
25 = CAST_TARGET_SPELL
26 = CAST_TOUCH_SPELL
27 = VAMPIRE_FEED
28 = SURFACE
29 = SEARCH_FOR_ATTACKER
30 = CLEAR_MOUNT_POSITION
31 = SUMMON_CREATURE_DEFEND
32 = MOVEMENT_BLOCKED

Смотрите также: GetCurrentAIProcedure



GetCurrentAIProcedure

Синтаксис:  ActorID.GetCurrentAIProcedure  

GetCurrentAIPackage возвращает следующие значения для типов процедур:

0 = TRAVEL
1 = ACTIVATE
2 = AQUIRE
3 = WAIT
4 = DIALOGUE
5 = GREET
6 = GREET_DEAD
7 = WANDER
8 = SLEEP
9 = OBSERVE_COMBAT
10 = EAT
11 = FOLLOW
12 = ESCORT
13 = COMBAT
14 = ALARM
15 = PURSUE
16 = FLEE
17 = DONE
18 = YIELD
19 = TRAVEL_TARGET
20 = CREATE_FOLLOW
21 = GET_UP
22 = MOUNT_HORSE
23 = DISMOUNT_HORSE
24 = DO_NOTHING
25 = CAST_SPELL
26 = AIM
27 = ACCOMPANY
28 = USE_ITEM_AT
29 = VAMPIRE_FEED
30 = WAIT_AMBUSH
31 = SURFACE
32 = WAIT_FOR_SPELL
33 = CHOOSE_CAST
34 = FLEE_NON_COMBAT
35 = REMOVE_WORN_ITEMS
36 = SEARCH
37 = CLEAR_MOUNT_POSITION
38 = SUMMON_DEFEND
39 = MOVEMENT_BLOCKED_WAIT

Отметим, что процедура и текущий пакет - это не одно и то же. Отдельный пакет может содержать различные возможные процедуры - в зависимости от того, что делает в настоящий момент актер. Например, в пакете "Travel" актер будет выполнять процедуру путешествия "Travel" (когда актер перемещается по направлению к цели), а затем, прибыв в место назначения, он будет выполнять процедуру ожидания - "Wait".
Процедура может также не быть связанной с лежащим в ее основе пакетом - поведение fallout заставляет актера начать новую процедуру без изменения пакета.
Смотрите также: GetCurrentAIPackage



GetIsCurrentPackage

Синтаксис:   GetIsCurrentPackage PackageID
Примеры:   GetIsCurrentPackage AnvilGuardPatrolDay8x7

Возвращает "1", если актер в данный момент выполняет конкретный пакет, и "0", если нет.
Отметим, что прерывающие пакеты (например, диалог, бой, раскрытие преступления) не воздействуют на результаты этой функции.
Если актер выполняет MyPackage и идет в бой, GetIsCurrentPackage MyPackage возвратит истину.
 


GetRestrained

Синтаксис:  ActorID.GetRestrained
Возвращает "1", если актер находится в удержанном состоянии.

Смотрите также:  SetRestrained



GetUnconscious

Синтаксис:  ActorID.GetUnconscious

Возвращает "1", если актер находится в безсознательном состоянии.

Смотрите также:  SetUnconscious



IsContinuingPackagePCNear

Функция возвращает 1, если вызванный актер на момент вызова является защищенным от переключения пакетов в связи с тем, что в текущем пакете отмечен флаг "Продолжать, если рядом PC" ("Continue if PC near"), т.е. актер хочет переключиться на новый пакет, но не может, потому что игрок находится в этой же ячейке.



Look

Синтаксис:  Look TargetRefID
Примеры:  Look UrielSeptimRef

Принуждает вызванного актера к главному курсу TargetRefID. Это отвергнет всё нормальное отслеживающее поведение, пока вызван StopLook, или цель оставляет загруженную область. Смотрите также:  StopLook



RemoveScriptPackage

Исключает любой текущий выполняемый скриптовый пакет для выбранного актера. Это бывает необходимо, если вы добавили скриптовый пакет, который был вызван для бессрочного выполнения.

Смотрите также:  AddScriptPackage



SetAlert

Синтаксис:  SetAlert [0/1]

Sets whether the actor is in an "alert" state (weapon drawn). This is purely an animation state, and does not affect their actual combat status.



SetPackDuration

Синтаксис:  SetPackDuration iDuration
Примеры:  SetPackDuration 2.0

Sets the duration of the actor's current package to iDuration (in minutes of gametime). This is useful for situations where you want a package to run for less than an hour.



SetRestrained

Синтаксис:   SetRestrained flag
Примеры:   SetRestrained 1
 
Set the actor to a restrained state (or clear the state). Restrained actors will not move from their current position, but will continue to "think" (pick packages, run detection so they could yell alarms) and go into dialogue.

Смотрите также:  SetUnconscious



SetUnconscious

Синтаксис:  SetUnconscious flag
Примеры:   SetUnconscious 1
 
Sets the actor into an unconscious state (or clears the state). Unconscious actors do not "think" at all. The just idle and respond physically to things hitting them.



StopLook

Cancels forced head-tracking from the Look function. Actor resumes normal head-tracking behavior.

Смотрите также:  Look



StopWaiting

Синтаксис:  StopWaiting PackageID

Tells an actor to resume normal package behavior after being put into a "wait" state by the Wait command.

Смотрите также:  Wait



Wait

Синтаксис:  Wait PackageID

Tells an actor to go into "wait" behavior for the specified package. Works only if PackageID is the actor's current package, and if the current package is a Follow or Accompany package.

Смотрите также:   StopWaiting

Награды За огромный вклад в развитие Румора

Теги:
 

Tes 3 Morrowind. Скрипты - Анимация И Al

Автор GarinРаздел Туториалы по анимации

Ответов: 1
Просмотров: 8216
Последний ответ 21 Май, 2006, 00:03:55
от Garin
Скрипты в TES 4: Oblivion

Автор GarinРаздел Скриптинг под TES IV

Ответов: 8
Просмотров: 10526
Последний ответ 05 Май, 2008, 19:48:48
от Necromage
Новая анимация в Tes 4 Oblivion

Автор GarinРаздел Обсуждение готовой анимации

Ответов: 21
Просмотров: 23153
Последний ответ 07 Апрель, 2015, 15:55:27
от Pers26
Анимация и скрипты - очень важный вопрос! Пожалуйста помогите

Автор @NAVI@Раздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 2
Просмотров: 5644
Последний ответ 12 Июль, 2008, 20:30:27
от @NAVI@
Новая анимация походки женского персонажа для Oblivion. Помощь

Автор AkavirРаздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 4
Просмотров: 6435
Последний ответ 22 Март, 2011, 00:22:04
от Garin
Анимация в Oblivion с использованием предметов.

Автор SvinecРаздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 0
Просмотров: 1070
Последний ответ 30 Январь, 2014, 20:35:32
от Svinec
Скрипты

Автор dx117Раздел Скриптинг под TES III

Ответов: 138
Просмотров: 52030
Последний ответ 20 Ноябрь, 2007, 15:45:28
от Siegrun
Oblivion Tes 4 Construction Set.

Автор GarinРаздел Мастерская TES IV

Ответов: 115
Просмотров: 43618
Последний ответ 08 Декабрь, 2012, 08:01:59
от Svinec
Анимация в Морровинде!

Автор GarinРаздел Туториалы по анимации

Ответов: 75
Просмотров: 32815
Последний ответ 07 Март, 2008, 00:17:46
от DSD3mon
Tes 4 Oblivion

Автор WizarDРаздел Архив TES IV: Oblivion

Ответов: 111
Просмотров: 49570
Последний ответ 25 Январь, 2008, 20:14:38
от LiLu

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal