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


Фотография

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

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

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

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

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


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

Отправлено

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

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

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

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



 




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

#362 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Пытаюсь сделать скрипт, что по внутреннему таймеру "менял" бы письма на определённом столике. Сделать смену писем было легко, но прикрутить таймер к скрипту для меня оказалось довольно сложно... Вроде бы этот скрипт работает при компиляции, но когда я жду отведённый срок (4 дня) игра вылетает. Вопрос следующий - кто знает, как правильно "таймеры" делать?
Сам скрипт:


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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

Чота у тебя регистрация и "он апдейт" к триггеру чтоль привязаны? А анрегистер где?

Так нельзя же делать.

 

Пили лучше квест.

Зашел в триггер - включился квест стадии 10, стартовал отсчет (и триггер отключился заодно). После отсчета появилось письмо, заодно сам отсчет отключился.

Игрок прочитал записку - включился квест стадии 20, пошел новый отсчет.

Ну и т.д.

Последнюю записку прочел - квест остановился. Это автоматически сделает анрегистр всем апдейтам.


Сообщение отредактировал Azazellz: 06 июня 2018 - 22:15


#364 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Чота у тебя регистрация и "он апдейт" к триггеру чтоль привязаны? А анрегистер где?
Так нельзя же делать.
 
Пили лучше квест.
Зашел в триггер - включился квест стадии 10, стартовал отсчет (и триггер отключился заодно). После отсчета появилось письмо, заодно сам отсчет отключился.
Игрок прочитал записку - включился квест стадии 20, пошел новый отсчет.
Ну и т.д.
Последнюю записку прочел - квест остановился. Это автоматически сделает анрегистр всем апдейтам.

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

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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

Ну так если тебе "случайно" надо - так и сделай случайно, без таймера.

Подошел игрок к письмам, зацепил триггер - и он одно из писем рандомно "включил".

Подошел еще раз - включил другое (или то же самое).

Но с магэффектом тоже неплохая идея, да.



#366 Ссылка на это сообщение mfloengrin

mfloengrin
  • Новенький
  • 11 сообщений

Отправлено

Добрый день! Подскажите пожалуйста что нужно прописать в скрипте диалога чтобы после его завершения открывалось рэйс меню , а после его закрытия стадия квэста считалась завершенной.

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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

https://www.creation...RaceMenu_-_Game

 

Насчет второго - даже хз.

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

Поэтому можно попробовать использовать какой-нибудь таймер, ну или заюзать функцию wait (эту или эту).

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



#368 Ссылка на это сообщение mfloengrin

mfloengrin
  • Новенький
  • 11 сообщений

Отправлено

https://www.creation...RaceMenu_-_Game

 

Насчет второго - даже хз.

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

Поэтому можно попробовать использовать какой-нибудь таймер, ну или заюзать функцию wait (эту или эту).

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

Спасибо большое



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

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

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

Отправлено

Добрый день! Подскажите пожалуйста что нужно прописать в скрипте диалога чтобы после его завершения открывалось рэйс меню , а после его закрытия стадия квэста считалась завершенной.

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

В скрипте диалога-то ты прописываешь простую команду:
Game.ShowRaceMenu()
А смена стадии квеста при выходе из этого меню делается чуть мудренее. Вешаешь новый скрипт на квест, где будет следуюющее:

Event OnInIt()
    RegisterForMenu("RaceSex Menu")
EndEvent

Event OnMenuClose(String MName)
    If MName == "RaceSex Menu"
        SetStage(xx)
        UnregisterForAllMenus()
    Endif
EndEvent


#370 Ссылка на это сообщение mfloengrin

mfloengrin
  • Новенький
  • 11 сообщений

Отправлено

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

В скрипте диалога-то ты прописываешь простую команду:

Game.ShowRaceMenu()
А смена стадии квеста при выходе из этого меню делается чуть мудренее. Вешаешь новый скрипт на квест, где будет следуюющее:

Event OnInIt()
    RegisterForMenu("RaceSex Menu")
EndEvent

Event OnMenuClose(String MName)
    If MName == "RaceSex Menu"
        SetStage(xx)
        UnregisterForAllMenus()
    Endif
EndEvent
Спасибо большое))

#371 Ссылка на это сообщение allgamer955

allgamer955
  • Новенький
  • 6 сообщений

Отправлено

Уважаемые форумчане, подскажите пожалуйста почему не работает такой скрипт?

Scriptname ADoTeleportHouseScript extends ActiveMagicEffect
Bool  bHouse = False
Event OnEffectFinish(Actor akTarget, Actor akCaster)
If  bHouse ; True
  Debug.MessageBox(bHouse)
Else ; False
  Debug.MessageBox(bHouse)
Endif
bpHouse = !bpHouseendEVENT

Сколько бы ни кастовал, всё время пишет False.



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

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

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

Отправлено

Уважаемые форумчане, подскажите пожалуйста почему не работает такой скрипт?

Scriptname ADoTeleportHouseScript extends ActiveMagicEffectBool  bHouse = FalseEvent OnEffectFinish(Actor akTarget, Actor akCaster)If  bHouse ; True  Debug.MessageBox(bHouse)Else ; False  Debug.MessageBox(bHouse)EndifbpHouse = !bpHouseendEVENT
Сколько бы ни кастовал, всё время пишет False.
А что еще он должен писать? У тебя bHouse всегда False. Ты значение не меняешь.

P.s. bpHouse и bpHouseendEVENT не определены. Такой скрипт даже компилироваться не будет. Ты как будто только кусок кода скинул.

#373 Ссылка на это сообщение allgamer955

allgamer955
  • Новенький
  • 6 сообщений

Отправлено

Вы правы, ошибка в тексте вопроса.

Чтобы исправить ошибки задам вопрос заново

 

Почему скрипт прикреплённый к триггеру

Scriptname a0DoLightScript extends ObjectReference  

Bool  bHouse = False

Event OnTriggerEnter(ObjectReference akActionRef)
	if akActionRef == Game.GetPlayer()
		If  bHouse ; True
		Debug.MessageBox(bHouse)
		Else ; False
		Debug.MessageBox(bHouse)
		Endif
		bHouse = !bHouse 
	endif
EndEvent

работает корректно, а скрипт прикреплённый к заклинанию

Scriptname ADoTeleportHouseScript extends ActiveMagicEffect  

Bool  bHouse = False

Event OnEffectFinish(Actor akTarget, Actor akCaster)
	If  bHouse ; True
		Debug.MessageBox(bHouse)   ; Будет скрипт телепортации в дом.
	Else ; False
		Debug.MessageBox(bHouse)   ; Будет скрипт телепортации из дома.
	Endif
	bHouse = !bHouse 

endEVENT

работает не корректно. Всё время пишет "Fflse"

Переменная сохраняется только во время выполнения скрипта.



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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

P.s. bpHouse и bpHouseendEVENT не определены.

Я так думаю, что это "bpHouse = !bpHouse" и "endEVENT"
Перевод строки потерялся =)

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

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

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

Отправлено

Вы правы, ошибка в тексте вопроса.
Чтобы исправить ошибки задам вопрос заново
 
Почему скрипт прикреплённый к триггеру
...
работает корректно, а скрипт прикреплённый к заклинанию
...
работает не корректно. Всё время пишет "Fаlse"


Ага, понятно. Дело в том, что инстанция (instance) скрипта, что срабатывает на триггере, не меняется. Проще говоря – работает ВСЕГДА один и тот же скрипт.

В случае же магического эффекта, он, этот эффект, привязан к заклинанию. Каждый раз, когда кастуется спелл, на ActiveMagicEffect-е рабочая instance твоего скрипта инициализируется по-новой. Потому как формально, всякий раз при кастовании спелл возникает как новый объект. Говоря иначе, при касте заклинания, скрипт стартует с самого начала, каждый раз как первый раз. А поскольку исходное значение тобой задано как FALSE, то в if и срабатывает соответствующая ветка.

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

Я так думаю, что это "bpHouse = !bpHouse" и "endEVENT"
Перевод строки потерялся =)

Это я чето в два ночи не сообразил))

#376 Ссылка на это сообщение allgamer955

allgamer955
  • Новенький
  • 6 сообщений

Отправлено

Если тебе хочется использовать ActiveMagicEffect,....

Какие могут быть варианты? Не предлагать двери и вещи.

 

то имеет смысл завести глобальную переменную вместо локальной для данного скрипта и работать с ней.

С глобальной переменной начинает получатся. Спасибо.



#377 Ссылка на это сообщение allgamer955

allgamer955
  • Новенький
  • 6 сообщений

Отправлено

Вот что получилось со скриптом заклинания телепортации.

Scriptname aDoTeleportScript extends activemagiceffect  

GlobalVariable Property gpHouse  Auto 
ObjectReference Property PalaseDova  Auto  
ObjectReference Property WorldDova  Auto  

Event OnEffectStart(Actor akTarget, Actor akCaster)
	If  gpHouse.GetValue() == 0 ; True
;		Debug.MessageBox(gpHouse.GetValue())   ; Телепортация в дом.
		gpHouse.SetValue(1)
		WorldDova.MoveTo(Game.GetPlayer())
		Game.GetPlayer().MoveTo( PalaseDova)
	Else ; False
;		Debug.MessageBox(gpHouse.GetValue())   ; Телепортация из дома.
		gpHouse.SetValue(0)
		Game.GetPlayer().MoveTo( WorldDova)
	Endif

EndEvent

Скрипт прекрасно работает.

Ещё бы заставить напарника телепортировался. Как это можно сделать?

Кто знает подскажите пожалуйста



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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

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



#379 Ссылка на это сообщение allgamer955

allgamer955
  • Новенький
  • 6 сообщений

Отправлено

Навмеши есть. Фендел Не хочет телепортироваться.

В двери идет, телепортироваться не хочет.



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

Azazellz
  • Тактик
  • 1 879 сообщений
  •    

Отправлено

Ну тут уж хз. Когда я телепорты из Mark and Recall юзал - фолловеры за мной бегали. Может, не сразу, с небольшими задержками, но бегали.

 

Главная трудность, имхо - определить, кто там сейчас в КуррентФолловерах находится.

Можешь попробовать разобрать спелл "Лидерская Телепортация" из EFF. При использовании этот спелл перемещает к игроку всех активных фолловеров. Только вот в EFF своя система спутников, и я хз, как она устроена - ни разу в нее не лазил. Да и в ванильную тоже довольно поверхностно - если сможешь найти, куда там текущий спутник записывается (в аллиас квестовый какой-нибудь, например) то можно будет его оттуда и брать, а потом уже moveto на него использовать.


Сообщение отредактировал Azazellz: 06 июля 2018 - 22:41


#381 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Можно попробовать использовать в скрипте
Game.FastTravel(HomeMarker)

где HomeMarker это маркер, к которому будет телепортироваться игрок
Это принудительный фасттревел, так что, по идее, компаньоны и КО (призванные существа там всякие, компаньоны-животные, etc) должны повести себя стандартно, т.е телепортироваться вместе с игроком.
Единственное "но" - я не помню, получится ли так телепортировать игрока в локацию, в настройках которой запрещена возможность фасттревела.





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

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

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