Все в этой жизни живо repeat'ом, все возвратится вновь: сталь под плащом, медь под копытом, шляпа на бровь. ©
Задумалась о том, можно ли заставить НПС проигрывать какую-либо анимацию хотя бы из категории анимаций бездействия (Idle) через консоль. Нагуглила вот что, может пригодиться:
Полезные (для скринов) действияСлучайное движение
AiWander, расстояние_числ, длительность_числ, время_числ, [idle2], [idle3], …[idle9], [reset]
"ID" -> AIWander, 512, 5, 0, 0,20,0,0,10,30,0,0
Это алгоритм случайного движения, который используется почти всеми NPC в игре – они ходят туда обратно, меняют направление движения и останавливаются, чтобы почесать голову или оглядеться.
Длина: определяет расстояние, на которое существо может удалиться от начального положения
Длительность: возможно, время (в часах), которое определяет, как долго NPC будет выполнять своё движение (перед тем, как оно обнуляется, что, возможно, происходит, когда игрок уходит или спит? Не уверен)
Время: вероятно, определяет начальное время, если у движения определена длительность.
[idle2], …[idle9]: возможные варианты прерывания движения:
Idle2: Осматривается
Idle3: Смотрит назад
Idle4: Чешет голову
Idle5: Поправляет одежду и броню на плече
Idle6: Сводит руки вместе, показывая товары
Idle7: Смотрит на пальцы и осматривается с опаской
Idle8: Глубоко задумывается
Idle9: Дотрагивается до оружия
Для того, чтобы заставить NPC просто стоять на месте, можно использовать просто: AIWander, 0, 0, 0
Анимация объектов
Эта группа функций позволяет добавлять анимацию к объектам, заранее определённую в модели (файлы типа nif). Вы можете узнать имена анимационных групп, загрузив модель в окно предварительного просмотра и прокручивая разные варианты. Также это можно увидеть в меню “Character” в окне “Base animation”. Список анимационных групп tiarum.com/wiki/Morrowind:%D0%90%D0%BD%D0%B8%D0...
Однако только группы, определённые в окне базовой анимации могут быть вызваны этими функциями. Не у всех моделей есть анимационные группы, однако разнообразные флаги (под активаторами) являются отличным примером того, что предполагается. Примеры имён групп: idle, idle2, idle3, walk и т.д.
PlayGroup, ИмяГруппы, [Флаги]
PlayGroup, walk, 1
Функция проигрывает определённую группу анимации. Необязательные флаги могут быть использованы для запуска группы разными способами (смотрите ниже).
LoopGroup, ИмяГруппы, раз_числ, [Флаги]
Анимационная группа будет проиграна соответствующим образом заданное количество раз. Необязательные флаги могут быть использованы для запуска группы разными способами (смотрите ниже).
SkipAnim
Предотвращает проигрыш анимации на данный момент.
Флаги
0 = Нормальный
Текущая анимация проигрывает свой цикл, новая анимация начинается с самого начала.
1 = Мгновенный запуск
Текущая анимация прекращает свой проигрыш вне зависимости от выполняемого фрейма. Новая анимация начинается со своего начала.
2 = Мгновенный проигрыш
Текущая анимация прекращает свой проигрыш вне зависимости от выполняемого фрейма. Новая анимация начинается с начала своего цикла повторения.
Повернуть персонажа
Face x_float, y_float
Заставляет NPC повернуться лицом в заданном направлении. Вероятно, функция не прерывает выполнение активной анимации. То есть, если персонаж бродит, а на нём была использована эта функция, то он поворачивается в заданном направлении и продолжает своё движение, как ни в чём ни бывало.
Пример: скрипт заставляет NPC постоянно наблюдать за игроком:
…
set px to player->getpos x
set py to player->getpos y
face px, py
…
Как заставить NPC красться
ForceSneak
ClearForceSneak
GetForceSneak (возвращает Boolean/short)
Команда “ForceSneak” заставляет NPC перейти в крадущийся режим, “ClearForceSneak” выключает его. К сожалению, похоже, не существует функции, способной включить режим бега (она была добавлена лишь в Трибунале). “GetForceSneak” возвращает 1, если NPC крадётся.
Заставить кого-либо упасть
Fall
Заставляет NPC упасть. Может служить дополнительным толчком вниз, когда из под ног персонажа уходит почва. Также заставляет летающие существа свалиться с небес. Эта функция заставляет алхимика разбиться насмерть неподалёку от Сейда Нин.
Активация объектов
AIActivate "Object ID"
AIActivate , ObjectID, [reset]
По словам Bethesda, «эта функция заставляет NPC активировать какой-либо объект. Мощный инструмент, возможности которого трудно переоценить».
В стандартном Морровинде функция, похоже, не работает, единственная её возможность – заставить NPC что-либо выпить. В Трибунале, она, вроде бы, исправлена, по крайней мере, её возможности расширились. Я удачно использовал её, чтобы заставить NPC поднимать оружие, открывать обычные двери и проходить сквозь двери между локациями. Последний вариант работает только, если маркер двери находится в той же локации, что и NPC, или в активной локации, в которой находится герой. Иначе игра вылетает. Мне также удалось удачно использовать активатор – кнопку у Призрачных Ворот.
Мне не удалось обнаружить сигнала AIPackageDone, но поменять направление движения можно и с помощью других методов (смотри ниже).
Тип Объекта При активации
NPC Начать разговор
Контейнер Открыть
Дверь Открыть
Дверь между локациями Открыть/телепортировать (только в той же локации)
Оружие, броня и прочее Поднять
Книга/свиток Прочесть (что бы это означало для NPC?)
Активаторы Выполнить скрипт активатора
Не очень полезныеСледование
AIFollow, "NPC ID", длительность_f_числ, x_f_числ, y_f_числ, z_f_числ, [reset]
AIFollowCell, "NPC ID", "ID локации", длительность_f_числ, x_f_числ, y_f_числ, z_f_числ, [reset]
"MobID" -> AIFollow, "Mob2ID", 0,0,0,0
Функция заставляет одного персонажа следовать за другим. Можно использовать эту возможность, как для следования за игроком, так и для формирования каравана. Пример из моей практики, показывающий использование функции без всяких проверок:
elseif ( state == 20 )
HB_guar_pack_adros_ -> AIFollow, HB_adros_darani, 0, 0, 0, 0
AITravel -8144, -19409, 728 ;новые координаты точки 1
set state to 30
Поскольку здесь нет ни длительности движения, ни определённых координат, гуар будет следовать за NPC, пока не получит другой команды. Поэтому позаботьтесь о том, чтобы функции движения выполнялись только 1 раз, а не несколько десятков раз за секунду.
Длительность, ID локации, координаты x, y, z – условия, по выполнению которых функция будет остановлена. Функция AIFollowCell позволяет пунктом назначение указать некий интерьер. Предназначение дополнительного флага “reset” в данный момент мне неизвестно.
AIEscort, "NPC ID", длительность, x, y, z, [reset]
AIEscortCell, "NPC ID", "ID локации", длительность, x, y, z, [reset]
Эти функции позволяют заставить NPC вести куда-либо игрока. Персонаж остановится и подождёт, если расстояние между ним и игроком увеличится слишком сильно. Пример использования этой функции можно увидеть в самом начале игры, когда стражник, проводящий Вас по кораблю останавливается, чтобы подождать, если Вы отстали от него.
Проверка значения выполняемого движения
Для написания сложных скриптов полезно знать, какой режим движения совершается в данный момент, и в зависимости от этого выполнять определённые действия.
GetCurrentAIPackage (возвращает short)
If ( GetCurrentAIPackage == 2 )
[делать что-то]
endif
Возвращаемые значения:
Действие Значение
Ничего -1
Брожение 0
Путешествие 1
Эскорт 2
Следование 3
Активация 4
Преследование 5
Как заставить NPC пойти куда-либо
AITravel, float_числ_x, float_числ_y, float_числ_z, [reset]
Чтобы заставить NPC проследовать из одного место в другое, Вам следует использовать функцию AITravel.
Аргументы x, y, z – это координаты на глобальной карте. Вы можете определить их в Конструкторе, подведя камеру к желаемой позиции и выделив объект рядом – координаты высветятся под окном объектов. Предназначение дополнительного флага неизвестно.
При использовании этой функции необходимо проследить, чтобы она вызывалась только один раз. Взгляните на следующий скрипт:
Begin Travel
AiTravel, 1359, 2700, 1045
End Travel
Он не будет работать, поскольку скрипт будет постоянно загружаться и загружаться, а NPC застынет на месте.
Begin Travel
Short do_once
If ( do_once==0 )
AiTravel, 1359, 2700, 1045
Set do_once to 1
endif
End Travel
Следующий пример будет работать – NPC отправится к желаемой позиции, как только его скрипт станет активным, то есть он будет находиться в одной локации с игроком.
Проверка на совершение необходимого движения
GetAIPackageDone (возвращает Boolean/short)
if ( GetAIPackageDone == 1 )
[делать что-то]
endif
Функция GetAIPackageDone проверяет, появился ли NPC в необходимой локации. В тот самый единственный момент, когда движение заканчивается, функция возвращает 1
Объекты, передвижение, поворот
Надевание предметов
Equip, "ID Объекта"
"Actor_ID" -> Equip, "p_restore_health_q"
Движение и поворот объектов
Следующие функции не работают с игроком, NPC и монстрами. Со статичными объектами всё в порядке. Заметьте: персонажи, стоящие на движущемся предмете вскоре сквозь него проваливаются – этого можно избежать постоянной быстрой деактивацией и активизированием вновь перемещающегося объекта. Также можно снабдить персонажа возможностью левитации или замедления падения (смотрите раздел Секретов и Приёмов).
Движение вдоль осей координат объекта
Move ось(x/y/z), юнит/сек_числ
Move x, 100
Функция перемещает объект по необходимой оси координат с заданной скоростью, которая измеряется в юнитах за секунду, а не за фрейм, что освобождает вас от зависимости от производительности компьютера. Движение производится относительно осей координат самого объекта и зависит от его угла поворота. Таким образом, по оси y объект всегда будет перемещаться вперёд:
Помните: функция не работает на NPC и игроке.
Движение вдоль глобальной оси координат
MoveWorld ось(x/y/z), юнит/сек_числ
MoveWorld z, 100
Функция перемещает объект по глобальной оси координат с заданной скоростью. Движение не зависит от угла поворота. Таким образом, по оси z объект всегда будет двигаться наверх. В глобальной системе координат z всегда вверх-вниз, x восток-запад, y север-юг.
Помните: функция не работает на NPC и игроке.
Поворачивание объектов
Также как и в случае с движением Вы можете поворачивать объект относительно его собственной или глобальной оси координат. Также существует функция, позволяющая определить угол поворота:
Rotate, ось, угол/сек_числ
RotateWorld, ось, угол/сек_числ
GetAngle, ось(x/y/z) (возвращает float)
Rotate, z, -30; поворот 30° за секунду вокруг оси Z
If ( GetAngle, z == 180 )
Учтите, что последняя функция возвращает угол поворота относительно глобальной оси координат. Также заметьте, что угол поворота измеряется не в градусах, а является скоростью. Таким образом, чтобы повернуть объект на 90 градусов, Вам придётся либо просто установить значение угла (мгновенный изменение), либо использовать эти функции вкупе с GetAngle.
Установление позиции и направление объекта по осям
SetAngle, ось, float_числ_угол
SetAngle, z, 30
SetPos, ось, float_числ_позиция
SetPos, z, 477
Эти функции, в отличие от Move и MoveWorld, работают и с персонажами, в том числе с игроком. Они устанавливают необходимый параметр на заданную величину. Система координат всегда локальная для объекта.
GetPos, ось(x/y/z)
GetAngle , ось(x/y/z)
Возвращают текущее положение и угол поворота относительно глобальной оси координат. Кстати, я в консоли вводила без запятой (наугад) и все работало.
Сброс параметров объекта на начальные значения
SetAtStart
Object_ID -> SetAtStart
Перемещает объект на начальное положение, которое было установлено в редакторе.
Как положить предмет рядом с игроком
PlaceAtPC, "ID Объекта", количество_числ, расстояние_числ, направление_числ
PlaceAtPC, "Secret Message", 0, 30, 1
PlaceAtPC, "ancestor_ghost", 1, 256, 1
Функция позволяет расположить некий объект рядом с игроком, причём можно очень чётко задать его положение – выбрать необходимое направление и расстояние до игрового персонажа. Если предмет нельзя поставить в необходимое место ввиду наличия стены, то он появится прямо у игрока под ногами. Также возможно его появление по одной из других, свободных от преград осей.
Направления:
0 = спереди
1 = сзади
2 = слева
3 = справа
Активизирование и деактивация
Enable
Disable
GetDisabled (возвращает Boolean/short)
"ObjectID" -> enable
Функция Disable заставляет объект полностью исчезнуть из игры, однако, прикреплённые к нему скрипты продолжают работать. Enable противоположна ей по предназначению. GetDisabled возвращает 1, если объект деактивирован. Вместе эти функции являются довольно мощным инструментом. Например, они могут заменить нормальный дом на горящий. Они также используются при строительстве крепости.
Внимание: деактивация источников света
У движка существует проблема с отключением подобных объектов – NPC и некоторые другие предметы продолжают быть освещенными, в то время как мир вокруг них – нет. Я не пробовал избежать этого, однако, проблема может быть решена путём простого перемещения источника света, например, на 3 метра под пол. Также во избежание ненужной иллюминации объектов можно после выключения стандартного включить инвертированный источник, значения света которого установлено на противоположное (то есть он генерирует темноту).
Не сохранять изменения, произошедшие с объектом
DontSaveObject
Вызывайте эту функцию, если изменения, произошедшие с объектом (по ходу игры активируемым/деактивируемым/двигающимся) не должны запоминаться при сохранении игры. Это позволит Вас избежать надоедливых сообщений об ошибке, что информация об объекте изменилась.
Ссылка: www.fallout.ru/tes3/library/msfd/msfd6.shtml#1
www.fallout.ru/tes3/library/msfd/msfd4.shtml#6
Можно ли это (хотя бы часть) использовать в консоли, а не лепить в конструкторе свои скрипты, я не знаю. Надо пробовать.
Полезные (для скринов) действияСлучайное движение
AiWander, расстояние_числ, длительность_числ, время_числ, [idle2], [idle3], …[idle9], [reset]
"ID" -> AIWander, 512, 5, 0, 0,20,0,0,10,30,0,0
Это алгоритм случайного движения, который используется почти всеми NPC в игре – они ходят туда обратно, меняют направление движения и останавливаются, чтобы почесать голову или оглядеться.
Длина: определяет расстояние, на которое существо может удалиться от начального положения
Длительность: возможно, время (в часах), которое определяет, как долго NPC будет выполнять своё движение (перед тем, как оно обнуляется, что, возможно, происходит, когда игрок уходит или спит? Не уверен)
Время: вероятно, определяет начальное время, если у движения определена длительность.
[idle2], …[idle9]: возможные варианты прерывания движения:
Idle2: Осматривается
Idle3: Смотрит назад
Idle4: Чешет голову
Idle5: Поправляет одежду и броню на плече
Idle6: Сводит руки вместе, показывая товары
Idle7: Смотрит на пальцы и осматривается с опаской
Idle8: Глубоко задумывается
Idle9: Дотрагивается до оружия
Для того, чтобы заставить NPC просто стоять на месте, можно использовать просто: AIWander, 0, 0, 0
Анимация объектов
Эта группа функций позволяет добавлять анимацию к объектам, заранее определённую в модели (файлы типа nif). Вы можете узнать имена анимационных групп, загрузив модель в окно предварительного просмотра и прокручивая разные варианты. Также это можно увидеть в меню “Character” в окне “Base animation”. Список анимационных групп tiarum.com/wiki/Morrowind:%D0%90%D0%BD%D0%B8%D0...
Однако только группы, определённые в окне базовой анимации могут быть вызваны этими функциями. Не у всех моделей есть анимационные группы, однако разнообразные флаги (под активаторами) являются отличным примером того, что предполагается. Примеры имён групп: idle, idle2, idle3, walk и т.д.
PlayGroup, ИмяГруппы, [Флаги]
PlayGroup, walk, 1
Функция проигрывает определённую группу анимации. Необязательные флаги могут быть использованы для запуска группы разными способами (смотрите ниже).
LoopGroup, ИмяГруппы, раз_числ, [Флаги]
Анимационная группа будет проиграна соответствующим образом заданное количество раз. Необязательные флаги могут быть использованы для запуска группы разными способами (смотрите ниже).
SkipAnim
Предотвращает проигрыш анимации на данный момент.
Флаги
0 = Нормальный
Текущая анимация проигрывает свой цикл, новая анимация начинается с самого начала.
1 = Мгновенный запуск
Текущая анимация прекращает свой проигрыш вне зависимости от выполняемого фрейма. Новая анимация начинается со своего начала.
2 = Мгновенный проигрыш
Текущая анимация прекращает свой проигрыш вне зависимости от выполняемого фрейма. Новая анимация начинается с начала своего цикла повторения.
Повернуть персонажа
Face x_float, y_float
Заставляет NPC повернуться лицом в заданном направлении. Вероятно, функция не прерывает выполнение активной анимации. То есть, если персонаж бродит, а на нём была использована эта функция, то он поворачивается в заданном направлении и продолжает своё движение, как ни в чём ни бывало.
Пример: скрипт заставляет NPC постоянно наблюдать за игроком:
…
set px to player->getpos x
set py to player->getpos y
face px, py
…
Как заставить NPC красться
ForceSneak
ClearForceSneak
GetForceSneak (возвращает Boolean/short)
Команда “ForceSneak” заставляет NPC перейти в крадущийся режим, “ClearForceSneak” выключает его. К сожалению, похоже, не существует функции, способной включить режим бега (она была добавлена лишь в Трибунале). “GetForceSneak” возвращает 1, если NPC крадётся.
Заставить кого-либо упасть
Fall
Заставляет NPC упасть. Может служить дополнительным толчком вниз, когда из под ног персонажа уходит почва. Также заставляет летающие существа свалиться с небес. Эта функция заставляет алхимика разбиться насмерть неподалёку от Сейда Нин.
Активация объектов
AIActivate "Object ID"
AIActivate , ObjectID, [reset]
По словам Bethesda, «эта функция заставляет NPC активировать какой-либо объект. Мощный инструмент, возможности которого трудно переоценить».
В стандартном Морровинде функция, похоже, не работает, единственная её возможность – заставить NPC что-либо выпить. В Трибунале, она, вроде бы, исправлена, по крайней мере, её возможности расширились. Я удачно использовал её, чтобы заставить NPC поднимать оружие, открывать обычные двери и проходить сквозь двери между локациями. Последний вариант работает только, если маркер двери находится в той же локации, что и NPC, или в активной локации, в которой находится герой. Иначе игра вылетает. Мне также удалось удачно использовать активатор – кнопку у Призрачных Ворот.
Мне не удалось обнаружить сигнала AIPackageDone, но поменять направление движения можно и с помощью других методов (смотри ниже).
Тип Объекта При активации
NPC Начать разговор
Контейнер Открыть
Дверь Открыть
Дверь между локациями Открыть/телепортировать (только в той же локации)
Оружие, броня и прочее Поднять
Книга/свиток Прочесть (что бы это означало для NPC?)
Активаторы Выполнить скрипт активатора
Не очень полезныеСледование
AIFollow, "NPC ID", длительность_f_числ, x_f_числ, y_f_числ, z_f_числ, [reset]
AIFollowCell, "NPC ID", "ID локации", длительность_f_числ, x_f_числ, y_f_числ, z_f_числ, [reset]
"MobID" -> AIFollow, "Mob2ID", 0,0,0,0
Функция заставляет одного персонажа следовать за другим. Можно использовать эту возможность, как для следования за игроком, так и для формирования каравана. Пример из моей практики, показывающий использование функции без всяких проверок:
elseif ( state == 20 )
HB_guar_pack_adros_ -> AIFollow, HB_adros_darani, 0, 0, 0, 0
AITravel -8144, -19409, 728 ;новые координаты точки 1
set state to 30
Поскольку здесь нет ни длительности движения, ни определённых координат, гуар будет следовать за NPC, пока не получит другой команды. Поэтому позаботьтесь о том, чтобы функции движения выполнялись только 1 раз, а не несколько десятков раз за секунду.
Длительность, ID локации, координаты x, y, z – условия, по выполнению которых функция будет остановлена. Функция AIFollowCell позволяет пунктом назначение указать некий интерьер. Предназначение дополнительного флага “reset” в данный момент мне неизвестно.
AIEscort, "NPC ID", длительность, x, y, z, [reset]
AIEscortCell, "NPC ID", "ID локации", длительность, x, y, z, [reset]
Эти функции позволяют заставить NPC вести куда-либо игрока. Персонаж остановится и подождёт, если расстояние между ним и игроком увеличится слишком сильно. Пример использования этой функции можно увидеть в самом начале игры, когда стражник, проводящий Вас по кораблю останавливается, чтобы подождать, если Вы отстали от него.
Проверка значения выполняемого движения
Для написания сложных скриптов полезно знать, какой режим движения совершается в данный момент, и в зависимости от этого выполнять определённые действия.
GetCurrentAIPackage (возвращает short)
If ( GetCurrentAIPackage == 2 )
[делать что-то]
endif
Возвращаемые значения:
Действие Значение
Ничего -1
Брожение 0
Путешествие 1
Эскорт 2
Следование 3
Активация 4
Преследование 5
Как заставить NPC пойти куда-либо
AITravel, float_числ_x, float_числ_y, float_числ_z, [reset]
Чтобы заставить NPC проследовать из одного место в другое, Вам следует использовать функцию AITravel.
Аргументы x, y, z – это координаты на глобальной карте. Вы можете определить их в Конструкторе, подведя камеру к желаемой позиции и выделив объект рядом – координаты высветятся под окном объектов. Предназначение дополнительного флага неизвестно.
При использовании этой функции необходимо проследить, чтобы она вызывалась только один раз. Взгляните на следующий скрипт:
Begin Travel
AiTravel, 1359, 2700, 1045
End Travel
Он не будет работать, поскольку скрипт будет постоянно загружаться и загружаться, а NPC застынет на месте.
Begin Travel
Short do_once
If ( do_once==0 )
AiTravel, 1359, 2700, 1045
Set do_once to 1
endif
End Travel
Следующий пример будет работать – NPC отправится к желаемой позиции, как только его скрипт станет активным, то есть он будет находиться в одной локации с игроком.
Проверка на совершение необходимого движения
GetAIPackageDone (возвращает Boolean/short)
if ( GetAIPackageDone == 1 )
[делать что-то]
endif
Функция GetAIPackageDone проверяет, появился ли NPC в необходимой локации. В тот самый единственный момент, когда движение заканчивается, функция возвращает 1
Объекты, передвижение, поворот
Надевание предметов
Equip, "ID Объекта"
"Actor_ID" -> Equip, "p_restore_health_q"
Движение и поворот объектов
Следующие функции не работают с игроком, NPC и монстрами. Со статичными объектами всё в порядке. Заметьте: персонажи, стоящие на движущемся предмете вскоре сквозь него проваливаются – этого можно избежать постоянной быстрой деактивацией и активизированием вновь перемещающегося объекта. Также можно снабдить персонажа возможностью левитации или замедления падения (смотрите раздел Секретов и Приёмов).
Движение вдоль осей координат объекта
Move ось(x/y/z), юнит/сек_числ
Move x, 100
Функция перемещает объект по необходимой оси координат с заданной скоростью, которая измеряется в юнитах за секунду, а не за фрейм, что освобождает вас от зависимости от производительности компьютера. Движение производится относительно осей координат самого объекта и зависит от его угла поворота. Таким образом, по оси y объект всегда будет перемещаться вперёд:
Помните: функция не работает на NPC и игроке.
Движение вдоль глобальной оси координат
MoveWorld ось(x/y/z), юнит/сек_числ
MoveWorld z, 100
Функция перемещает объект по глобальной оси координат с заданной скоростью. Движение не зависит от угла поворота. Таким образом, по оси z объект всегда будет двигаться наверх. В глобальной системе координат z всегда вверх-вниз, x восток-запад, y север-юг.
Помните: функция не работает на NPC и игроке.
Поворачивание объектов
Также как и в случае с движением Вы можете поворачивать объект относительно его собственной или глобальной оси координат. Также существует функция, позволяющая определить угол поворота:
Rotate, ось, угол/сек_числ
RotateWorld, ось, угол/сек_числ
GetAngle, ось(x/y/z) (возвращает float)
Rotate, z, -30; поворот 30° за секунду вокруг оси Z
If ( GetAngle, z == 180 )
Учтите, что последняя функция возвращает угол поворота относительно глобальной оси координат. Также заметьте, что угол поворота измеряется не в градусах, а является скоростью. Таким образом, чтобы повернуть объект на 90 градусов, Вам придётся либо просто установить значение угла (мгновенный изменение), либо использовать эти функции вкупе с GetAngle.
Установление позиции и направление объекта по осям
SetAngle, ось, float_числ_угол
SetAngle, z, 30
SetPos, ось, float_числ_позиция
SetPos, z, 477
Эти функции, в отличие от Move и MoveWorld, работают и с персонажами, в том числе с игроком. Они устанавливают необходимый параметр на заданную величину. Система координат всегда локальная для объекта.
GetPos, ось(x/y/z)
GetAngle , ось(x/y/z)
Возвращают текущее положение и угол поворота относительно глобальной оси координат. Кстати, я в консоли вводила без запятой (наугад) и все работало.
Сброс параметров объекта на начальные значения
SetAtStart
Object_ID -> SetAtStart
Перемещает объект на начальное положение, которое было установлено в редакторе.
Как положить предмет рядом с игроком
PlaceAtPC, "ID Объекта", количество_числ, расстояние_числ, направление_числ
PlaceAtPC, "Secret Message", 0, 30, 1
PlaceAtPC, "ancestor_ghost", 1, 256, 1
Функция позволяет расположить некий объект рядом с игроком, причём можно очень чётко задать его положение – выбрать необходимое направление и расстояние до игрового персонажа. Если предмет нельзя поставить в необходимое место ввиду наличия стены, то он появится прямо у игрока под ногами. Также возможно его появление по одной из других, свободных от преград осей.
Направления:
0 = спереди
1 = сзади
2 = слева
3 = справа
Активизирование и деактивация
Enable
Disable
GetDisabled (возвращает Boolean/short)
"ObjectID" -> enable
Функция Disable заставляет объект полностью исчезнуть из игры, однако, прикреплённые к нему скрипты продолжают работать. Enable противоположна ей по предназначению. GetDisabled возвращает 1, если объект деактивирован. Вместе эти функции являются довольно мощным инструментом. Например, они могут заменить нормальный дом на горящий. Они также используются при строительстве крепости.
Внимание: деактивация источников света
У движка существует проблема с отключением подобных объектов – NPC и некоторые другие предметы продолжают быть освещенными, в то время как мир вокруг них – нет. Я не пробовал избежать этого, однако, проблема может быть решена путём простого перемещения источника света, например, на 3 метра под пол. Также во избежание ненужной иллюминации объектов можно после выключения стандартного включить инвертированный источник, значения света которого установлено на противоположное (то есть он генерирует темноту).
Не сохранять изменения, произошедшие с объектом
DontSaveObject
Вызывайте эту функцию, если изменения, произошедшие с объектом (по ходу игры активируемым/деактивируемым/двигающимся) не должны запоминаться при сохранении игры. Это позволит Вас избежать надоедливых сообщений об ошибке, что информация об объекте изменилась.
Ссылка: www.fallout.ru/tes3/library/msfd/msfd6.shtml#1
www.fallout.ru/tes3/library/msfd/msfd4.shtml#6
Можно ли это (хотя бы часть) использовать в консоли, а не лепить в конструкторе свои скрипты, я не знаю. Надо пробовать.
@темы: Морровинд: разное, Морровинд: консоль
AiWander и PlayGroup работают. Кстати, у Джулана некоторые Idle-анимации свои, не ванильные, а жаль, ванильные мне бы пригодились.
В целом AiWander менее удобен по той простой причине, что много текста. По сути там задается вероятность того, что персонаж выполнит анимацию Idle2..Idle9. Я просто ставила на месте нужной анимации 100, а на месте других - 0. Если задавать сразу несколько анимаций, чувак просто делает их в разном порядке. Команда хороша тем, что анимации зациклены - это же сценарий поведения в бездействии получается.
PlayGroup проигрывает группу анимаций. Можно написать, например, PlayGroup, Idle9, и проиграется анимация Idle9. Но 1 раз. LoopGroup у меня почему-то ничего не зацикливал. И на Джулане это не работает, как я поняла, проигрываются только ванильные анимации, а те которые у него свои - нет.
Если использовать группы типа Spell, 1h и т.д. (ссылка на список в посте), надо писать не PlayGroup, 1h, а PlayGroup, Idle1h. Аналогично, не PlayGroup, Spell, а PlayGroup, IdleSpell и т.д. Ванильные нпс на этих анимациях принимают стандартную позу (взять одноручное оружие, приготовить магию), Джулан как обычно выебнулся - эти у него тоже другие. Хотя с группой Storm (закрыть лицо рукой в пепельную бурю) не поняла. Такая анимация у него точно есть, сама видела, но по команде делать ее не хочет, скотина этакая.
AIActivate работает, как бы это сказать, странно. Данмер с сиськами на приказ взять со стола стоявшую пеед ним бутылку, развернулся и пошел в другую сторону. Куда - неизвестно. Стена спутала его планы, но он в нее упорно шел. Джулан сделал так же. На приказ открыть дверь - та же фигня.
В командах Move и Rotate числовой параметр - таки не скорость никакая, а расстояние движения/угол поворота. То есть вопрос, как останавливать, отпал сам собой