Тема для вопросов по скриптингу.
Функции папируса:
На английском
На русском (не все, но базис)
#661
Отправлено
- werr, Chesh¡re и Olechkafum нравится это
#664
Отправлено
Ребят, помогите, пожалуйста. Возможно где-то здесь есть ответ, но не заметила.
Ситуация такая. В редакторе создаю дом, с кучей манекенов, полок для книг и т.д. В принципе можно скачать готовый, но в них столько лишнего (для меня) и они какие-то громоздкие.
Застопорилась на создании стойки для конкретного оружия (книги, уникальных предметов). Я понимаю, что нужен, например, даэдрический лук в виде статичного объекта, изначально невидимого в игре. Понимаю что для него нужно создать триггер, у которого указать свои ID и Name (ID обозвала так - aaaDaedricBowTrig, Name - Даэдрический лук) и тут ступор - КАКОЙ СКРИПТ нужен для того, чтобы:
- статичный объект становился видимым при наличии в инвентаре, ну, вот к примеру даэдрического лука
- оружие убиралось из инвентаря
- оружие возвращалось обратно в инвентарь
Предполагаю, что в свойствах у триггера потом нужно поставить активацию игроком, привязать этот триггер к статичному объекту и во вкладке Скрипт в свойствах менять, чем будет активироваться сей объект.
Заранее спасибо
В этом моде реализована такие полки:https://tesall.ru/fi...-velikogo-dreva
Помню помогал делать их там для когтей и масок. Давно это было.)
Можете глянуть их устройство, исходники скриптов там тоже лежат. Отследить все связанные объекты для работы там тоже не проблема.
Подскажите пожалуйста со скриптами к фаллауту 4, смотрю раздел по нему мертвый какой-то, задам здесь вопрос. скрипты в играх почти не менялись, редактор тоже.
Сделал мод который автоматически взламывает терминалы на отдельную клавишу, расходуя при этом устройство для взлома и воспроизводя небольшой электрический взрыв(aaaQuickHackExplosion00).
Так вот проблема взрыв возникает ни на столе на котором стоит терминал, а на полу почему-то.
Не выходит ни как сместить его, пробовал MoveTo, пробовал еще SetPosition, не выходит, как-то я не верно применяю эти команды к взрыву, хотя компилируется скрипт нормально.
Вот образец кода:
Сообщение отредактировал Bulbazhab: 06 января 2021 - 18:03
#665
Отправлено
Вот образец кода:
Эээ. Ну, по идее хватило бы простого PlaceAtMe взрыва на терминал.
MoveTo тут не прокатит скорее всего, так как это взрыв, а не статик.
И зачем там какие-то сложные вычисления дальше - непонятно.
В скайриме еще была команда cast - кастовало заклинание. В том числе и с "неодушевленных" объектов. Можно было заставить камень скастовать взрыв, например.
Хз, есть альтернатива в Ф4, или нет.
#666
Отправлено
Эээ. Ну, по идее хватило бы простого PlaceAtMe взрыва на терминал.
MoveTo тут не прокатит скорее всего, так как это взрыв, а не статик.
И зачем там какие-то сложные вычисления дальше - непонятно.
В скайриме еще была команда cast - кастовало заклинание. В том числе и с "неодушевленных" объектов. Можно было заставить камень скастовать взрыв, например.
Хз, есть альтернатива в Ф4, или нет.
С командой MoveTo это я уже экспериментировал, до этого ее вобще не было, но она никакого эффекта не оказывает на взрывы к сожалению. Cast, попробую потом, спасибо, забыл про нее, она есть тут, только немного по другому работает.
Сообщение отредактировал Bulbazhab: 07 января 2021 - 14:40
#667
Отправлено
Так вот проблема взрыв возникает ни на столе на котором стоит терминал, а на полу почему-то.
Взрыв применяется не на саму меш терминала, а на якорную точку (pivot point) - то место, где в редакторе желтое перекрестье у основании любого объекта, помещаемого в Render Window.
Если бы мне нужно было сделать задуманное, то я бы помещал Xmarker через PlaceAtMe() как ты это и делаешь, потом двигал бы маркер вверх (это где-то 64 единицы навскидку) и все тем же пресловутым PlaceAtMe() размещал взрыв по Xmarker-у. Ну и удалить этот маркер в конце было бы не лишним.
- Bulbazhab это нравится
#669
Отправлено
Взрыв применяется не на саму меш терминала, а на якорную точку (pivot point) - то место, где в редакторе желтое перекрестье у основании любого объекта, помещаемого в Render Window.
Если бы мне нужно было сделать задуманное, то я бы помещал Xmarker через PlaceAtMe() как ты это и делаешь, потом двигал бы маркер вверх (это где-то 64 единицы навскидку) и все тем же пресловутым PlaceAtMe() размещал взрыв по Xmarker-у. Ну и удалить этот маркер в конце было бы не лишним.
Ага, теперь получилось, спасибо. Я так и думал что он привязывается к этой якорной точке, только как-то багуется и проваливается сквозь столы на пол. Про маркеры забыл что можно их использовать, хотя в первом своем посте рекомендовал мод человеку, где используется установка объектов как раз через маркеры, скрипты которого я писал ...
#670
Отправлено
Ну если я правильно помню, терминалы в игре заведомо приподняты относительно пола на высоту стола (все столы в игре одной высоты на самом-то деле), чтоб на них размещать. Плюс к ним маркер гуманоида прикреплен, показывающий, какую позу НПС займет при активации терминала. Так что наверное такое дизайнерское решение оправдано.Т.е. у терминалов она вон там снизу?..
Мда.
- Bulbazhab это нравится
#671
Отправлено
Ну если я правильно помню, терминалы в игре заведомо приподняты относительно пола на высоту стола (все столы в игре одной высоты на самом-то деле), чтоб на них размещать. Плюс к ним маркер гуманоида прикреплен, показывающий, какую позу НПС займет при активации терминала. Так что наверное такое дизайнерское решение оправдано.
Ох..точно. Они же как мебель, работают.
#672
Отправлено
Здравствуйте. Мне очень нужна помощь. Дело в том, что я уже долгое время пытаюсь сделать особое призываемое существо для TESV:Skyrim. Оно должно напоминать Пепельного Стража из Dragonborn, но не внешне, а поведением. Оно должно не следовать за героем, а оставаться на той позиции на которой его призвали. Я сделал все что мог и это существо остается на своей позиции и не переходит в другие локации за героем, но вот при быстром перемещении в открытом мире (если оно было призвано в мире Tamriel) оно все равно оказывается рядом с героем. Я уже понял, что тут нужен скрипт, но беда в том, что я не умею их писать. В связи с этим, у меня два вопроса: первый - можно ли без скриптов как то сделать так, что существо не будет следовать вместе с игроком при быстром перемещении и второй - если все же нужен скрипт то не могли бы вы сказать, какой именно и куда его нужно ставить?
Я уже добился того чтобы призванное существо не следовало вслед за игроком в другие локации, теперь мне просто надо знать, как сделать чтобы оно не телепортировалось вместе с игроком при быстром перемещении в открытом мире.
#673
Отправлено
Доброго времени суток. Кайо полный чайник в скриптах, но честно пыталась найти, как реализовать скрипт внутри диалога, который создавал бы переменную (или свойство, как я понимаю, лучше свойство, да?), а затем в дальнейших репликах диалога изменял бы её (банально путём добавления/вычитания числа), а сравнение этой переменной с фиксированными значениями открывало бы определённые ветки диалога.
Казалось бы, это не должно быть сложно, но Кайо не нашла толковых примеров объявления и изменения новых переменных/свойств в скриптовых окошках 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
Отправлено
Вроде как непосредственно в диалогах нельзя объявлять переменные. Они только для простейших штук предназначены.
Можно в связанном квесте это прописать, и из него уже вызывать.
А можно через глобальную переменную прогонять.
int n = BLlevel.GetValueInt() BLlevel.SetValueInt(n + 100)
Такое вроде как должно сразу сработать, из диалога прямо. Только не забудь глобальную переменную с точно таким же названием сделать сначала.
#675
Отправлено
Вроде как непосредственно в диалогах нельзя объявлять переменные. Они только для простейших штук предназначены.
Можно в связанном квесте это прописать, и из него уже вызывать.
А можно через глобальную переменную прогонять.
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()
то добавляется точно такая же ругачка ещё на знак =
#677
Отправлено
Так он может на другое ругается.
Скрипт целиком давай, посмотрим, что там к чему.
Да вот, собственно, и весь упрощенный уже скрипт 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
Отправлено
Здравствуйте. Мне очень нужна помощь. Дело в том, что я уже долгое время пытаюсь сделать особое призываемое существо для TESV:Skyrim. Оно должно напоминать Пепельного Стража из Dragonborn, но не внешне, а поведением. Оно должно не следовать за героем, а оставаться на той позиции на которой его призвали. Я сделал все что мог и это существо остается на своей позиции и не переходит в другие локации за героем, но вот при быстром перемещении в открытом мире (если оно было призвано в мире Tamriel) оно все равно оказывается рядом с героем. Я уже понял, что тут нужен скрипт, но беда в том, что я не умею их писать. В связи с этим, у меня два вопроса: первый - можно ли без скриптов как то сделать так, что существо не будет следовать вместе с игроком при быстром перемещении и второй - если все же нужен скрипт то не могли бы вы сказать, какой именно и куда его нужно ставить?
Я уже добился того чтобы призванное существо не следовало вслед за игроком в другие локации, теперь мне просто надо знать, как сделать чтобы оно не телепортировалось вместе с игроком при быстром перемещении в открытом мире.
Очень прошу, ответьте и на мой вопрос.
#679
Отправлено
Кстати, странно, ошибка со знаком равно куда-то пропала, хотя вроде ничего не изменилось.
Долго думал, почему у меня тоже нифига не компилируется.
Потом допер.
Код в "серьезных" скриптах не может быть выброшен "просто так".
Ему нужен либо ивент, с которого он будет включаться, либо функция, в которой он будет выполняться.
А у тебя этого нет.
Только в скриптовых фрагментах (квестовые стадии, диалоговые окна) можно это все выкидывать не заморачиваясь, СК потом это в финальный скрипт сам собирает. С полноценными скриптами это так не работает.
Вот так это заработает
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: 05 февраля 2021 - 13:59
#681
Отправлено
Я разобрал. Поэтому я и прошу помощи. Там по сути три заклинания. Одно из них - скрипт. Там страж призывается на руну. И это скрипт. Поэтому я и ищу везде где могу как это сделать. Вы, наверное, правы что это скриптовая комбинация, но секрет ее я так и не понял. Поэтому и прошу помочь.
Ну скорее всего тут такая бодяга - если у игрока есть камень, страж призывается как обычно.
Если камня нет - то кастуется другая версия спелла, которая ставит невидимый маркер, и это маркер уже призывает на себя враждебного стража.
А может оно оба раза маркер ставит, просто разных стражей призывает.
Я так думаю, что эту систему можно переделать, просто в проперти скрипта.изменив существо, которое призывается на маркер.
Чтоб проперти ДЛЦшных скриптов смотреть и править, надо исходники скриптов перенести из папки Data\Scripts\Source\ИМЯ_ДЛЦ\ в просто Data\Scripts\Source\
Но, как я уж говорил, я в эту систему не лазил, так что там все может быть и по-другому.
Темы с аналогичным тегами papyrus, help, скрипты, вопросы
Моддинг →
Моддинг Skyrim →
Восстановление на основе Зала ДозораАвтор Alex_andra, 11 дек 2023 mod, help |
|
|||
|
Моддинг →
Моддинг Skyrim →
Отстройка ВинтерхолдаАвтор Alex_andra, 10 авг 2023 bugs, moding, help |
|
||
Моддинг →
Моддинг Oblivion →
Скрипт Для СнаряженияАвтор БесездаБойчик, 07 сен 2022 скрипты, скрипт |
|
|||
Моддинг →
Моддинг Skyrim →
Нужны добровольцы для теста модаАвтор arkadiy111, 11 апр 2022 help |
|
|||
help
Моддинг →
Моддинг Skyrim →
Ram and Skyrim seАвтор Samurai1, 03 апр 2022 help |
|
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 скрытых