Для умения "вампирское обольщение" сделал дубликат первого эффекта, успокоения. Так эта зараза отказалась работать, пока не вернул первый, оригинальный эффект.
Некоторые перки завязаны с квестами или скриптами. При создании дубликата другие игровые ресурсы продолжают ссылаться на оригинал, поэтому дубликат и не работает. Выход - просмотреть UseInfo у оригинального перка и переназначить все посылания на ваш дубликат. Но, опять же, это черевато багами и конфликтами.
разве в его рабочем плагине не изменится название перка,если он начнет с ним работу?либо изменится название перка при работе с ним и он сохранит это все в свой рабочий плагин либо в игре не будет нифига работать, т.к. ссылаться будет на несуществующий перк
Выше уже говорили, что ресурсы игры ссылаются не на EditorID, а на FormID. Попробуйте переименовать в СК любую шмотку и вы увидите, что все использующие ее ресурсы сами подхватят новый EditorID. Поэтому переименование оригинальных объектов ничего не меняет, кроме возможных конфликтов с другими плагинами, изменяющими этот же контент. В предложенном мной варианте изменения самих перков останутся в фоновом плагине, а в рабочем будут лишь посылания на них для каких-либо НПС. Опять же повторю, что это чисто теоретически. Возможно я не прав и есть какие-то подводные камни.
Подскажите, как можно толково создать lip-файл для диалога? При генерации в СК для 30-секундной реплики движения губ создаются корректно только на первые 10-15 секунд, остаток фразы персонаж произносит с закрытым ртом.
Друзья, подскажите, как сгенерировать lip-файл для готовой звуковой дорожки? Создаю фразу для диалога, подкладываю по нужному адресу wav-файл, в окне "Edit Response" выделяю дорожку, сталю галочку "From WAV" и жму "Generate Lip File". Ничего не происходит. Что я не так делаю? Или может эта функция в СК не работает?
Подскажите, как можно толково создать lip-файл для диалога? При генерации в СК для 30-секундной реплики движения губ создаются корректно только на первые 10-15 секунд, остаток фразы персонаж произносит с закрытым ртом.
Разобрался. Это пипец. Если кому интересно - поделюсь. Оказывается при создании lip-файла редактор подстраивает движения губ не под звуковую дорожку, а под написанный текст.
Подскажите, как можно заставить актера игнорировать битву? Нужно, чтобы он не вызывал ничьей агрессии и сам никак не реагировал на врагов. Это вроде как должно быть механическое средство передвижения, которое не может самостоятельно перемещаться, а поэтому не должно бросаться в бой или убегать при первой опасности. Я сделал следующее: 1. Выставил Unagressive, Foolhardy и HelpsNobody в закладке AIdata. 2. Удалил все фракции и аи-пакеты. 3. Поставил галочку напротив IsGhost. 4. Попробовал выставить NONE в AttackData, но бесполезно, значение все равно восстанавливается. В итоге актер никого не атакует, но все равно убегает при возникающей угрозе.
- Что это за горы стоят? - А, это орки бегут!
Изменение репутации для пользователя slastik
slastikOffline
Сообщение №100
| Тема: Вопросы по скриптам Papyrus
написано: 15 декабря 2013, 12:06
| Отредактировано: slastik - 15 декабря 2013, 12:07
Доброго времени суток. Возникла проблемка. Составил скрипт для НПС, чтобы при активации диалога с ним сначла выпрыгивало окно с кнопками. Выглядит следующим образом:
Event OnLoad() BlockActivation() EndEvent
EVENT onActivate(objectReference actronaut) Int menu menu = Menu01.Show() If (menu == 0) Activate(player, true) ElseIf (menu == 1) If Player.GetItemCount(Item01) >= 1 Player.RemoveItem(Item01) Spell01.Cast(actronaut) Else Message01.Show() EndIf EndIf endEVENT
Я конечно подозреваю, что многое сделал неправильно, но в таком виде скрипт компилируется и работает. Подскажите, как сделать, чтобы спелл кастовался не на ГГ, а на НПС. Чем нужно заменить actronaut или нужен другой тип эвента?
Подскажите скрипт, который можно повесить на активатор для выключения/включения музыкального сопровождения в заданной локации. С условиями вроде: если музыка включена - отключить, если музыка отключена - включить. Сам пробовал решить этот вопрос окольными путями. Добавил за пределы локации объект MyStatic и в музыкальных треках добавил условие GetDisabled MyStatic == 0, а к активатору прикрутил скрипт: IfMyStatic.IsEnabled() MyStatic.Disable() Else MyStatic.Enable() EndIf Ничего хорошего не получилось. Музыка выключается, но обратно ее вернуть не выходит
Такой вопрос. В статиках есть некоторые объекты с зацикленной анимацией (например двемерские шестерни или поршни). Можно как-либо эту анимацию остановить или запустить по требованию? К примеру, объект неподвижен, а после активации определенного рычага он приходит в движение.
теоретически, возможно. Я видел функцию одну, не помню как она называется, но очень похожа на функцию из облы Set destroy. По описанию по крайней мере. Попробуй примени ее. Ну или просто удали саму анимацию через ниф скуп)
Нет, анимацию удалять нельзя. Мне нужно, чтобы объект проигрывал анимацию, но по требованию...
ну это просто идея как сделать то что ты хочешь, топорным методом
Я так и сделал. Получилось действительно топорно При замене одного объекта другим получается моргание, видно, как он исчезает и снова появляется. Ну ничего.
Столкнулся с проблемой - в состоянии любой трансформации автоматически блокируется доступ к инвентарю, навыкам, карте и т.д. Это происходит независимо от наличия или отсутствия в скрипте команды DisablePlayerControl. Кто знает как обойти этот момент?
Доброго времени суток. Прошу помочь с такой проблемой. На активатор вешается скрипт, который содержит функцию RegisterForSingleUpdateGameTime, которая позволяет запустить событие по истечении определенного времени после активации. Каким образом я могу добавить в этот скрипт еще пару таких же функций, запускающих другие события через другой промежуток времени? Как мне задать им разные имена, чтобы компилятор понимал, что это разные события? Например, мне нужно:
Взялся за скрипт для часов. Имеется 24-часовой циферблат и 24 стрелки, которые изначально отключены. Смысл в том, что часы каждый час должны дисейблить предыдущую стрелку и энейблить следующую (типа стрелка переместилась на час). За основу взял скрипт из вики для автоматического включения/выключения света. Разобрался насколько смог и за два часа состряпал свой вариант. При компиляции выдает ошибки. Привожу сам скрипт:
float Property ClockTime00 = 0.0 auto float Property ClockTime01 = 1.0 auto float Property ClockTime02 = 2.0 auto float Property ClockTime03 = 3.0 auto float Property ClockTime04 = 4.0 auto float Property ClockTime05 = 5.0 auto float Property ClockTime06 = 6.0 auto float Property ClockTime07 = 7.0 auto float Property ClockTime08 = 8.0 auto float Property ClockTime09 = 9.0 auto float Property ClockTime10 = 10.0 auto float Property ClockTime11 = 11.0 auto float Property ClockTime12 = 12.0 auto float Property ClockTime13 = 13.0 auto float Property ClockTime14 = 14.0 auto float Property ClockTime15 = 15.0 auto float Property ClockTime16 = 16.0 auto float Property ClockTime17 = 17.0 auto float Property ClockTime18 = 18.0 auto float Property ClockTime19 = 19.0 auto float Property ClockTime20 = 20.0 auto float Property ClockTime21 = 21.0 auto float Property ClockTime22 = 22.0 auto float Property ClockTime23 = 23.0 auto
objectreference Lever00 auto objectreference Lever01 auto objectreference Lever02 auto objectreference Lever03 auto objectreference Lever04 auto objectreference Lever05 auto objectreference Lever06 auto objectreference Lever07 auto objectreference Lever08 auto objectreference Lever09 auto objectreference Lever10 auto objectreference Lever11 auto objectreference Lever12 auto objectreference Lever13 auto objectreference Lever14 auto objectreference Lever15 auto objectreference Lever16 auto objectreference Lever17 auto objectreference Lever18 auto objectreference Lever19 auto objectreference Lever20 auto objectreference Lever21 auto objectreference Lever22 auto objectreference Lever23 auto
float Function GetCurrentHourOfDay() global
float Time = Utility.GetCurrentGameTime() Time -= Math.Floor(Time) Time *= 24 Return Time
EndFunction
Function RegisterForSingleUpdateGameTimeAt(float GameTime)
Насколько я понимаю, через Event OnInit() часы при загрузке получают стартовую позицию (state) соответствующую текущему игровому времени. Эта позиция включает нужную стрелку и задает ожидание до срабатывания следующей позиции. Затем ситуация повторяется и идет по циклу, и в идеале каждый час стрелка перемещается на одно деление. Но компилятор выдает ошибку:
required (...)+ loop did not match anything at input 'auto' mismatched input '\\r\\n' expecting STATE
Как я понял он ругается именно на позиции. Что у меня прописано неправильно?
Dsion, lolososo, @perture, я не могу пока похвастаться глубокими знаниями в скриптописании, учусь сам на собственных ошибках. Нашел способ, который, как показалось, смогу осилить. Анимированную модель я точно не создам, как сделать плавно движущиеся стрелки не знаю, о массивах действительно не слышал. Я думал, люди здесь помогают друг другу, а не повышают свой уровень самооценки, глядя на других сверху вниз с чувством собственного превосходства. Всего-лишь хотел, чтобы мне помогли найти ошибку. Простите, я наверно ошибся темой.
- Что это за горы стоят? - А, это орки бегут!
Изменение репутации для пользователя slastik
slastikOffline
Сообщение №113
| Тема: Вопросы по скриптам Papyrus
написано: 25 февраля 2015, 18:09
| Отредактировано: slastik - 25 февраля 2015, 18:15
Потому что скрипт в текущем виде - одна большая ошибка.
Спасибо за помощь всем, кто отозвался, но смог разобраться сам. Тело скрипта полностью рабочее, просто я неправильно прописал свойства на внешние объекты. Вместо ObjectReference MyObject auto нужно было всего лишь указать ObjectReference Property MyObject auto. После этих исправлений скрипт прекрасно скомпилировался и работает. Пусть без массивов и всего с одной стрелкой, но зато звук кукушки добавить получилось
К сожалению, выложенный мною ранее скрипт нельзя считать полностью рабочим. Пока стоишь рядом с часами, выходишь из дома и заходишь обратно - скрипт пашет. А вот стоит переместиться в другую локацию, провести там время и вернуться - все останавливается. Решил проблему привязкой второго скрипта, который ресетит часы, типа нужно их заводить время от времени. Вот только не знаю - не накладывается ли при этом запущенный ранее скрипт на повторно запускаемый при заводе. Скрипт, в принципе, один и тот же, но может ли он запускаться несколько раз параллельно, нагружая при этом комп и сохранения, или при каждом новом запуске он убивает предыдущий процесс? Вот в чем вопрос
- Что это за горы стоят? - А, это орки бегут!
Изменение репутации для пользователя slastik
slastikOffline
Сообщение №115
| Тема: Вопросы по скриптам Papyrus
написано: 27 февраля 2015, 08:07
| Отредактировано: slastik - 27 февраля 2015, 09:07
Еще один вопросик махонький, если позволите...какую команду надо вставить в срипт, чтобы проигралась музыка?
В тело скрипта: MySound. Play() И в свойствах: Sound Property MySound auto
Добавлено (27 Февраля 2015, 11:07) --------------------------------------------- И снова здравствуйте. Где те люди, которые советовали мне создать для часов анимированную модель? Я сделал тестовую модель, состоящую из одной стрелки, которая делает полный оборот за 24 игровых часа (4320 секунд). Как теперь мне синхронизировать эту анимацию с игровым временем? Допустим, я привяжу скрипт, в котором через Event OnInit() задам поворот модели по оси на определенный градус относительно циферблата в зависимости от текущего времени. Это даст часам правильную стартовую позицию. Но как быть дальше? Анимация останавливается при выходе из локации и запускается с нуля при входе, анимация не реагирует на пропуск времени и сон, продолжая с того же места, хотя прошло N игровых часов. Кто-то говорил, что с такой моделью можно обойтись вообще без скриптов. Подскажите - как?
Dsion, на счет OnLoad - хорошая идея, спасибо. Как это она мне в голову не пришла...
Добавлено (27 Февраля 2015, 14:18) --------------------------------------------- Dsion, нет, все равно при длительном пропуске времени все идет наперекосяк. Проблема в том, что когда регистрируется SingleUpdateGameTime и ГГ, к примеру, ложится спать, то момент следующего обновления эвента проходит во время сна, соответственно следующий эвент не регистрируется и т.о. цикл сбивается. А OnLoad при пробуждении не срабатывает. Спасибо за участие, но наверно это гиблая идея.
P.S. Единственное, что приходит в голову, - это добавить еще один эвент OnActivate, чтобы гг мог вручную ресетить время, если часы сбились.
Dsion, речь идет о пропуске времени рядом с объектом, к которому привязан скрипт. Если пропускать время в другой локации, то по возвращению вновь сработает OnLoad и все наладится, а вот если находиться рядом, когда объект уже загружен - то цикл сбивается. Это происходит когда пропуск времени или сон по длительности больше, чем время, которое задано для обновления события в скрипте. Если в этот промежуток, когда актер пропускает время или спит, должен сработать следующий Event OnUpdateGameTime - то он не сработает. В результате скрипт зависает на этапе до пропуска времени +1. В моем случае часы находятся в доме, где установлена кровать ГГ. Один из возможных выходов - вынести часы на улицу, но это уже не то
- Что это за горы стоят? - А, это орки бегут!
Изменение репутации для пользователя slastik
slastikOffline
Сообщение №118
| Тема: Вопросы по скриптам Papyrus
написано: 27 февраля 2015, 13:52
| Отредактировано: slastik - 27 февраля 2015, 13:59
Dsion, If (!Is3DLoaded()) Return EndIf Что дает это условие в твоем скрипте? Если модель уже загружена - возврат к предыдущему этапу?
И проверь при возможности свой скрипт на наличие моей проблемы. Целиком я его взять не могу. Приходится адаптировать, потому как мне недостаточно просто вращать, мне еще нужно выравнивать при загрузке относительно текущего игрового времени. Это же часы, а не просто вентилятор
Dsion, с вращением стрелки вокруг оси Z проблем нет, но при попытке вращать ее вокруг оси Y возникают проблемы, стрелка произвольно поворачивается в разных направлениях, уходя за циферблат. Я нарочно подогнал модель так, чтобы она как раз была в нужном положении при установке - и стрелка, и циферблат установлены в редакторе с углами 0 относительно игровых осей. Так что ваш скриптик у меня не работает. Не знаю еще что тут можно сделать.
Но зато переделал свой скрипт по вашему принципу. Убрал к черту состояния и просто вписал все в один эвент с синхронизацией в 0,1. Теперь все работает нормально, видимо зависания скрипта происходили именно из-за наличия множества состояний.