Arin, у меня похожая проблема до сих пор не решена. Нужно было сделать торговца, только вот диалог о торговле так и не появился. Пришлось добавлять НПС торговые фракции, чтобы сработал стандартный вариант. Да и там особо не разбирался. Сейчас смотрел свой мод, еле вспомнил, как вставил аудиодорожку ответа (оно не добавляется через окно же).
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №633
| Тема: Общение
написано: 11 июля 2015, 18:11
Arin, условие обращается к переменной квеста. Скрипт и сама переменная должны иметь флаги Conditional. Одному квесту - только один скрипт с таким флагом. Там же все написано.
А то мне нужно обратится к той же переменной из скрипта, но я не знаю, где её найти
Звучит двусмысленно: 1) Из какого-то условия нужно обратиться к переменной, которая находится в скрипте (я понял так). 2) Переменная находится неизвестно где, а источником обращения к ней является скрипт (так подразумевалось, полагаю).
В общем, нужно обратиться из одного скрипта к переменной, находящейся в другом скрипте. Как:
Scriptname MyScript extends Quest ; Откуда обращаемся к переменным.
MySOURCE Property xLink Auto ; MySOURCE - к чему обращаемся (написать точное имя нужного скрипта), xLink - его произвольный ник для взаимодействия. ; Это Property нужно заполнить, выбрав одну из форм, к которой MySOURCE прикреплен в СК. ; Если не заполнено, взаимодействия не будет. ; Если MySOURCE являются скрипты, временно возникающие в игре (напр., скрипты маг. эффектов), то ими нельзя заполнить это Property. Скриптами алиасов или квестов - можно. ; Если обращаться из скрипта маг. эффекта к скрипту квеста - так можно.
EVENT OnInit() ; Любое событие. xLink.MyFLoat += 1.0 ; Любая переменная, которую хотим менять отсюда, должна иметь MyType Property MyName Auto. Имя здесь должно совпадать с именем там. xLink.MyActor.Kill() ; Делаем с такими переменными, что хотим, как если бы мы находились в исходном скрипте. Т.е. переменные в том скрипте будут подвержены командам отсюда. ENDEVENT
PPS: Еще есть вариант без заполнения Property (пишем в событиях или теле(?) скрипта):
MyNameScript xLink = MyAnyForm as MyNameScript xLink.MyFLoat += 1.0 ; MyNameScript, xLink - то же самое. MyAnyForm - предполагаемая форма или референс, к которой прикреплен MyNameScript. Т.е. для квеста - это Editor ID квеста, для объектов, имеющих копии в мире - это их ObjectReference (не Editor ID!).
Arin, дополнил выше. А, еще: если менять своим скриптом переменную в другом (ванильном) скрипте, то нужно делать это осторожно и смотреть, как это изменение повлияет на исходный. Может получиться так, что скрипт перестанет правильно работать. Могу привести простой пример, но просто поверь на слово.
DarkVetal, я так понял, предмет для включения не является объектом с этим скриптом. Тогда можно использовать квест.
Scriptname _TESTTEST5 extends Quest
ObjectReference Property MyREFR Auto GlobalVariable Property GameHour Auto Float Property fS Auto ; Старт. Float Property fE = 1.0 Auto ; Финиш.
EVENT OnInit() OnUpdateGameTime() ENDEVENT
EVENT OnUpdateGameTime() Float fT = GameHour.Value IF (fT >= fS && fT < fE && fS < fE) || ((fT >= fS || fT < fE) && fS > fE) fT = fE - fT MyREFR.Enable() ELSE fT = fS - fT MyREFR.Disable() ENDIF IF fT < 0.0 fT += 24.0 ENDIF RegisterForSingleUpdateGameTime(fT) ENDEVENT
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №645
| Тема: Вопросы по скриптам Papyrus
написано: 19 июля 2015, 14:24
| Отредактировано: Multigone - 19 июля 2015, 14:40
DarkVetal, вешается на любой работающий квест. Конечно, лучше создать свой собственный (т.е. не использовать ванильный) и запустить его принудительно. Это сделать можно так:
EVENT OnInit() IF !IsRunning() && !IsCompleted() ; Можно объединить с предыдущим, написав это выше. Start() ENDIF ENDEVENT
Скрипт автономен и конфликтует с твоим. Он должен работать стабильно, но лучше проверить в игре.
PS: Время старта и финиша задается в часах (0.0 - 23.(9)); старт может быть больше или меньше финиша. По дефолту там стоит старт в 0.0 ч., финиш в 1.0 ч.
1) Пусть квест состоит из стадий 70, 80, 90, завершающихся последовательно. Нужно, чтобы 90 Topic Info не отображался. Используем условие: (S) (GetStage) (MyQUST) (<) (80) (AND) ; GetStage возвращает наивысший номер завершенных стадий. Чтобы диалог отображался, последняя завершенная стадия должна быть 70, а текущая 80.
2) MyQUST.Start() ; Чтобы запустить к.-л. квест с начальной стадии, или... MyQUST.SetStage(Х) ; Чтобы переключить текущую стадию к.-л. квеста. В обоих случаях MyQUST является Property, которое нужно указать.
3) Game.GetPlayer().AddSpell(MySPEL) ; Добавить игроку Ability или научить его Spell. MySPEL является Property, которое нужно указать.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №647
| Тема: Вопросы по скриптам Papyrus
написано: 21 июля 2015, 11:19
| Отредактировано: Multigone - 27 апреля 2020, 16:51
Так я проверил описание квестов и пересохранил мод загрузив другое сохранение - диалог квеста вообще перестал появляться до того пока я не сохранилигру с подключенным модом и не загрузил сохранение тогда персонаж заговорил и описание появилось ! в нужном месте, вопрос можно ли как нибудь обойти баг с этими пересохранениями почему так получается ? я вроде что то на форуме читал об этом но не помню уже где.
До загрузки сохранения квест запускается не полностью - алиасы заполняются и выполняют свои функции, а диалоги (и, возможно, стадии квеста?)- нет. Поэтому нужно запускать квест скриптом:
EVENT OnInit() IF !IsRunning() && !IsCompleted() Start() ENDIF ENDEVENT
Aksyonov, просто скомпилировать и добавить в квест, в последнюю вкладку Scripts. Настройки на первой вкладке (Priority, Start game Enabled, Run Once) можно оставить по умолчанию.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №650
| Тема: Общение
написано: 26 июля 2015, 16:18
Ronolus, а EditorID / FormID ингредиентов известны заранее? Т. е. будешь брать их из .esm?
Добавлено (01 Августа 2015, 18:31) --------------------------------------------- В общем, у меня другой способ, не связанный с таблицами в Excel. Через форм-листы. Но формы придется кидать туда ручками. А результат будет определяться через инвентарный вес предметов-ингредиентов. Потребуется SKSE. Если так подойдет, то скрипт готов.
1) Если есть файл .pex в папке Scripts - в СК будет возможность менять Property этого скрипта. 2) Если есть .psc в Scripts/Source - просматривать исходник. 3) Если скрипт использует к.-л. другой, указанный в Property, для 1) тот тоже должен находиться в Scripts. 4) Если нет этих файлов - ничего вышеперечисленного делать нельзя, даже если они есть в .bsa. Пример - любые DLC.