• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
nepewka, не возражаю, доделывай. Вкратце, алгоритм: в алиас квеста для игрока добавляется абилити с эффектом констант-селф-плащ. Квест запускается стандартным скриптом (флаги runOnce, startGameEnabled, может что еще)...
EVENT OnInit() IF !IsCompleted() Start() ENDIF ENDEVENT
Как выглядит и работает плащ, ты знаешь, а если нет, посмотри ваниль. На конечном эффекте плаща указываешь заметный шейдер (контроль работы) и скрипт "при старте этого эффекта дать перк". В условиях эффекта указать "если субъект не имеет этого перка". Подавляющее большинство вопросов по функционалу скриптов можно изучить в СК-вики.
Это все для Скайрима, исключая выдачу перка, что там для F4 - не в курсе.
в алиас квеста для игрока добавляется абилити с эффектом констант-селф-плащ. Квест запускается стандартным скриптом
В референс алиас квеста, изначально заполненный игроком. Абилити можно добавить только в окно Spells алиаса. Скрипт со Start() вешается во вкладку Scripts квеста. Это ж все базовые вещи.
Добрый День! Прошу вас помочь в одной проблеме. При создании какого либо мода в CreationKit не работает Папирус. Хоть то какието квесты, хоть при создании простого торговца. Что только не пробовал. Решил писать уже на форумах. Проблема с какимто флагом. Ниже стандартное сообщение
Starting 1 compile threads for 1 files... Compiling "TIF__02008F83"... (0,0): Unable to find flags file: TESV_Papyrus_Flags.flg E:\Skyrim Special Edition\The Elder Scrolls V Skyrim - Special Edition\Data\Scripts\Source\temp\TIF__02008F83.psc(3,0): Unknown user flag Hidden No output generated for TIF__02008F83, compilation failed.
Batch compile of 1 files finished. 0 succeeded, 1 failed. Failed on TIF__02008F83
Что у меня: Пиратка Скайрима Спец Издания последней версии со SKSE последней версии. архив с Scripts распакован, CreationKit запускается от имени админа. Пользуюсь МО2, и при работе с модификациями не содержащими скрипты проблем нет. CreationKit от "кракозябр" вылечен... Чисто интуитивно предполагаю, что ответ на поверхности, но вообще не знаю что уже и думать..
Mgichko, попробуй следующее (не уверен, что подойдет для SE): в Data/Scripts/Source создай текстовый файл с указанным содержанием, затем переименуй его в TESV_Papyrus_Flags.flg
Flag Hidden 0 { Script Property } Flag Conditional 1 { Script Variable }
Изменение репутации для пользователя valambar
valambarOffline
Сообщение №3097
написано: 30 мая 2022, 20:40
| Отредактировано: valambar - 30 мая 2022, 20:43
Пытаюсь создать книгу, при прочтении которой будет выучено слово силы. Разумеется, наткнулся на полнейший темный лес в отношении синтаксиса.
Вопросы:
1. Как выбрать тип эвента - OnEquipped или OnRead? И соответственно - что у них должно быть прописано в скобочках?
2. При компиляции конструктор ругается, что ID слова силы, которое я прописал в скобках после Teachword, не определено. Что нужно прописать, чтобы оно было компилятором найдено?
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3098
написано: 31 мая 2022, 09:24
| Отредактировано: Multigone - 31 мая 2022, 09:53
Скрипт сохранился без сообщений об ошибках, но при прочтении слово все равно не изучается.
_____
Ага, в окне редактирования пропертей нажал "Автозаполнение" - теперь все изучается, только что интересно - когда читаешь из инвентаря, ничего не происходит, а чтобы слово выучилось, надо выбросить из инвентаря и в таком положении прочитать.
Но еще не разобрался, как написать результирующий скрипт для диалога, чтобы в ходе диалога вещь (в данном случае книга) добавлялась в инвентарь игрока. В Обливионе и Фоллауте 3 и Нью Вегас это было предельно легко, а вот здесь...
Я не нашел подходящего типа эвента, чтобы он работал в диалоге.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3104
написано: 1 июня 2022, 16:40
| Отредактировано: Multigone - 1 июня 2022, 16:45
valambar, общее правило для пустого окна скрипт-фрагментов диалогов: в одном из окон написать ";", скомпилировать, сохранить (закрыть) окно диалога, открыть его, добавить нужное Property (кнопка сбоку), стереть ";", написать желаемый код, в котором выполняются операции с этим Property. Скомпилировать.
Событий там нет, код выполняется в момент начала или конца диалога (это и есть события скрипт-фрагментов диалогов). Сам код будет выглядеть так:
Всё скомпилировалось. Сейчас попробую в игре (задумка мода такова, что за квест с гробницей Валока Тарстан дает в награду не какие-то там жалкие септимы, а свою книгу - драконий словарь, который позволяет выучить слова силы, еще не выученные игроком).
________________
В игре несмотря на то, что я добавил эвент OnEquipped - всё равно срабатывает только на чтение вне инвентаря, т.е. эвент OnRead.
________________
Теперь слова изучаются и при прочтении из инвентаря.
А выдается книга при диалоге с Тарстаном почему-то дважды. Надо поглядеть, где я накосячил.
FormList Property ResetNPCWhiterunLIST Auto ObjectReference Property BanneredMareBad Auto
Event OnActivate(ObjectReference BanneredMareBad) Debug.Notification("Обновление нарядов NPC в Вайтран") Int Index = ResetNPCWhiterunLIST.GetSize() While (Index > 0) Index -= 1 ObjectReference ActorRef = ResetNPCWhiterunLIST.GetAt(Index) as ObjectReference If (ActorRef as Bool) Debug.Trace("ResetInventoryFormListNPC >> " + ActorRef as String + " >> ResetInventory()") ActorRef.ResetInventory() EndIf EndWhile EndEvent
Суть скрипта в том что при использовании кровати на NPC из FromLIST используется команда resetinventory. Скрипт прикремлен через квест -> алиас на игрока. Но чет не работает.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3107
написано: 24 июля 2022, 13:35
| Отредактировано: Multigone - 24 июля 2022, 13:42
1) OnActivate() срабатывает на объекте, который активируют. Поскольку скрипт на алиасе игрока, то событие сработает, если игрока попытается активировать другой объект.
2) У тебя 2 разные переменные с одинаковым именем BanneredMareBad. Скрипт не скомпилируется.
3) Property BanneredMareBad в скрипте не используется (либо скрипт выложен не полностью).
Event OnActivate(ObjectReference BanneredMareBad) Debug.Notification("Обновление нарядов NPC в Вайтран") Int Index = ResetNPCWhiterunLIST.GetSize() While (Index > 0) Index -= 1 ObjectReference ActorRef = ResetNPCWhiterunLIST.GetAt(Index) as ObjectReference If (ActorRef as Bool) Debug.Trace("ResetInventoryFormListNPC >> " + ActorRef as String + " >> ResetInventory()") ActorRef.ResetInventory() EndIf EndWhile EndEvent
deug выводится, а дольше не работает. В чем может быть дело?
Здравствуйте. Можно ли сделать так, чтобы определенная ячейка в экстерьере не обновлялась? Например с помощью скрипта,который вешался бы на триггер. Которым, в свою очередь,окружить нужное место? (нужно для размещения манекенов на улице)
Lissenok, ну почему, почему броня на манекенах и оружие на стойках будут пропадать? Разве манекены не являются актерами, размещаемыми через PlaceAtMe? А значит, их инвентарь, состояние и скрипты не будут затронуты при обновлении ячейки? То же можно сказать про стойки? А даже если и нет, и эти объекты являются включаемыми / отключаемыми, разве обязательно указывать флаг Respawn у их СК-референсов? Может, нужно проверить их реальное поведение, набрав в консоли (SetGameSetting iHoursToRespawnCell 1), выйти с этой локации, подождать пару часов и вернуться обратно? Так много вопросов, так мало ответов...
Lissenok, броня у них может пропасть, если они обновляются, теряя свой инвентарь и/или переменные скрипта MannequinActivatorSCRIPT (при обновлении скрипт ре-инициализируется). Если броня, выданная в СК, не пропадает, это тоже может говорить в пользу их обновления. Это можно проверить, добавив референсу манекена скрипт...
Или, добавить референсу манекена другой скрипт, и, дав манекену броню в игре, проверить переменную скрипта после обновления ячейки (предполагается, что скрипт MannequinActivatorSCRIPT ванильный):
ScriptName _TESTNEWMANN Extends ObjectReference
EVENT OnCellAttach() Utility.Wait(0.5) MannequinActivatorSCRIPT xS = (self AS Actor) AS MannequinActivatorSCRIPT IF !xS Debug.MessageBox("MannequinActivatorSCRIPT не найден!") ELSEIF !xS.ArmorSlot01 Debug.MessageBox("Манекен не имеет запомненных слотов брони!") ELSE Debug.MessageBox("Манекен имеет хотя бы один запомн. слот") Debug.MessageBox(xS.ArmorSlot01.GetName())
Debug.MessageBox("Количество этих предметов в его инвентаре " + GetItemCount(xS.ArmorSlot01))
Multigone, По итогам теста: манекен с первым скриптом - броня пропала. Со вторым - тоже(но он компилировался с ошибкой,поэтому под вопросом), с обычного вынильного так же. Стойки для щитов и оружия( если убрать флаг respawn с референсов активаторов) пока все на месте.
Lissenok, первый скрипт должен выводить сообщение, когда (если) происходит обновление манекена. Для этого он должен быть добавлен к референсу, а не базовому актеру. Если он добавляется базовому актеру, скрипт должен расширять Actor (т.е. ScriptName _TESTNEWMANN Extends Actor).
Второй, да, я его не проверял на компиляцию. Строка 5:
MannequinActivatorSCRIPT xS = ((self AS ObjectReference) AS Actor) AS MannequinActivatorSCRIPT
Он должен выводить сообщение при каждой загрузке ячейки о состоянии манекена (есть ли у него запомненные слоты одежды и что надевать для этого). Если манекен обновляется, нужно задаться вопросом, почему это происходит в обход отсутствия у него флага Respawn, либо почему в вики указана неполная инфа.
Изменение репутации для пользователя Lissenok
LissenokOffline
Сообщение №3120
написано: 22 сентября 2022, 12:39
| Отредактировано: Lissenok - 22 сентября 2022, 14:24
Multigone, Скрипты я добавляла именно референсам. Сообщение выводилось(от первого скрипта). Может что-то в ванильном скрипте заставляет их обновляться? Кстати, ванильный скрипт тоже компилируется с ошибкой: не является функцией или не существует.
Да..... От безысходности просто окружила манекены ванильным триггер боксом, сняла с его референса флаг респауна и... вся броня на месте! и сундук с флагом респауна в этом боксе тоже не обновился)
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)