Перейти к содержимому


Фотография

Вопросы по скриптам

papyrus help скрипты вопросы

  • Авторизуйтесь для ответа в теме

#661 Ссылка на это сообщение Potatoider

Potatoider
  • Знаменитый оратор


  • 4 350 сообщений
  •    

Отправлено

Тема для вопросов по скриптингу.

Функции папируса:

На английском

На русском (не все, но базис)



 




  • Авторизуйтесь для ответа в теме
Сообщений в теме: 832

#662 Ссылка на это сообщение Пакость

Пакость
  • ⊛⇖⇧⇧⇓⇖⇗⇛⊜← = ☕

  • 4 011 сообщений
  •    

Отправлено

Манекены... Возможно... просто рассмотреть внимательно как оно в базовой игре сделано и работает... там кажись несколько иначе, но суть-да.



#663 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Манекены... Возможно... просто рассмотреть внимательно как оно в базовой игре сделано и работает... там кажись несколько иначе, но суть-да.

Манекены вообще иначе работают.

Они по сути - особые НПСы с ограниченным ИИ.



#664 Ссылка на это сообщение Bulbazhab

Bulbazhab
  • Новенький
  • 12 сообщений

Отправлено

Ребят, помогите, пожалуйста. Возможно где-то здесь есть ответ, но не заметила. 

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

Застопорилась на создании стойки для конкретного оружия (книги, уникальных предметов). Я понимаю, что нужен, например, даэдрический лук в виде статичного объекта, изначально невидимого в игре. Понимаю что для него нужно создать триггер, у которого указать свои ID и Name (ID обозвала так - aaaDaedricBowTrig, Name - Даэдрический лук) и тут ступор - КАКОЙ СКРИПТ нужен для того, чтобы:

 

- статичный объект становился видимым при наличии в инвентаре, ну, вот к примеру даэдрического лука

- оружие убиралось из инвентаря

- оружие возвращалось обратно в инвентарь 

 

Предполагаю, что в свойствах у триггера потом нужно поставить активацию игроком, привязать этот триггер к статичному объекту и во вкладке Скрипт в свойствах менять, чем будет активироваться сей объект.

Заранее спасибо

В этом моде реализована такие полки:https://tesall.ru/fi...-velikogo-dreva

Помню помогал делать их там для когтей и масок. Давно это было.)
Можете глянуть их устройство, исходники скриптов там тоже лежат. Отследить все связанные объекты для работы там тоже не проблема.

 

Подскажите пожалуйста со скриптами к фаллауту 4, смотрю раздел по нему мертвый какой-то, задам здесь вопрос. скрипты в играх почти не менялись, редактор тоже.

Сделал мод который автоматически взламывает терминалы на отдельную клавишу, расходуя при этом устройство для взлома и воспроизводя небольшой электрический взрыв(aaaQuickHackExplosion00).

Так вот проблема взрыв возникает ни на столе на котором стоит терминал, а на полу почему-то.

Не выходит ни как сместить его, пробовал MoveTo, пробовал еще SetPosition, не выходит, как-то я не верно применяю эти команды к взрыву, хотя компилируется скрипт нормально. 

 

Вот образец кода:

 

Прикрепленные изображения

  • Fallout4 2021-01-06 19-51-19.png - Размер: 2,16МБ, Загружен: 226
  • Fallout4 2021-01-06 19-51-20.png - Размер: 2,35МБ, Загружен: 217

Сообщение отредактировал Bulbazhab: 06 января 2021 - 18:03


#665 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Вот образец кода:

Эээ. Ну, по идее хватило бы простого PlaceAtMe взрыва на терминал.

MoveTo тут не прокатит скорее всего, так как это взрыв, а не статик.

И зачем там какие-то сложные вычисления дальше - непонятно.

 

В скайриме еще была команда cast - кастовало заклинание. В том числе и с "неодушевленных" объектов. Можно было заставить камень скастовать взрыв, например.

Хз, есть альтернатива в Ф4, или нет.



#666 Ссылка на это сообщение Bulbazhab

Bulbazhab
  • Новенький
  • 12 сообщений

Отправлено

Эээ. Ну, по идее хватило бы простого PlaceAtMe взрыва на терминал.

MoveTo тут не прокатит скорее всего, так как это взрыв, а не статик.

И зачем там какие-то сложные вычисления дальше - непонятно.

 

В скайриме еще была команда cast - кастовало заклинание. В том числе и с "неодушевленных" объектов. Можно было заставить камень скастовать взрыв, например.

Хз, есть альтернатива в Ф4, или нет.

С командой MoveTo это я уже экспериментировал, до этого ее вобще не было, но она никакого эффекта не оказывает на взрывы к сожалению. Cast, попробую потом, спасибо, забыл про нее, она есть тут, только немного по другому работает.


Сообщение отредактировал Bulbazhab: 07 января 2021 - 14:40


#667 Ссылка на это сообщение werr

werr
  • больной на всю голову

  • 1 733 сообщений
  •    

Отправлено

Так вот проблема взрыв возникает ни на столе на котором стоит терминал, а на полу почему-то.


Взрыв применяется не на саму меш терминала, а на якорную точку (pivot point) - то место, где в редакторе желтое перекрестье у основании любого объекта, помещаемого в Render Window.

Если бы мне нужно было сделать задуманное, то я бы помещал Xmarker через PlaceAtMe() как ты это и делаешь, потом двигал бы маркер вверх (это где-то 64 единицы навскидку) и все тем же пресловутым PlaceAtMe() размещал взрыв по Xmarker-у. Ну и удалить этот маркер в конце было бы не лишним.

#668 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Взрыв применяется не на саму меш терминала, а на якорную точку (pivot point) - то место, где в редакторе желтое перекрестье у основании любого объекта, помещаемого в Render Window.

Т.е. у терминалов она вон там снизу?..

Мда.

 

Тогда и cast оттуда будет идти скорее всего.



#669 Ссылка на это сообщение Bulbazhab

Bulbazhab
  • Новенький
  • 12 сообщений

Отправлено

Взрыв применяется не на саму меш терминала, а на якорную точку (pivot point) - то место, где в редакторе желтое перекрестье у основании любого объекта, помещаемого в Render Window.

Если бы мне нужно было сделать задуманное, то я бы помещал Xmarker через PlaceAtMe() как ты это и делаешь, потом двигал бы маркер вверх (это где-то 64 единицы навскидку) и все тем же пресловутым PlaceAtMe() размещал взрыв по Xmarker-у. Ну и удалить этот маркер в конце было бы не лишним.

Ага, теперь получилось, спасибо. Я так и думал что он привязывается к этой якорной точке, только как-то багуется и проваливается сквозь столы на пол. Про маркеры забыл что можно их использовать, хотя в первом своем посте рекомендовал мод человеку, где используется установка объектов как раз через маркеры, скрипты которого я писал ... :facepalm



#670 Ссылка на это сообщение werr

werr
  • больной на всю голову

  • 1 733 сообщений
  •    

Отправлено

Т.е. у терминалов она вон там снизу?..
Мда.

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

#671 Ссылка на это сообщение Bulbazhab

Bulbazhab
  • Новенький
  • 12 сообщений

Отправлено

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

Ох..точно. Они же как мебель, работают.



#672 Ссылка на это сообщение Herbert d'Godzor

Herbert d'Godzor
  • Новенький
  • 16 сообщений

Отправлено

Здравствуйте. Мне очень нужна помощь.  Дело в том, что я уже долгое время пытаюсь сделать особое призываемое существо для TESV:Skyrim. Оно должно напоминать Пепельного Стража из Dragonborn, но не внешне, а поведением. Оно должно не следовать за героем, а оставаться на той позиции на которой его призвали. Я сделал все что мог и это существо остается на своей позиции и не переходит в другие локации за героем, но вот при быстром перемещении в открытом мире (если оно было призвано в мире Tamriel) оно все равно оказывается рядом с героем. Я уже понял, что тут нужен скрипт, но беда в том, что я не умею их писать. В связи с этим, у меня два вопроса: первый - можно ли без скриптов как то сделать так, что существо не будет следовать вместе с игроком при быстром перемещении и второй - если все же нужен скрипт то не могли бы вы сказать, какой именно и куда его нужно ставить?

Я уже добился того чтобы призванное существо не следовало вслед за игроком в другие локации, теперь мне просто надо знать, как сделать чтобы оно не телепортировалось вместе с игроком при быстром перемещении в открытом мире.



#673 Ссылка на это сообщение Кайо

Кайо
  • Новенький
  • 8 сообщений

Отправлено

Доброго времени суток. Кайо полный чайник в скриптах, но честно пыталась найти, как реализовать скрипт внутри диалога, который создавал бы переменную (или свойство, как я понимаю, лучше свойство, да?), а затем в дальнейших репликах диалога изменял бы её (банально путём добавления/вычитания числа), а сравнение этой переменной с фиксированными значениями открывало бы определённые ветки диалога.

 

Казалось бы, это не должно быть сложно, но Кайо не нашла толковых примеров объявления и изменения новых переменных/свойств в скриптовых окошках Begin/End настройки реплики, как и того, как засунуть итоговое значение в условие. Я попробовала ввести в поле End лишь единожды активируемой реплики такую фразу с объявлением переменной: "int property BLlevel = 1 auto" (где BLlevel - название моего свойства), нажала на компиляцию и получила батарею ошибок: 

 

"...\TIF__0903E5C3.psc(9,0): no viable alternative at input 'int'

...\TIF__0903E5C3.psc(9,0): no viable alternative at input 'int'
...\TIF__0903E5C3.psc(9,25): required (...)+ loop did not match anything at input 'auto' "

Понятия не имею, что не так, и как тогда надо. К тому же, если самый первый шаг ознаменовался таким фейлом, вангую, остальные части моего чайничевского плана заочно обречены на провал (Я планировала в остальных репликах прописывать просто BLlevel += 100 (или -=), а вот как использовать это в поле Conditions, и вовсе, по сути, пока не знаю, но подозреваю, что это можно как-то выкрутить через GetVMQuestVariable).

 

Объясните, пожалуйста, кто знает, как именно всё это использовать. Заочно благодарю за участие.



#674 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Вроде как непосредственно в диалогах нельзя объявлять переменные. Они только для простейших штук предназначены.

Можно в связанном квесте это прописать, и из него уже вызывать.

А можно через глобальную переменную прогонять.

int n = BLlevel.GetValueInt()
BLlevel.SetValueInt(n + 100)

Такое вроде как должно сразу сработать, из диалога прямо. Только не забудь глобальную переменную с точно таким же названием сделать сначала.



#675 Ссылка на это сообщение Кайо

Кайо
  • Новенький
  • 8 сообщений

Отправлено

Вроде как непосредственно в диалогах нельзя объявлять переменные. Они только для простейших штук предназначены.

Можно в связанном квесте это прописать, и из него уже вызывать.

А можно через глобальную переменную прогонять.

int n = BLlevel.GetValueInt()
BLlevel.SetValueInt(n + 100)

Такое вроде как должно сразу сработать, из диалога прямо. Только не забудь глобальную переменную с точно таким же названием сделать сначала.

 

Благодарю за скорый ответ. К сожалению, до сих пор пытаюсь с его помощью до сего-то прокопаться, но то ли знаний не хватает, то ли мозгов, то ли руки из os sacrum, - тщетно. В диалоге не заработало, решила, что ну его, отдельно попыталась написать в диалоговом "квесте" скрипт и прикрепить его к реплике, но в итоге лишь столкнулась с теми же ошибками, что и в диалоге. Такое впечатление, словно CK не понимает, что значит точка и все операторы присвоения... Переменную глобальную успешно создала (кстати, как-то не заметила этот вариант в условиях ранее, спасибо), присвоила значение 0 по умолчанию. Запись в скрипте, дабы хоть разобраться, что происходит, упростила до 

BLlevel.SetValueInt(1)

На всякий случай даже приписала выше этого 

GlobalVariable property BLlevel auto 

Компиляторка упорно выдаёт "no viable alternative at input '.' "

Если же писать первый вариант с

int BLlevVar = BLlevel.GetValueInt()

то добавляется точно такая же ругачка ещё на знак =



#676 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

то добавляется точно такая же ругачка ещё на знак =

Так он может на другое ругается.

Скрипт целиком давай, посмотрим, что там к чему.



#677 Ссылка на это сообщение Кайо

Кайо
  • Новенький
  • 8 сообщений

Отправлено

Так он может на другое ругается.

Скрипт целиком давай, посмотрим, что там к чему.

Да вот, собственно, и весь упрощенный уже скрипт XD

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

Scriptname BLlevelScrInit extends Quest  

GlobalVariable property BLlevel auto
BLlevel.SetValueInt(1) 

В более сложном варианте вот: 

Scriptname BLlevelScrInit extends Quest  

GlobalVariable property BLlevel auto

int BLlevVar = BLlevel.GetValueInt()
BLlevel.SetValueInt(BLlevVar + 100)

Но тут сразу три ошибки:

no viable alternative at input 'BLlevel'
required (...)+ loop did not match anything at input '.'
Unknown user flag BLleve

 

Кстати, странно, ошибка со знаком равно куда-то пропала, хотя вроде ничего не изменилось.



#678 Ссылка на это сообщение Herbert d'Godzor

Herbert d'Godzor
  • Новенький
  • 16 сообщений

Отправлено

Здравствуйте. Мне очень нужна помощь.  Дело в том, что я уже долгое время пытаюсь сделать особое призываемое существо для TESV:Skyrim. Оно должно напоминать Пепельного Стража из Dragonborn, но не внешне, а поведением. Оно должно не следовать за героем, а оставаться на той позиции на которой его призвали. Я сделал все что мог и это существо остается на своей позиции и не переходит в другие локации за героем, но вот при быстром перемещении в открытом мире (если оно было призвано в мире Tamriel) оно все равно оказывается рядом с героем. Я уже понял, что тут нужен скрипт, но беда в том, что я не умею их писать. В связи с этим, у меня два вопроса: первый - можно ли без скриптов как то сделать так, что существо не будет следовать вместе с игроком при быстром перемещении и второй - если все же нужен скрипт то не могли бы вы сказать, какой именно и куда его нужно ставить?

Я уже добился того чтобы призванное существо не следовало вслед за игроком в другие локации, теперь мне просто надо знать, как сделать чтобы оно не телепортировалось вместе с игроком при быстром перемещении в открытом мире.

Очень прошу, ответьте и на мой вопрос.



#679 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Кстати, странно, ошибка со знаком равно куда-то пропала, хотя вроде ничего не изменилось.

Долго думал, почему у меня тоже нифига не компилируется.

Потом допер.

 

Код в "серьезных" скриптах не может быть выброшен "просто так".

Ему нужен либо ивент, с которого он будет включаться, либо функция, в которой он будет выполняться.

А у тебя этого нет.

 

Только в скриптовых фрагментах (квестовые стадии, диалоговые окна) можно это все выкидывать не заморачиваясь, СК потом это в финальный скрипт сам собирает. С полноценными скриптами это так не работает.

 

Вот так это заработает

Scriptname BLlevelScrInit extends Quest 

GlobalVariable property BLlevel auto

Function PlusLevel (int n)
int BLlevVar = BLlevel.GetValueInt()
BLlevel.SetValueInt(BLlevVar + n)
EndFunction

Потом можно будет вызывать эту функцию из диалогов, указывая нужное число n.

 

Но вообще, это излишне, так как в диалогах это должно работать и без всяких заморочек.

GlobalVariable BLlevel
int n = BLlevel.GetValueInt()
BLlevel.SetValueInt(n + 100)

Вот в таком виде.

 

 

 

Очень прошу, ответьте и на мой вопрос.

Врядли это скриптами делается. На ИИ вообще сложно ими влиять, особенно на "базовый".

 

Разбери сам призыв стража, посмотри, как он устроен. Я туда не лазил никогда, так что ничего сказать не могу.

Если оригинальный страж за игроком не следует - возможно, там не простой призыв, а скриптовая комбинация. Т.е. оно не призывает моба, как обычно, а спавнит его в указанную точку.

А может и что-то более сложное, комбинированное.



#680 Ссылка на это сообщение Herbert d'Godzor

Herbert d'Godzor
  • Новенький
  • 16 сообщений

Отправлено

Врядли это скриптами делается. На ИИ вообще сложно ими влиять, особенно на "базовый".

 

Разбери сам призыв стража, посмотри, как он устроен. Я туда не лазил никогда, так что ничего сказать не могу.

Если оригинальный страж за игроком не следует - возможно, там не простой призыв, а скриптовая комбинация. Т.е. оно не призывает моба, как обычно, а спавнит его в указанную точку.

А может и что-то более сложное, комбинированное.

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


Сообщение отредактировал Herbert d'Godzor: 05 февраля 2021 - 13:59


#681 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

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

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

Если камня нет - то кастуется другая версия спелла, которая ставит невидимый маркер, и это маркер уже призывает на себя враждебного стража.

А может оно оба раза маркер ставит, просто разных стражей призывает.

 

Я так думаю, что эту систему можно переделать, просто в проперти скрипта.изменив существо, которое призывается на маркер.

Чтоб проперти ДЛЦшных скриптов смотреть и править, надо исходники скриптов перенести из папки Data\Scripts\Source\ИМЯ_ДЛЦ\ в просто Data\Scripts\Source\

 

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







Темы с аналогичным тегами papyrus, help, скрипты, вопросы

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых