• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
mrgreen1152, LordVadim, да, что анимация, что скелет, задаются для целой расы только. Скриптом можно назначать расу, но это очень противно, ведь на расу в Скайриме слишком много всего завязано, баги потом всю жизнь вылавливать.
Подскажите скрипт, который можно повесить на активатор для выключения/включения музыкального сопровождения в заданной локации. С условиями вроде: если музыка включена - отключить, если музыка отключена - включить. Сам пробовал решить этот вопрос окольными путями. Добавил за пределы локации объект MyStatic и в музыкальных треках добавил условие GetDisabled MyStatic == 0, а к активатору прикрутил скрипт: IfMyStatic.IsEnabled() MyStatic.Disable() Else MyStatic.Enable() EndIf Ничего хорошего не получилось. Музыка выключается, но обратно ее вернуть не выходит
Подскажите скрипт, который можно повесить на активатор для выключения/включения музыкального сопровождения в заданной локации. С условиями вроде: если музыка включена - отключить, если музыка отключена - включить. Сам пробовал решить этот вопрос окольными путями. Добавил за пределы локации объект MyStatic и в музыкальных треках добавил условие GetDisabled MyStatic == 0, а к активатору прикрутил скрипт: ... Ничего хорошего не получилось. Музыка выключается, но обратно ее вернуть не выходит.
SoundCategory Property AudioCategoryMUS Auto;- Категория для отключения фоновой музыки игры
BoolPropertyMyMute = False Auto Hidden
Function SetMute() IfMyMute AudioCategoryMUS.Mute();- Отключаем фоновую музыку Else AudioCategoryMUS.UnMute();- Включаем фоновую музыку EndIf EndFunction
Как засечь событие изготовления предмета в кузнице? Мне нужно получить переключение стадии квеста если игрок изготовил предмет в кузнице. Ведь после изготовления предмет не одевается, а кладётся в инвентарь. Я, конечно, могу поставить триггер, определяющий наличие предмета у игрока, но это немного некрасиво, так как сообщения квеста должны поступить сразу после изготовления предмета.
Изменение репутации для пользователя Aksyonov
AksyonovOffline
Сообщение №670
написано: 10 января 2014, 13:50
| Отредактировано: Aksyonov - 10 января 2014, 13:52
Помогите пожалуйста, нужен скрипт для удаления статического объекта в локации + что бы на месте старого объекта появлялся другой на тех же координатах, было бы замечательно если бы кто нибудь из вас скинул сюда готовый скрипт если он есть или написали бы самостоятельно
Aksyonov, для этого вообще не нужен скрипт. Нужно поставить в это места оба объекта, одному сделать Disable в редакторе. В нужный момент его делать Enable, а другому Disable. Всё зависит от того, чем и когда вы хотите их менять. В любом случае, это вопрос не для данной ветки, а для ветки по редактору, так как в игре уже полно скриптов, которые выполняют такие действия по команде триггера или в других случаях.
Aksyonov, для этого вообще не нужен скрипт. Нужно поставить в это места оба объекта, одному сделать Disable в редакторе. В нужный момент его делать Enable, а другому Disable. Всё зависит от того, чем и когда вы хотите их менять. В любом случае, это вопрос не для данной ветки, а для ветки по редактору, так как в игре уже полно скриптов, которые выполняют такие действия по команде триггера или в других случаях.
Спасибо, как видите я с редактором creation Kit не слишком хорошо знаком, и думал что сделать то о чем спросил можно только при помощи скриптов, тем более что нужно сделать следующие, у нас есть дерево, к нему подходит давакин нажимает и проигрывается анимация если есть топор в инвентаре, давакин начинает рубить дерево, активное дерево Enable удаляется - и судя по вашим словам переключается в ползунок Disable а другое дерево на этом же месте появляется, в нашем случае это обычный пенек, но тогда в моде будет необходимо добавить туда где находится дерево миллионы пеньков? я думаю без скрипта все же не обойтись ? как считаете ?
Изменение репутации для пользователя Myprism
MyprismOffline
Сообщение №673
написано: 11 января 2014, 14:49
| Отредактировано: Myprism - 11 января 2014, 14:50
Как засечь событие изготовления предмета в кузнице? Мне нужно получить переключение стадии квеста если игрок изготовил предмет в кузнице. Ведь после изготовления предмет не одевается, а кладётся в инвентарь. Я, конечно, могу поставить триггер, определяющий наличие предмета у игрока, но это немного некрасиво, так как сообщения квеста должны поступить сразу после изготовления предмета.
Отвечу сам на свой вопрос, может кому пригодится:
Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) If akNewContainer == Game.GetPlayer() If MyQuest.GetStage() < myStage MyQuest.SetStage(myStage) EndIf EndIf EndEvent
подскажите, существует ли скриптовый (или другой, но что бы я мог в скрипте получить да/нет) определить, что ГГ стоит на снегу ? подозреваю, что через проверки на материал или еще как то, но что то сам не смог разобраться и найти решение.
Знатоки, помогите. Пытаюсь реализовать следующее - персонаж за определённое вознаграждение продаёт товары из различных магазинов (как бы посредник). По соответствующей фразе пытаюсь добавить такой скрипт
Код
Scriptname KoshAddFaction extends TopicInfo
MiscObject Property Gold001 Auto Faction property newFaction Auto Int property barterCost Auto
;BEGIN FRAGMENT Fragment_0 Function Fragment_0(ObjectReference akSpeakerRef) Actor akSpeaker = akSpeakerRef as Actor ;BEGIN CODE Game.GetPlayer().RemoveItem(Gold001,barterCost) akSpeaker.AddToFaction(newFaction) akSpeaker.ShowBarterMenu() ;END CODE EndFunction ;END FRAGMENT
однако ничего не происходит. ладно, добавляю в папирус энд
прописываю передаваемые свойства снова, результат - меню открывается, но предметов для торговли нет. В чём причина, подскажите? и как запихать на результат нескольких диалогов один скрипт? и кажется перестала убираться голда. Жуть что творится %)
Со скриптами у меня пока всё плохо, однако хочу реализовать одну идею. В общей картине нужно чтобы в определённом месте появлялся объект на несколько секунд и затем исчезал. Может кто подскажет как это сделать?
Со скриптами у меня пока всё плохо, однако хочу реализовать одну идею. В общей картине нужно чтобы в определённом месте появлялся объект на несколько секунд и затем исчезал. Может кто подскажет как это сделать?
При каких условиях должен появляться объект?
Изменение репутации для пользователя Иероним
ИеронимOffline
Сообщение №679
написано: 22 января 2014, 09:09
| Отредактировано: Иероним - 22 января 2014, 09:11
LordVadim, при активации рычага или же попадание в определённое место на карте, скажем ходьба через коридор где игрок наступает на триггер и появляется нужный объект. Например чтобы пройдя коридор за спиной появился, предположим, скелет.
при активации рычага или же попадание в определённое место на карте, скажем ходьба через коридор где игрок наступает на триггер и появляется нужный объект. Например чтобы пройдя коридор за спиной появился, предположим, скелет.
Вы даете кучу разных условий, алгоритмы реализации которых могут сильно различаться. Сомневаюсь, что в этой ветке кто то будет писать целую лекцию по скриптингу и использованию СК. Здесь (по возможности) помогают решать конкретные проблемы. Поэтому, если вы нуждаетесь в помощи, точно сформулируйте проблему, которую хотите решить.
LordVadim, да тут даже не проблема а скорее полное незнание скриптинга. Согласен что никто здесь лекцию писать не будет, так что лучше я закрою свой вопрос. Пойду штурмовать всевозможные вики. Но всё равно спасибо.
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №682
написано: 22 января 2014, 17:29
| Отредактировано: LordVadim - 22 января 2014, 17:30
да тут даже не проблема а скорее полное незнание скриптинга. Согласен что никто здесь лекцию писать не будет, так что лучше я закрою свой вопрос. Пойду штурмовать всевозможные вики. Но всё равно спасибо.
Будут конкретные вопросы обращайтесь. Кстати, в этой ветке ранее обсуждался вопрос по отображению/скрытию предметов при активации рычага, поищите - может пригодится.
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №683
написано: 24 января 2014, 18:49
| Отредактировано: AleksTirex - 24 января 2014, 22:43
при активации рычага или же попадание в определённое место на карте, скажем ходьба через коридор где игрок наступает на триггер и появляется нужный объект. Например чтобы пройдя коридор за спиной появился, предположим, скелет.
Скрипт вешается на активатор(рычаг) или на триггер. Там пошагово расписано, поэтому там всё понятно.
AleksTirex, разве с xMarkerHeading нужно использовать не PlaceAtMe()? И зачем удалять созданного актера через 5 секунд после создания? Он же для чего то создавался...
И попутно вопрос: вот таким образом созданный, а потом удаленный актер оставляет какие либо следы в сейвах или нет?
AleksTirex, что-то не получается ничего. Максимум чего добился это появление самого себя на маркере со старта локации. Заготовленным нпс и не пахнет. Пытался повесить скрипт на активатор. Можно для чайника разжевать более подробно? Ну не понимаю я ничего в скриптах, и как то не даются они мне особо.
Изменение репутации для пользователя AleksTirex
AleksTirexOffline
Сообщение №687
написано: 24 января 2014, 22:42
| Отредактировано: AleksTirex - 24 января 2014, 22:45
AleksTirex, разве с xMarkerHeading нужно использовать не PlaceAtMe()? И зачем удалять созданного актера через 5 секунд после создания? Он же для чего то создавался... И попутно вопрос: вот таким образом созданный, а потом удаленный актер оставляет какие либо следы в сейвах или нет?
Да, всё верно, это я со слепу и по запарке ошибся надо PlaceAtMe().
Удалять же актёра... так он сам писал: "...появлялся скелет, а потом исчезал." (но сейчас уже не нахожу этой строки, или он откорректировал сообщение, или я уже совсем суперстар, типа совсем старый, слепой и чуть-чуть в маразме ). Если актёра удалять не надо, тогда просто удалить строки ожидания и удаления актёра: Utility.Wait(5.0) ; ждём 5 сек. потом удаляем актёра и временный маркер akNewActor.Disable() akNewActor.Delete()
Следов в сейвах, в принципе, остаться не должно, для этого и пишется команда Delete(), т.е. не выключить, а именно удалить.
******************************************
Иероним, свойствам назначил нужные ID? (маркер и актёра)
И замени akPlayer.PlaceActorAtMe(xMarkerHeading) на akPlayer.PlaceAtMe(xMarkerHeading)
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №688
написано: 25 января 2014, 04:44
| Отредактировано: LordVadim - 25 января 2014, 04:45
AleksTirex, кое-что уже получается. В общем у меня была проблема с самими маркерами но повесив скрипт просто на активатор получилось по нажатию создать нпс, то есть желаемый результат получен. Но что касается со временем, да мне нужно было чтобы скелет появлялся на время но удалив строки скрипта
"Utility.Wait(5.0) ; ждём 5 сек. потом удаляем актёра и временный маркер akMarker.Disable() akMarker.Delete() akNewActor.Disable() akNewActor.Delete() endFunction"
ничего не изменилось. Компилятор ругается и без этих строк скелетон всё равно исчезает через пять секунд. Не реагирует даже на смену самого времени.
Добавлено (25 Января 2014, 11:41) --------------------------------------------- Продолжаю разбираться. Решил проблему с исчезновением повесив скрипт на триггер. Но теперь другая проблема, как сделать чтобы при заходе на триггер нпс создавался единожды а то получаются сплошные дубликаты.