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


Фотография

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

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

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

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

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


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

Отправлено

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

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

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

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



 




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

#822 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

Скриптами можно.

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

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

 

Строка с Next Quest в списке стадий не используется и не работает.

Большое спасибо!



#823 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

Скриптами можно.

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

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

 

Строка с Next Quest в списке стадий не используется и не работает.

Да, ещё вопрос если можно. Вдруг вы сталкивались с таким...
На предпоследней стадии кв гг должен поговорить с НПС, и вот что странно... 

Загружаюсь с сохранения где только что завершён ванильный квест, после которого начинается мой квест... с курьера и письма. Курьер приходит, квест начинается, все стадии работают кроме последней - разговора с НПС.
Когда прохожу свой квест, дохожу до НПС... он не вступает в диалог. Вообще. "Е" нажимаю... молчит зараза. Но стоит сохраниться рядом с ним и тут же загрузить эту сохранённую игру, он в диалог вступает, спокойно разговариваю с ним и завершаю квест.

У меня даже предположений нет почему так происходит. Возможно вы сталкивались с такой проблемой?

UPD: Квест не запускается. Сделал как в ванильных квестах в последней стадии своего квеста в той что отмечен чекбокс  Complite Quest написал SangQuestP02.Start() - не запустился. Через консоль в игре запускается.
Добавил стадию... выглядит теперь так:

SetObjectiveCompleted(50) ; Завершённая 50 стадия, это 100 стадия.

SangQuestP02.Start() ; Запуск 2 квеста
SangQuestP02.Setstage(10) ; Установка стадии 2 квеста
stop() ; Хз.. есть в ванильных квестах

Всё равно не запускается. 
Может быть у меня как то не так сам квест сделан? У меня 1 квест заканчивается разговором с НПС. После разговора квест завершается. 
И тут же должен начаться 2 квест и цель поговорить с тем же НПС. 
1 квест завершается и всё... 2 квест не запускается.
Я прикреплю скриншоты где и что отмечал и записывал, может быть вы увидите мою ошибку


 


Сообщение отредактировал tokugava: 28 июля 2023 - 19:17


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

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

Отправлено

У меня даже предположений нет почему так происходит. Возможно вы сталкивались с такой проблемой?

Диалоги НПСам не сразу после первой загрузки раздают, а только после второй.

Штука известная, и вроде было какое-то к ней решение (кажется), но деталей не помню.

 

После разговора квест завершается. 

Если у тебя в разговорном скрипт-фрагменте есть скрипт на завершение квеста - туда же можно закинуть и скрипт со стартом нового.



#825 Ссылка на это сообщение ac97

ac97
  • Скиталец
  • 43 сообщений

Отправлено

Ребят, а while (true) нельзя в папирусе, да? Прост, надо каждые полчаса запускать определенную функцию. Ругается на aaaCheckUpdateScript.psc(5,0): missing EOF at 'While'

 

Код прилагаю:

Scriptname aaaCheckUpdateScript extends Quest

int i = 0

While i < 10
	checkUpd()
	Utility.Wait(1800.0)
endWhile

Function checkUpd()
	string cppResult = aaaCheckUpdateFunctions.checkUpdate()
	If (cppResult == "true")
		Debug.MessageBox("Доступно новое обновление!")
	else
		
	endIf
endFunction

Всё, разобрался. while и подобные штуки должны быть внутри событий и функций

 

Исправленная версия, если кому-то надо:

Scriptname aaaCheckUpdateScript extends Quest

event OnInit()
	While(true)
		checkUpd()
		Utility.Wait(1800.0)
	endWhile
endEvent

Function checkUpd()
	string cppResult = aaaCheckUpdateFunctions.checkUpdate()
	If (cppResult == "true")
		Debug.MessageBox("Доступно новое обновление!")
	else
		
	endIf
endFunction

Сообщение отредактировал ac97: 30 июля 2023 - 14:55


#826 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

Диалоги НПСам не сразу после первой загрузки раздают, а только после второй.

Штука известная, и вроде было какое-то к ней решение (кажется), но деталей не помню.

 

Если у тебя в разговорном скрипт-фрагменте есть скрипт на завершение квеста - туда же можно закинуть и скрипт со стартом нового.

Спасибо!!!!
ВОбщем диалог так и не исправил. Сохраняюсь рядом, перегружаю тогда говорит. Буду искать информацию.

А нет такого же бага у СК с функцией GetGold в condition? 
А то выставил проверку в диалоге, что бы топик появлялся только когда золота больше или равно определённому количеству. Проверяю когда нет столько золота, не появляется как и надо.
Но вот беда, добавляю себе золота, а топик всё равно не появляется.
Пробовал GetItemCount тоже не работает =(

Скрин


Сообщение отредактировал tokugava: 31 июля 2023 - 02:40


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

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

Отправлено

Пробовал GetItemCount тоже не работает =(

У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока.

Переставь первую строчку на Player.



#828 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока.

Переставь первую строчку на Player.

Спасибо! Помогло!



#829 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока.

Переставь первую строчку на Player.

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

Запилил сам скрипт, по идее должен работать... но при компиляции ошибка чё то там не соответствует типу или не задано...
Вот сам скрипт:

Scriptname SangTimeScr extends Quest
Quest Property MyQuest  Auto

Int Property iTimeToFinish auto

Function timerFinish()
    iTimeToFinish = Utility.WaitGameTime(24) ;Ждём 24 часа
    MyQuest.SetStage(40)
EndFunction

Ну и даже если бы скрипт и сработал, я не знаю как вызывать функции в диалогах ((((
Может быть вы знаете где посмотреть информацию, примеры скриптов таких или даже может быть знаете где найти гайд или видео гайд? Помогите пожалуйста.


Сообщение отредактировал tokugava: 31 июля 2023 - 17:20


#830 Ссылка на это сообщение ac97

ac97
  • Скиталец
  • 43 сообщений

Отправлено

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

Запилил сам скрипт, по идее должен работать... но при компиляции ошибка чё то там не соответствует типу или не задано...
Вот сам скрипт:

Scriptname SangTimeScr extends Quest
Quest Property MyQuest  Auto

Int Property iTimeToFinish auto

Function timerFinish()
    iTimeToFinish = Utility.WaitGameTime(24) ;Ждём 24 часа
    MyQuest.SetStage(40)
EndFunction

Ну и даже если бы скрипт и сработал, я не знаю как вызывать функции в диалогах ((((
Может быть вы знаете где посмотреть информацию, примеры скриптов таких или даже может быть знаете где найти гайд или видео гайд? Помогите пожалуйста.

Scriptname SangTimeScr hidden

Function timerFinish(int time)
    Utility.WaitGameTime(time) ;Ждём n часов
EndFunction

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

 

К примеру, у тебя текущая стадия квеста 35, где надо подождать. Открываешь скрипт текущей стадии и пишешь туда timerFinish(24), а потом, переход на следующую стадию


Сообщение отредактировал ac97: 01 августа 2023 - 09:59


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

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

Отправлено

Помогите пожалуйста ещё разик... Не могу вообще найти никакой информации как создать таймер ожидания до выполнения квеста.

Я где-то видел туториал, но заново найти так и не смог.

 

Лучше наверное так сделать: говоришь с нпс -- диалог переводит квест на стадию с ожиданием -- в этой стадии у тебя скрипт-фрагмент, который, собственно, делает ожидание -- ожидание заканчивается, скрипт переводит квест на следующую стадию с уведомлением.

Такое лучше в квестах хранить, чем в диалогах.

 

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

Можно и без них обходиться, закидывая код для выполнения безо всяких функций. Особенно в скрипт-фрагментах.

 

Конкретно в твоем скрипте ты пытаешься на i, которое определено как целое число, назначить процедуру выполнения ожидания, которая вообще никак в виде целого числа представлена быть не может, потому что, ну, оно время ждет, а не что-то вычисляет =)

Естественно ругаться будет.

"iTimeToFinish =" просто лишнее. Проперти с ним, соответственно, тоже не нужно.



#832 Ссылка на это сообщение tokugava

tokugava
  • Новенький
  • 23 сообщений

Отправлено

Вобщем перемудрил сам себя..
Никакого скрипта дополнительного не нужно. Эта функция уже есть в утилитах...
Ломал голову а оказалось всё куда проще:

Utility.WaitGameTime(24)

Вот и всё что нужно было написать во фрагменте папируса на вкладке Quest stages
Код простой как 3 копейки:

SetObjectiveDisplayed(10)
Utility.WaitGameTime(24) ; Мда....
MyQuest01.SetStage(20)
SetObjectiveDisplayed(20)


#833 Ссылка на это сообщение budu200

budu200
  • Новенький
  • 20 сообщений

Отправлено

доброго времени суток...

Понимаю, что щас все в се и ** и **. но вот, я до сих пор в LE. Несколько лет не играл в скайрим. Нифига не помню. По крупицам восстанавливаюсь. Можно пример скрипта, как главногоо героя уложить в сауну на полочке? Можно(или нужно) через скрипт...потихому память возвращается.  Интересует как в Campfire, уложить ГГ на землю,чтобы он лежал и смотрел вокруг. как на стуле тока лежа. Не пинайте....я на стадии восстановления. Кста на второй вкладке. мой скрипт, он рабочий...если ругается строки посмотртеть, на которые ругается.

 

З.Ы. Кста Часто бывают ошибки из-за  очередности установки для LE.  skse_1_07_03 и Creation_Kit_1.9.32,  они перезаписывают главные скрипты друг друга, и можно получить в итоге тот же UTIL старой версии. Если какой то функции не хватат, посмотрите главные скрипты в обоих вариантах.


Сообщение отредактировал budu200: 02 марта 2024 - 04:00


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

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

Отправлено

доброго времени суток...

Понимаю, что щас все в се и ** и **. но вот, я до сих пор в LE. Несколько лет не играл в скайрим. Нифига не помню. По крупицам восстанавливаюсь. Можно пример скрипта, как главногоо героя уложить в сауну на полочке? Можно(или нужно) через скрипт...потихому память возвращается.  Интересует как в Campfire, уложить ГГ на землю,чтобы он лежал и смотрел вокруг. как на стуле тока лежа. Не пинайте....я на стадии восстановления. Кста на второй вкладке. мой скрипт, он рабочий...если ругается строки посмотртеть, на которые ругается.

 

З.Ы. Кста Часто бывают ошибки из-за  очередности установки для LE.  skse_1_07_03 и Creation_Kit_1.9.32,  они перезаписывают главные скрипты друг друга, и можно получить в итоге тот же UTIL старой версии. Если какой то функции не хватат, посмотрите главные скрипты в обоих вариантах.

Зачем тебе скрипт для того, чтобы укладывать игрока? Используй фурнитуру.

 

Скрипты для всех версий одной игры общие, насколько я знаю. В SE-AE добавили кое-то, но и там всё должно быть совместимо.







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

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

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