Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Эх.. Ну Мирака то зачем мучать? Все ж проще - не поленился, заглянул, как там оно все устроено.

Открываем дракона - к нему прилеплен dragonactorscript. В этом скрипте закодированы драконы как тип. А заодно там же и ссылки на другие скрипты, которые отвечают за весь прочий функционал.

В DragonDeathScript закодирована проверка на дистанцию, с которой игрок может поглотить душу дракона (чтоб от помершего на другом конце скайрима дракона души не прилетали).

И там же ссылка на скрипт, который поглощение делает.

Собственно, само поглощение описано в MQKillDragonScript. С комментариями на английском.

Опубликовано
04.06.2018 17:20:42, Кербер сказал(-а):

С Мираком из Dragonborn происходит именно это. Может стоит посмотреть какие скрипты на него повешены?

Вот-вот-вот. Я тоже так подумал, но не знаю как посмотреть этот скрипт. Открываю DLC2Miraak и там в окне Papyrus Scripts вообще никакого скрипта нет.

Опубликовано
04.06.2018 17:33:33, Azazellz сказал(-а):

Эх.. Ну Мирака то зачем мучать? Все ж проще - не поленился, заглянул, как там оно все устроено.

Открываем дракона - к нему прилеплен dragonactorscript. В этом скрипте закодированы драконы как тип. А заодно там же и ссылки на другие скрипты, которые отвечают за весь прочий функционал.

В DragonDeathScript закодирована проверка на дистанцию, с которой игрок может поглотить душу дракона (чтоб от помершего на другом конце скайрима дракона души не прилетали).

И там же ссылка на скрипт, который поглощение делает.

Собственно, само поглощение описано в MQKillDragonScript. С комментариями на английском.

А я мать моя китайский генерал!А я уже неделю мудохаюсь и не мог понять как же сделать этот трюк!Фууухх!Так я правильно понимаю, можно ведь добавить этот скрипт НПС?

Опубликовано (изменено)
04.06.2018 17:43:53, Dova0512 сказал(-а):

А я мать моя китайский генерал!А я уже неделю мудохаюсь и не мог понять как же сделать этот трюк!Фууухх!Так я правильно понимаю, можно ведь добавить этот скрипт НПС?

Напрямую? Нет. Сам по себе он ничего не делает - в нем только функции.

Все работает потому, что функция в этом скрипте вызывается из другого скрипта (тот самый DragonDeathScript), который вызывается ивентом из dragonactorscript.

Разбирайся =)

Изменено пользователем Azazellz
Опубликовано
04.06.2018 17:52:41, Azazellz сказал(-а):

Напрямую? Нет. Сам по себе он ничего не делает - в нем только функции.

Все работает потому, что функция в этом скрипте вызывается из другого скрипта (тот самый DragonDeathScript), который вызывается ивентом из dragonactorscript.

Разбирайся =)

Спасибо, значит сделаю на их примере такие же скрипты=)

Опубликовано
04.06.2018 17:54:27, Dova0512 сказал(-а):

Спасибо, значит сделаю на их примере такие же скрипты=)

Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался?

Опубликовано
04.06.2018 18:57:51, Dova0512 сказал(-а):
Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался?

Смотря куда добавляешь.

Если в квест - сначала надо его создать (ОК нажать). Иначе СК вылетит.

Опубликовано
04.06.2018 19:01:45, Azazellz сказал(-а):

Смотря куда добавляешь.

Если в квест - сначала надо его создать (ОК нажать). Иначе СК вылетит.

Не-не....Я пытаюсь добавить скрипт созданному НПС. 

Опубликовано
04.06.2018 18:57:51, Dova0512 сказал(-а):

Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался?


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

GlobalVariable Property DaysForUpdateLetter  Auto
GlobalVariable Property TimeBeforeUpdateLetter  Auto 
ObjectReference Property Letter00  Auto  
ObjectReference Property Letter01  Auto  
ObjectReference Property Letter02  Auto  
ObjectReference Property Letter03  Auto  
ObjectReference Property Letter04  Auto  
ObjectReference Property Letter05  Auto  

Event OnTriggerEnter(ObjectReference akActionRef)
    If TimeBeforeUpdateLetter.Getvalue() == 0
        TimeBeforeUpdateLetter.SetValue(DaysForUpdateLetter.GetValueInt())
        RegisterForUpdateGameTime(24.0)
    EndIf
EndEvent

Event OnUpdateGameTime()
    If TimeBeforeUpdateLetter.Getvalue() != 0
        If (TimeBeforeUpdateLetter.GetValueInt() - 1)<=0
            TimeBeforeUpdateLetter.SetValue(0)
            LetterUpdate()
        Else
            TimeBeforeUpdateLetter.SetValue(TimeBeforeUpdateLetter.GetValueInt() - 1)
        EndIf
    Endif
EndEvent

Function LetterUpdate()
    DisableLettersN()
    int RandomNum = Utility.RandomInt(1, 60)
    If (1 <= RandomNum) && (RandomNum <= 10)
            Letter00.Enable()
    ElseIf (11 <= RandomNum) && (RandomNum <= 20)
            Letter01.Enable()
    ElseIf (21 <= RandomNum) && (RandomNum <= 30)
            Letter02.Enable()
    ElseIf (31 <= RandomNum) && (RandomNum <= 40)
            Letter03.Enable()
    ElseIf (41 <= RandomNum) && (RandomNum <= 50)
            Letter04.Enable()
    ElseIf (51 <= RandomNum) && (RandomNum <= 60)
            Letter05.Enable()
    EndIf
EndFunction

Function DisableLettersN()
    Letter00.Disable()
    Letter01.Disable()
    Letter02.Disable()
    Letter03.Disable()
    Letter04.Disable()
    Letter05.Disable()
EndFunction 
DaysForUpdateLetter равно 4
TimeBeforeUpdateLetter изначально равно  нулю
Опубликовано (изменено)

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

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

 

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

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

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

Ну и т.д.

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

Изменено пользователем Azazellz
Опубликовано
06.06.2018 21:10:41, Azazellz сказал(-а):

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

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

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

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

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

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

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

https://www.creationkit.com/index.php?title=ShowRaceMenu_-_Game

 

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

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

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

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

Опубликовано
29.06.2018 17:11:08, Azazellz сказал(-а):

https://www.creationkit.com/index.php?title=ShowRaceMenu_-_Game

 

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

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

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

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

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

Опубликовано
29.06.2018 16:18:09, mfloengrin сказал(-а):

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

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

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

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

Event OnMenuClose(String MName)
    If MName == "RaceSex Menu"
        SetStage(xx)
        UnregisterForAllMenus()
    Endif
EndEvent
Опубликовано
30.06.2018 11:42:09, werr сказал(-а):

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

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

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

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

Event OnMenuClose(String MName)
    If MName == "RaceSex Menu"
        SetStage(xx)
        UnregisterForAllMenus()
    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
bpHouse = !bpHouseendEVENT

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

Опубликовано
05.07.2018 15:36:50, allgamer955 сказал(-а):

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

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 не определены. Такой скрипт даже компилироваться не будет. Ты как будто только кусок кода скинул.
Опубликовано

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

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

 

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

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"

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

Опубликовано
05.07.2018 22:40:58, werr сказал(-а):

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

Я так думаю, что это "bpHouse = !bpHouse" и "endEVENT"
Перевод строки потерялся =)
Опубликовано
06.07.2018 07:46:58, allgamer955 сказал(-а):

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


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

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

Совет может быть таким. Если тебе хочется использовать ActiveMagicEffect, то имеет смысл завести глобальную переменную вместо локальной для данного скрипта и работать с ней.
 
06.07.2018 07:47:25, Azazellz сказал(-а):

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

Это я чето в два ночи не сообразил))
Опубликовано
06.07.2018 10:04:21, werr сказал(-а):
Если тебе хочется использовать ActiveMagicEffect,....

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

 

06.07.2018 10:04:21, werr сказал(-а):
то имеет смысл завести глобальную переменную вместо локальной для данного скрипта и работать с ней.

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...