Azazellz Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 Эх.. Ну Мирака то зачем мучать? Все ж проще - не поленился, заглянул, как там оно все устроено. Открываем дракона - к нему прилеплен dragonactorscript. В этом скрипте закодированы драконы как тип. А заодно там же и ссылки на другие скрипты, которые отвечают за весь прочий функционал. В DragonDeathScript закодирована проверка на дистанцию, с которой игрок может поглотить душу дракона (чтоб от помершего на другом конце скайрима дракона души не прилетали). И там же ссылка на скрипт, который поглощение делает. Собственно, само поглощение описано в MQKillDragonScript. С комментариями на английском.
Dova0512 Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 17:20:42, Кербер сказал(-а): С Мираком из Dragonborn происходит именно это. Может стоит посмотреть какие скрипты на него повешены? Вот-вот-вот. Я тоже так подумал, но не знаю как посмотреть этот скрипт. Открываю DLC2Miraak и там в окне Papyrus Scripts вообще никакого скрипта нет.
Dova0512 Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 17:33:33, Azazellz сказал(-а): Эх.. Ну Мирака то зачем мучать? Все ж проще - не поленился, заглянул, как там оно все устроено. Открываем дракона - к нему прилеплен dragonactorscript. В этом скрипте закодированы драконы как тип. А заодно там же и ссылки на другие скрипты, которые отвечают за весь прочий функционал. В DragonDeathScript закодирована проверка на дистанцию, с которой игрок может поглотить душу дракона (чтоб от помершего на другом конце скайрима дракона души не прилетали). И там же ссылка на скрипт, который поглощение делает. Собственно, само поглощение описано в MQKillDragonScript. С комментариями на английском. А я мать моя китайский генерал!А я уже неделю мудохаюсь и не мог понять как же сделать этот трюк!Фууухх!Так я правильно понимаю, можно ведь добавить этот скрипт НПС?
Azazellz Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 (изменено) 04.06.2018 17:43:53, Dova0512 сказал(-а): А я мать моя китайский генерал!А я уже неделю мудохаюсь и не мог понять как же сделать этот трюк!Фууухх!Так я правильно понимаю, можно ведь добавить этот скрипт НПС? Напрямую? Нет. Сам по себе он ничего не делает - в нем только функции. Все работает потому, что функция в этом скрипте вызывается из другого скрипта (тот самый DragonDeathScript), который вызывается ивентом из dragonactorscript. Разбирайся =) Изменено 4 июня, 2018 пользователем Azazellz
Dova0512 Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 17:52:41, Azazellz сказал(-а): Напрямую? Нет. Сам по себе он ничего не делает - в нем только функции. Все работает потому, что функция в этом скрипте вызывается из другого скрипта (тот самый DragonDeathScript), который вызывается ивентом из dragonactorscript. Разбирайся =) Спасибо, значит сделаю на их примере такие же скрипты=)
Dova0512 Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 17:54:27, Dova0512 сказал(-а): Спасибо, значит сделаю на их примере такие же скрипты=) Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался?
Azazellz Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 18:57:51, Dova0512 сказал(-а):Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался? Смотря куда добавляешь. Если в квест - сначала надо его создать (ОК нажать). Иначе СК вылетит.
Dova0512 Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 19:01:45, Azazellz сказал(-а): Смотря куда добавляешь. Если в квест - сначала надо его создать (ОК нажать). Иначе СК вылетит. Не-не....Я пытаюсь добавить скрипт созданному НПС.
Azazellz Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 Ну тут уж ничего сказать не могу. Гугли.
werr Опубликовано 4 июня, 2018 Опубликовано 4 июня, 2018 04.06.2018 18:57:51, Dova0512 сказал(-а):Эммм...может не туда обращаюсь, но у меня Creation Kit вылетает каждый раз когда я нажимаю Add script. Никто с этим не сталкивался? Потому что нужно исходники скриптов распаковать. Scripts.rar содержит их все, включая все скрипты из длс. A Random Dude's Story
mr Jyggalag Опубликовано 6 июня, 2018 Опубликовано 6 июня, 2018 Пытаюсь сделать скрипт, что по внутреннему таймеру "менял" бы письма на определённом столике. Сделать смену писем было легко, но прикрутить таймер к скрипту для меня оказалось довольно сложно... Вроде бы этот скрипт работает при компиляции, но когда я жду отведённый срок (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 равно 4TimeBeforeUpdateLetter изначально равно нулю
Azazellz Опубликовано 6 июня, 2018 Опубликовано 6 июня, 2018 (изменено) Чота у тебя регистрация и "он апдейт" к триггеру чтоль привязаны? А анрегистер где? Так нельзя же делать. Пили лучше квест. Зашел в триггер - включился квест стадии 10, стартовал отсчет (и триггер отключился заодно). После отсчета появилось письмо, заодно сам отсчет отключился. Игрок прочитал записку - включился квест стадии 20, пошел новый отсчет. Ну и т.д. Последнюю записку прочел - квест остановился. Это автоматически сделает анрегистр всем апдейтам. Изменено 6 июня, 2018 пользователем Azazellz
mr Jyggalag Опубликовано 7 июня, 2018 Опубликовано 7 июня, 2018 06.06.2018 21:10:41, Azazellz сказал(-а):Чота у тебя регистрация и "он апдейт" к триггеру чтоль привязаны? А анрегистер где? Так нельзя же делать. Пили лучше квест. Зашел в триггер - включился квест стадии 10, стартовал отсчет (и триггер отключился заодно). После отсчета появилось письмо, заодно сам отсчет отключился. Игрок прочитал записку - включился квест стадии 20, пошел новый отсчет. Ну и т.д. Последнюю записку прочел - квест остановился. Это автоматически сделает анрегистр всем апдейтам.Проблема заключается в том, что мне как раз и не надо, чтобы игрок читал письма - они бы случайно просто переиздавались бы, без участия игрока. Я пока решил послать нафиг эти манипуляции с от счётом времени и воспользоваться таймером, сделанным на основе магического эффекта (с выставленным мною временем).
Azazellz Опубликовано 7 июня, 2018 Опубликовано 7 июня, 2018 Ну так если тебе "случайно" надо - так и сделай случайно, без таймера. Подошел игрок к письмам, зацепил триггер - и он одно из писем рандомно "включил". Подошел еще раз - включил другое (или то же самое). Но с магэффектом тоже неплохая идея, да.
mfloengrin Опубликовано 29 июня, 2018 Опубликовано 29 июня, 2018 Добрый день! Подскажите пожалуйста что нужно прописать в скрипте диалога чтобы после его завершения открывалось рэйс меню , а после его закрытия стадия квэста считалась завершенной.
Azazellz Опубликовано 29 июня, 2018 Опубликовано 29 июня, 2018 https://www.creationkit.com/index.php?title=ShowRaceMenu_-_Game Насчет второго - даже хз. По идее если ты открыл рейсменю - ты его должен когда-то закрыть, ибо выхода то оттуда никакого другого нет. При этом пока оно открыто - время самой игры стоит. Поэтому можно попробовать использовать какой-нибудь таймер, ну или заюзать функцию wait (эту или эту). Т.е. скриптом открываешь рейсменю, кодируешь небольшое ожидание, и после этого ожидания переключаешь стадию квеста.
mfloengrin Опубликовано 29 июня, 2018 Опубликовано 29 июня, 2018 29.06.2018 17:11:08, Azazellz сказал(-а): https://www.creationkit.com/index.php?title=ShowRaceMenu_-_Game Насчет второго - даже хз. По идее если ты открыл рейсменю - ты его должен когда-то закрыть, ибо выхода то оттуда никакого другого нет. При этом пока оно открыто - время самой игры стоит. Поэтому можно попробовать использовать какой-нибудь таймер, ну или заюзать функцию wait (эту или эту). Т.е. скриптом открываешь рейсменю, кодируешь небольшое ожидание, и после этого ожидания переключаешь стадию квеста. Спасибо большое
werr Опубликовано 30 июня, 2018 Опубликовано 30 июня, 2018 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 A Random Dude's Story
mfloengrin Опубликовано 30 июня, 2018 Опубликовано 30 июня, 2018 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 Спасибо большое))
allgamer955 Опубликовано 5 июля, 2018 Опубликовано 5 июля, 2018 Уважаемые форумчане, подскажите пожалуйста почему не работает такой скрипт? 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.
werr Опубликовано 5 июля, 2018 Опубликовано 5 июля, 2018 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 не определены. Такой скрипт даже компилироваться не будет. Ты как будто только кусок кода скинул. A Random Dude's Story
allgamer955 Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 Вы правы, ошибка в тексте вопроса. Чтобы исправить ошибки задам вопрос заново Почему скрипт прикреплённый к триггеру 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" Переменная сохраняется только во время выполнения скрипта.
Azazellz Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 05.07.2018 22:40:58, werr сказал(-а):P.s. bpHouse и bpHouseendEVENT не определены.Я так думаю, что это "bpHouse = !bpHouse" и "endEVENT"Перевод строки потерялся =)
werr Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 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"Перевод строки потерялся =)Это я чето в два ночи не сообразил)) A Random Dude's Story
allgamer955 Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 06.07.2018 10:04:21, werr сказал(-а):Если тебе хочется использовать ActiveMagicEffect,.... Какие могут быть варианты? Не предлагать двери и вещи. 06.07.2018 10:04:21, werr сказал(-а):то имеет смысл завести глобальную переменную вместо локальной для данного скрипта и работать с ней. С глобальной переменной начинает получатся. Спасибо.
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти