Azazellz Опубликовано 31 июля, 2023 Опубликовано 31 июля, 2023 31.07.2023 01:40:09, tokugava сказал(-а):Пробовал GetItemCount тоже не работает =( У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока. Переставь первую строчку на Player. 1
tokugava Опубликовано 31 июля, 2023 Опубликовано 31 июля, 2023 31.07.2023 08:19:54, Azazellz сказал(-а): У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока. Переставь первую строчку на Player. Спасибо! Помогло!
tokugava Опубликовано 31 июля, 2023 Опубликовано 31 июля, 2023 (изменено) 31.07.2023 08:19:54, Azazellz сказал(-а): У тебя субъект кондишна не тот выставлен. В таком виде ты у НПСа количества золота проверяешь, не у игрока. Переставь первую строчку на 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 Ну и даже если бы скрипт и сработал, я не знаю как вызывать функции в диалогах (((( Может быть вы знаете где посмотреть информацию, примеры скриптов таких или даже может быть знаете где найти гайд или видео гайд? Помогите пожалуйста. Изменено 31 июля, 2023 пользователем tokugava
ac97 Опубликовано 1 августа, 2023 Опубликовано 1 августа, 2023 (изменено) 31.07.2023 16:16:27, tokugava сказал(-а): Помогите пожалуйста ещё разик... Не могу вообще найти никакой информации как создать таймер ожидания до выполнения квеста. Например НПС говорит "приходи через 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), а потом, переход на следующую стадию Изменено 1 августа, 2023 пользователем ac97 1
Azazellz Опубликовано 1 августа, 2023 Опубликовано 1 августа, 2023 31.07.2023 16:16:27, tokugava сказал(-а):Помогите пожалуйста ещё разик... Не могу вообще найти никакой информации как создать таймер ожидания до выполнения квеста. Я где-то видел туториал, но заново найти так и не смог. Лучше наверное так сделать: говоришь с нпс -- диалог переводит квест на стадию с ожиданием -- в этой стадии у тебя скрипт-фрагмент, который, собственно, делает ожидание -- ожидание заканчивается, скрипт переводит квест на следующую стадию с уведомлением. Такое лучше в квестах хранить, чем в диалогах. Функции тебе нужны в основном для того, чтоб их было проще вызывать в теле самого скрипта. Если они несколько раз используются, либо они сильно громоздкие - чтоб меньше сам скрипт загромождать. Можно и без них обходиться, закидывая код для выполнения безо всяких функций. Особенно в скрипт-фрагментах. Конкретно в твоем скрипте ты пытаешься на i, которое определено как целое число, назначить процедуру выполнения ожидания, которая вообще никак в виде целого числа представлена быть не может, потому что, ну, оно время ждет, а не что-то вычисляет =) Естественно ругаться будет. "iTimeToFinish =" просто лишнее. Проперти с ним, соответственно, тоже не нужно. 1
tokugava Опубликовано 2 августа, 2023 Опубликовано 2 августа, 2023 Вобщем перемудрил сам себя.. Никакого скрипта дополнительного не нужно. Эта функция уже есть в утилитах... Ломал голову а оказалось всё куда проще: Utility.WaitGameTime(24) Вот и всё что нужно было написать во фрагменте папируса на вкладке Quest stages Код простой как 3 копейки: SetObjectiveDisplayed(10) Utility.WaitGameTime(24) ; Мда.... MyQuest01.SetStage(20) SetObjectiveDisplayed(20)
budu200 Опубликовано 2 марта, 2024 Опубликовано 2 марта, 2024 (изменено) доброго времени суток... Понимаю, что щас все в се и ** и **. но вот, я до сих пор в LE. Несколько лет не играл в скайрим. Нифига не помню. По крупицам восстанавливаюсь. Можно пример скрипта, как главногоо героя уложить в сауну на полочке? Можно(или нужно) через скрипт...потихому память возвращается. Интересует как в Campfire, уложить ГГ на землю,чтобы он лежал и смотрел вокруг. как на стуле тока лежа. Не пинайте....я на стадии восстановления. Кста на второй вкладке. мой скрипт, он рабочий...если ругается строки посмотртеть, на которые ругается. З.Ы. Кста Часто бывают ошибки из-за очередности установки для LE. skse_1_07_03 и Creation_Kit_1.9.32, они перезаписывают главные скрипты друг друга, и можно получить в итоге тот же UTIL старой версии. Если какой то функции не хватат, посмотрите главные скрипты в обоих вариантах. Изменено 2 марта, 2024 пользователем budu200
Azazellz Опубликовано 6 марта, 2024 Опубликовано 6 марта, 2024 02.03.2024 02:42:58, budu200 сказал(-а): доброго времени суток... Понимаю, что щас все в се и ** и **. но вот, я до сих пор в LE. Несколько лет не играл в скайрим. Нифига не помню. По крупицам восстанавливаюсь. Можно пример скрипта, как главногоо героя уложить в сауну на полочке? Можно(или нужно) через скрипт...потихому память возвращается. Интересует как в Campfire, уложить ГГ на землю,чтобы он лежал и смотрел вокруг. как на стуле тока лежа. Не пинайте....я на стадии восстановления. Кста на второй вкладке. мой скрипт, он рабочий...если ругается строки посмотртеть, на которые ругается. З.Ы. Кста Часто бывают ошибки из-за очередности установки для LE. skse_1_07_03 и Creation_Kit_1.9.32, они перезаписывают главные скрипты друг друга, и можно получить в итоге тот же UTIL старой версии. Если какой то функции не хватат, посмотрите главные скрипты в обоих вариантах. Зачем тебе скрипт для того, чтобы укладывать игрока? Используй фурнитуру. Скрипты для всех версий одной игры общие, насколько я знаю. В SE-AE добавили кое-то, но и там всё должно быть совместимо.
Eon_Tal Опубликовано 26 июня, 2025 Опубликовано 26 июня, 2025 Приветстую , я создал скрипт , согласно ролику Лексо Квази, для пьедисталов ,и он хорошо работает ,но только с уникальными предметами не имеющими уровневых модификаций или зачарований . Кто знает как модифицировать скрипт? Вот тот который у меня Scriptname _Script_mask_nankir01 extends ObjectReference armor property myItem auto bool property placed = FALSE auto ObjectReference property MyRef auto EVENT onActivate(objectReference actronaut) if placed == FALSE if actronaut.getItemCount(myItem) >= 1 actronaut.removeItem(myItem, 1) placed = TRUE MyRef.Enable() else Debug.notification("У вас нет нужного предмета") endif elseif placed == TRUE MyRef.Disable() actronaut.addItem(myItem, 1) placed = FALSE endif endEVENT
Azazellz Опубликовано 28 июня, 2025 Опубликовано 28 июня, 2025 26.06.2025 19:13:12, Eon_Tal сказал(-а): Приветстую , я создал скрипт , согласно ролику Лексо Квази, для пьедисталов ,и он хорошо работает ,но только с уникальными предметами не имеющими уровневых модификаций или зачарований . Кто знает как модифицировать скрипт? Для уровневых модификаций надо будет отдельные последовательные проверки под каждую делать. Сразу в скрипте массивом, или через цикл по формлисту. И выдавать назад тот предмет, который проверку прошел. Озадачил гугловский ИИ, вот что он выдал. Слегка подправил скрипт, но так как я уже несколько лет на парирусе не кодил, то сходу понять, рабочий ли он вообще, мне затруднительно =) Попробуй сделать новый скрипт и скомпилировать. Не забудь указать в массиве все уровневые версии. Scriptname _Script_mask_nankir01_Multi extends ObjectReference ; Массив, который будет хранить ВСЕ возможные версии предмета (маски). ; Вместо одного предмета, мы теперь работаем со списком. Armor[] property myItems auto ; Ссылка на объект в мире, который будет отображаться, когда предмет размещен. ObjectReference property MyRef auto ; Флаг, показывающий, размещен ли предмет. bool property placed = FALSE auto ; Переменная для хранения ТОЧНОЙ версии предмета, которую разместил игрок. ; Это ключевое изменение, чтобы вернуть игроку именно тот предмет, который он положил. Armor property itemThatWasPlaced auto EVENT onActivate(ObjectReference actronaut) ; --- СЦЕНАРИЙ 1: Игрок хочет РАЗМЕСТИТЬ предмет --- if placed == FALSE int i = 0 bool itemFound = FALSE ; Запускаем цикл, чтобы проверить КАЖДЫЙ предмет из нашего списка в инвентаре игрока. while i < myItems.length && itemFound == FALSE Armor currentItem = myItems[i] ; Если у игрока есть текущий предмет из списка... if player.getItemCount(currentItem) >= 1 itemFound = TRUE ; ...мы нашли его! 1. Запоминаем, какой именно предмет мы забираем. itemThatWasPlaced = currentItem ; 2. Забираем этот предмет у игрока. player.removeItem(itemThatWasPlaced, 1) ; 3. Меняем состояние на "размещено". placed = TRUE ; 4. Включаем видимость объекта в мире. MyRef.Enable() ; Можно добавить уведомление об успехе Debug.notification("Предмет размещен.") endif i += 1 ; Переходим к следующему предмету в списке. endwhile ; Если после проверки всего списка мы ничего не нашли... if itemFound == FALSE Debug.notification("У вас нет нужного предмета.") endif ; --- СЦЕНАРИЙ 2: Игрок хочет ЗАБРАТЬ предмет --- elseif placed == TRUE ; Убедимся, что у нас сохранена информация о том, какой предмет был размещен. if itemThatWasPlaced != None ; 1. Выключаем видимость объекта в мире. MyRef.Disable() ; 2. Возвращаем игроку ТОТ САМЫЙ предмет, который он разместил ранее. player.addItem(itemThatWasPlaced, 1) ; 3. Сбрасываем состояние на "не размещено". placed = FALSE ; 4. Очищаем переменную, чтобы избежать проблем в будущем. itemThatWasPlaced = None Debug.notification("Предмет взят.") else ; Эта ситуация не должна произойти при нормальной работе, но это защита от ошибок. Debug.Trace("ОШИБКА: Предмет размещен, но нет информации о том, какой именно!") endif endif endEVENT Для зачарованных игроком предметов сложнее, так как скрипт не контролирует этот параметр вообще. Он просто удаляет (физически) предмет, и выдает назад его копию. И, насколько я помню, с определением зачарований скриптом у игры все плохо, так что тут всю систему надо будет переделывать в корне (например, на контейнер с предметами, откуда будут браться "базовые" версии помещенных внутрь вещей, и активироваться на стенде), либо забить и использовать оружейные стойки и манекены.
Eon_Tal Опубликовано 29 июня, 2025 Опубликовано 29 июня, 2025 28.06.2025 09:20:36, Azazellz сказал(-а): Для уровневых модификаций надо будет отдельные последовательные проверки под каждую делать. Сразу в скрипте массивом, или через цикл по формлисту. И выдавать назад тот предмет, который проверку прошел. Озадачил гугловский ИИ, вот что он выдал. Слегка подправил скрипт, но так как я уже несколько лет на парирусе не кодил, то сходу понять, рабочий ли он вообще, мне затруднительно =) Попробуй сделать новый скрипт и скомпилировать. Не забудь указать в массиве все уровневые версии. Scriptname _Script_mask_nankir01_Multi extends ObjectReference ; Массив, который будет хранить ВСЕ возможные версии предмета (маски). ; Вместо одного предмета, мы теперь работаем со списком. Armor[] property myItems auto ; Ссылка на объект в мире, который будет отображаться, когда предмет размещен. ObjectReference property MyRef auto ; Флаг, показывающий, размещен ли предмет. bool property placed = FALSE auto ; Переменная для хранения ТОЧНОЙ версии предмета, которую разместил игрок. ; Это ключевое изменение, чтобы вернуть игроку именно тот предмет, который он положил. Armor property itemThatWasPlaced auto EVENT onActivate(ObjectReference actronaut) ; --- СЦЕНАРИЙ 1: Игрок хочет РАЗМЕСТИТЬ предмет --- if placed == FALSE int i = 0 bool itemFound = FALSE ; Запускаем цикл, чтобы проверить КАЖДЫЙ предмет из нашего списка в инвентаре игрока. while i < myItems.length && itemFound == FALSE Armor currentItem = myItems[i] ; Если у игрока есть текущий предмет из списка... if player.getItemCount(currentItem) >= 1 itemFound = TRUE ; ...мы нашли его! 1. Запоминаем, какой именно предмет мы забираем. itemThatWasPlaced = currentItem ; 2. Забираем этот предмет у игрока. player.removeItem(itemThatWasPlaced, 1) ; 3. Меняем состояние на "размещено". placed = TRUE ; 4. Включаем видимость объекта в мире. MyRef.Enable() ; Можно добавить уведомление об успехе Debug.notification("Предмет размещен.") endif i += 1 ; Переходим к следующему предмету в списке. endwhile ; Если после проверки всего списка мы ничего не нашли... if itemFound == FALSE Debug.notification("У вас нет нужного предмета.") endif ; --- СЦЕНАРИЙ 2: Игрок хочет ЗАБРАТЬ предмет --- elseif placed == TRUE ; Убедимся, что у нас сохранена информация о том, какой предмет был размещен. if itemThatWasPlaced != None ; 1. Выключаем видимость объекта в мире. MyRef.Disable() ; 2. Возвращаем игроку ТОТ САМЫЙ предмет, который он разместил ранее. player.addItem(itemThatWasPlaced, 1) ; 3. Сбрасываем состояние на "не размещено". placed = FALSE ; 4. Очищаем переменную, чтобы избежать проблем в будущем. itemThatWasPlaced = None Debug.notification("Предмет взят.") else ; Эта ситуация не должна произойти при нормальной работе, но это защита от ошибок. Debug.Trace("ОШИБКА: Предмет размещен, но нет информации о том, какой именно!") endif endif endEVENT Для зачарованных игроком предметов сложнее, так как скрипт не контролирует этот параметр вообще. Он просто удаляет (физически) предмет, и выдает назад его копию. И, насколько я помню, с определением зачарований скриптом у игры все плохо, так что тут всю систему надо будет переделывать в корне (например, на контейнер с предметами, откуда будут браться "базовые" версии помещенных внутрь вещей, и активироваться на стенде), либо забить и использовать оружейные стойки и манекены. Может звучит глупо ,но я скопировал данный вами скрипт , убрал пояснения . Выбило ошибку при компиляции , а именно: D:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Scripts\Source\temp\_Script_Mask_Miraak.psc(13,55): no viable alternative at input '\\r\\n' D:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Scripts\Source\temp\_Script_Mask_Miraak.psc(17,71): no viable alternative at input '\\r\\n' D:\Games\The Elder Scrolls V Skyrim - Special Edition\Data\Scripts\Source\temp\_Script_Mask_Miraak.psc(21,29): required (...)+ loop did not match anything at input 'i'
Azazellz Опубликовано 1 июля, 2025 Опубликовано 1 июля, 2025 29.06.2025 06:59:04, Eon_Tal сказал(-а):Выбило ошибку при компиляции , а именно: Ну, если у тебя нет опыта в написания скриптов, и ты сам проблему найти не можешь, то тут я ничем не помогу. На папирусе я не кодил уже несколько лет, и почти всё забыл из-за недостатка практики. Даже СК установленного с компилятором нет, чтоб точно проверить, на что именно он там ругается. Как вариант, бот забыл задекларировать player (или это я вырезал эту часть, так как там в начале еще была проверка на активацию объекта только игроком). Т.е. заменить 'player' на Game.GetPlayer() в трех местах скрипта. Про последнюю ошибку хз.
Eon_Tal Опубликовано 12 июля, 2025 Опубликовано 12 июля, 2025 (изменено) Чем дальше копаюсь , тем больше ошибок. Кажеться этому не будет конца. Вроде вот вот заработает , а тут еще 10 ошибок. Но как говорится сквозь терни к звездам. Изменено 12 июля, 2025 пользователем Eon_Tal
Eon_Tal Опубликовано 13 июля, 2025 Опубликовано 13 июля, 2025 Приветствую , искакл на многих сайтах , но так и не нашел, как извлекакть определенный предмет из FormList?
YourBunnyWrote Опубликовано 13 июля, 2025 Опубликовано 13 июля, 2025 13.07.2025 09:00:49, Eon_Tal сказал(-а): Приветствую , искакл на многих сайтах , но так и не нашел, как извлекакть определенный предмет из FormList? GetAt Всё провисло и болтается.
Eon_Tal Опубликовано 14 июля, 2025 Опубликовано 14 июля, 2025 Scriptname _Script_Mask_Miraak extends ObjectReference armor property myItem auto armor property myItem2 auto bool property placed = FALSE auto ObjectReference property MyRef auto EVENT onActivate(objectReference actronaut) if placed == FALSE if actronaut.getItemCount(myItem) actronaut.removeItem(myItem, 1) placed = TRUE MyRef.Enable() else Debug.notification("У вас нет нужного предмета") endif if actronaut.getItemCount(myItem2) actronaut.removeItem(myItem2, 1) placed = TRUE MyRef.Enable() else Debug.notification("У вас нет нужного предмета") endif elseif placed == TRUE if MyRef.Disable() actronaut.addItem(myItem, 1) placed = FALSE elseif MyRef.Disable() actronaut.addItem(myItem2, 1) placed = FALSE endif endif endEVENT Я уже приближаюсь к цели . Теперь надо добиться того что бы получать обратно тот же предмет что и положил. Есть советы?
Eon_Tal Опубликовано 15 июля, 2025 Опубликовано 15 июля, 2025 01.07.2025 10:20:42, Azazellz сказал(-а): Ну, если у тебя нет опыта в написания скриптов, и ты сам проблему найти не можешь, то тут я ничем не помогу. На папирусе я не кодил уже несколько лет, и почти всё забыл из-за недостатка практики. Даже СК установленного с компилятором нет, чтоб точно проверить, на что именно он там ругается. Как вариант, бот забыл задекларировать player (или это я вырезал эту часть, так как там в начале еще была проверка на активацию объекта только игроком). Т.е. заменить 'player' на Game.GetPlayer() в трех местах скрипта. Про последнюю ошибку хз. Большое Вам спасибо за помощь. Я розабрался с ошибками . Теперь работает , пока что... Вот готовый скрипт, может кому то понадобится в будущем. Scriptname _Script_Mask_Miraak extends ObjectReference Armor[] property myItems auto ObjectReference property MyRef auto bool property placed = FALSE auto Armor property itemThatWasPlaced auto EVENT onActivate(ObjectReference actronaut) if placed == FALSE int i = 0 bool itemFound = FALSE while i < myItems.length && itemFound == FALSE Armor currentItem = myItems if Game.GetPlayer().getItemCount(currentItem) >= 1 itemFound = TRUE ; ...мы нашли его! itemThatWasPlaced = currentItem Game.GetPlayer().removeItem(itemThatWasPlaced, 1) placed = TRUE MyRef.Enable() Debug.notification("Предмет размещен.") endif i += 1 endwhile if itemFound == FALSE Debug.notification("У вас нет нужного предмета.") endif elseif placed == TRUE if itemThatWasPlaced != None MyRef.Disable() Game.GetPlayer().addItem(itemThatWasPlaced, 1) placed = FALSE itemThatWasPlaced = None Debug.notification("Предмет взят.") else Debug.notification("ОШИБКА: Предмет размещен, но нет информации о том, какой именно!") endif endif endEVENT
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти