Модератор форума: Kris†a™  
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)

Вопросы по скриптам Papyrus
sansuli  Offline  Сообщение №1 написано: 31 августа 2012, 13:29 | Отредактировано: Multigone - 23 апреля 2020, 14:24


The Red Sun


193
Уроки по скриптованию на языке Papyrus
Прежде чем задать вопрос просмотрите вышеуказанные уроки.
ok


Тема регламентирована.


• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней.
• Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней.
• При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС.
• При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "
+" полезного сообщения.

Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
WesleyGibson  Offline  Сообщение №2731 написано: 21 февраля 2019, 08:22



1
Всем привет В игре пишет вот такую штуку, при каждом входе. Detected script at PlayerVampireQuestScript.pex Do you want to display this massage again. Может подскажите что делать?

stalker992  Offline  Сообщение №2732 написано: 8 марта 2019, 19:24



117
Можно ли скриптом создать клона гг?

Vegagrand  Offline  Сообщение №2733 написано: 16 марта 2019, 19:28



1
Добрый вечер всем, прошу помощи, нужно написать скрипт для тригера при котором если в трегер поместить череп, то нпс умирает(не главный герой) это скрипт при котором гг является активатором, а нужно чтоб был череп
Scriptname THHDeatScript02 extends ObjectReference

ObjectReference Property TrigerThhDeathSkull Auto

ObjectReference Property SkullIfTriger01 Auto

Actor Property ActorThhDeath01 Auto

Event OnTriggerEnter(ObjectReference akActionRef)
if akActionRef == Game.GetPlayer()
ActorThhDeath01.Kill()
EndIf

EndEvent

fanat01  Offline  Сообщение №2734 написано: 3 апреля 2019, 18:28



9
Народ, подскажите скрип на уровень поднятия воды, для бассейна

Myprism  Offline  Сообщение №2735 написано: 4 апреля 2019, 03:04


Физик


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

fanat01  Offline  Сообщение №2736 написано: 4 апреля 2019, 15:25



9
Myprism,у меня есть бассейн, при помощи скрипта на свет сделал чтобы, работал водопад, и появлялась вода. 
Но мне нужно чтобы вода повышалась как при квесте про глаз фалмера, когда вода затапливала пещеру

Myprism  Offline  Сообщение №2737 написано: 4 апреля 2019, 15:41


Физик


fanat01, а проблема в чём? Ваш скрипт должен чем-то запускаться. Значит, он должен быть куда-то встроен. От этого зависит сам тип скрипта. У вас есть квест, в котором это уже сделано. Я сначала хотел отправить вас к своему моду, где сделано то же самое, но лучше возьмите в качестве примера ванильный квест. Если соберётесь делать свой квест, в котором будет меняться уровень воды, то просто перенесите фрагмент кода из того квеста в свой. Если собираетесь вешать скрипт на что-то ещё, то делайте соответствующий скрипт и переносите код в него. Скорее всего он и так сгодится, но не обязательно. Это зависит от типа скрипта.

akigami  Offline  Сообщение №2738 написано: 11 апреля 2019, 12:11 | Отредактировано: akigami - 11 апреля 2019, 12:14



3
Всем привет, подскажите, как можно реализовать подобие тега на npc через диалог чтобы в дальнейшем делать проверку на этот тег и выполнять условие ?

Dsion  Offline  Сообщение №2739 написано: 11 апреля 2019, 12:47 | Отредактировано: Dsion - 11 апреля 2019, 12:48



akigami, тэг должен добавляться именно в момент разговора? Да много вариантов:

Можно создать фракцию. Добавлять НИП в эту фракцию функцией
https://www.creationkit.com/index.php?title=AddToFaction_-_Actor
а потом проверять условием
https://www.creationkit.com/index.php?title=GetInFaction
так работает система спутников, например. Когда НИП становится спутником, он добавляется во фракцию CurrentFollower и появляются новые опции в диалоге.

Можно FormList (список) вместо фракции.

akigami  Offline  Сообщение №2740 написано: 11 апреля 2019, 13:33 | Отредактировано: Multigone - 21 апреля 2020, 20:29



3
Dsion, большое спасибо     3 дня бьюсь и как то не додумался до этого)
да, при обращении к npc у него появляется диалог и при ответе нпс на этот диалог он должен попасть в группу, вариант с фракцией мне подошел больше, но появилась проблема, при компиляции кода:

Код
akSpeaker.AddToFaction(TFFaction)

вылетает ошибка:



код вставляется в ответ диалога и должен слушателя добавлять в заранее созданную фракцию TFF, вроде бы все верно

Dsion  Offline  Сообщение №2741 написано: 11 апреля 2019, 13:41 | Отредактировано: Dsion - 11 апреля 2019, 13:54



akigami, наверное, не создал property TFFaction. А когда создашь, нужно еще не забыть заполнить.

Я уже плохо помню, но там, вроде, можно клацнуть по скрипту (TIF_??) правой кнопкой, выбрать что-то там про Properties, а потом нужно создать новую и заполнить (Fill). Тип: Faction. Если просто создать (но забыть заполнить), скрипт скомпилируется, но работать не будет.

akigami  Offline  Сообщение №2742 написано: 11 апреля 2019, 14:57 | Отредактировано: Multigone - 21 апреля 2020, 20:27



3
Dsion, да, оказалось ошибка была в этом, еще раз спасибо good

Возможно ли ограничить кол-во членов фракции до 2-х ? например если 2 члена есть уже то диалога позвать в фракцию не будет

Dsion  Offline  Сообщение №2743 написано: 12 апреля 2019, 15:29



akigami, не припоминаю такого... В крайнем случае, можно добавить глобальную переменную (типа TFFactionMemberCount).
Когда добавляешь кого-то во фракцию, прибавляешь 1 к значению переменной. Убираешь из фракции - отнимаешь 1.
Тогда можно будет использовать условие GetGlobalValue  TFFactionMemberCount  < 2

•DarkBlood•  Offline  Сообщение №2744 написано: 3 мая 2019, 12:58



7
Доброго времени суток. Появился такой вопрос, в квесте есть два ответа и один из них должен давать книгу, как должен выглядеть скрипт для выдачи этой книги?
Пытался через : Game.GetPlayer().AddItem() и в пропертис добавить книгу в качестве предмета, но не получилось.

Dsion  Offline  Сообщение №2745 написано: 4 мая 2019, 01:01 | Отредактировано: Dsion - 4 мая 2019, 01:03



•DarkBlood•, да так и делается... Если компилятор выдал ошибку, покажи, какую. А если не выдал, то 90% что ты забыл заполнить проперти.

Myprism  Offline  Сообщение №2746 написано: 4 мая 2019, 04:06


Физик


•DarkBlood•, еще, квесты нужно проверять с сохранения, в котором они еще не были начаты.

slastik  Offline  Сообщение №2747 написано: 31 мая 2019, 11:46


Жаждущий


209
День добрый, друзья.
Не могу решить проблемку. Есть активатор, который стоит в интерьере и должен постоянно воспроизводить звук. Есть саунд-дескриптор, в который забиты 10 звуковых дорожек. Если просто сделать саунд-маркер и поставить в интерьер или же просто в окне активатора задать ему наш дескриптор, чтобы он гонял его по кругу, то при таком варианте постоянно воспроизводится лишь один трек из десяти. Мне нужно, чтобы рандомно воспроизводились разные треки, поэтому решил сделать, как мне показалось, простой скрипт.

Event onLoad()
    PlayMySound()
EndEvent

Function PlayMySound()
    While Self.is3DLoaded()
        Sound01.PlayAndWait(Self)
    EndWhile
EndFunction


Вот вроде бы при загрузке объекта должна запускаться функция, которая гоняет музыку по кругу, пока модель объекта загружена. Если мы покидаем интерьер, то по идее модель выгружается и музыка прекращается. Но нет, при выходе наружу она продолжает играть, что не есть хорошо. Признаю, что совсем немного разбираюсь в скриптах и может это вовсе не так должно работать. Подскажите, как нужно сделать.

- Что это за горы стоят?
- А, это орки бегут!
Dsion  Offline  Сообщение №2748 написано: 31 мая 2019, 12:52



slastik, а без скрипта точно нельзя, да? Я пока не могу проверить... Лучше бы, конечно, без скрипта.

Не хочешь поискать ивент, который срабатывает в момент выхода игрока из локации? Можно проверить OnCellDetach() и OnDetachedFromCell().
Лучше запускать музыку в одном ивенте, а потом в другом останавливать по instance id.

Хрень в том, что в Скайриме не желательно писать функции, которые выполняются дольше одной секунды. Да и вообще, везде, где есть event loop (асинхронное программирование). Вернее, их лучше не вызывать в основном потоке. А, ладно, забудь.

Но если в Скайриме у тебя есть функция типа PlayMySound, которая выполняется дольше секунды, то что-то у тебя не так.

slastik  Offline  Сообщение №2749 написано: 31 мая 2019, 13:20


Жаждущий


209
Цитата Dsion

Лучше запускать музыку в одном ивенте, а потом в другом останавливать по instance id.



Вот в том и проблема, что если запустить музыку одним событием и оставить играть, пока мы ее не выключим, то она выберет случайный трек и зациклится на нем. Получается, что нужно ее каждый раз запускать заново, как бы искусственно с помощью скрипта создавая loop, и тогда она каждый раз запускает случайную дорожку.

- Что это за горы стоят?
- А, это орки бегут!
Dsion  Offline  Сообщение №2750 написано: 31 мая 2019, 13:52



slastik, ну сам смотри. Можно использовать не один Sound, а FormList саундов и выбирать случайный в самом скрипте.

slastik  Offline  Сообщение №2751 написано: 31 мая 2019, 15:30


Жаждущий


209
Dsion, т.е. не закидывать 10 треков в один саунд, а сделать 10 саундов по одному треку в каждом и объединить в форм-лист? Ок, но как в этом случае добиться, чтобы скрипт постоянно воспроизводил случайные саунды из этого форм-листа, а не выбрал один саунд и гонял его по кругу?

- Что это за горы стоят?
- А, это орки бегут!
Dsion  Offline  Сообщение №2752 написано: 31 мая 2019, 16:06



Хотя да, хрен чо сделаешь. События "проигрывание закончилось" нету-то. Это разве что еще и длительность звуков указывать вручную. Лажово.

dint999  Offline  Сообщение №2753 написано: 9 июля 2019, 22:10



11
Dsion, Есть ли возможность прописать в скрипт событие связанное со сменой локаций (а именно с загрузкой экранов)??? Смысл в том, чтобы ГГ\НПС снимал и надевал автоматом некий Armor, сразу после загрузочного экрана.

border="0" alt=""/
Иsкатель  Offline  Сообщение №2754 написано: 9 июля 2019, 22:19 | Отредактировано: Иsкатель - 9 июля 2019, 22:21



71
dint999, OnLoadOnCellLoad

StanislavD  Offline  Сообщение №2755 написано: 20 сентября 2019, 09:54



123
подскажите, как сделать, чтобы алиас книги появлялся в инвентаре нпс и героя, а так же убирался. у меня 3 алиаса в квесте: ключ и 2 книги. ключ в инвентаре нпс и при определённой стадии квеста передаётся в инвентарь героя, одна книга поднимается и передаётся в инвентарь героя, а также из инвентаря героя в инвентарь нпс, и 3 книга должна быть в инвентаре нпс, но её там нет! хотя я помещаю как ключ указывая в нпс! (нпс алиас квеста)

valambar  Offline  Сообщение №2756 написано: 21 октября 2019, 10:55



513
Цитата slastik

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



А это можно сделать еще смешнее - сделать НЕСКОЛЬКО саундмаркеров, каждый из которых воспроизводит ОДИН саунд, и дизейблить-энейблить их квестовым скриптом.

Добавлено (21 Октября 2019, 13:57)
---------------------------------------------
Вопрос - можно ли сделать заклинание, меняющее высоту прыжка, не используя скриптовые функции SKSE?


Dsion  Offline  Сообщение №2757 написано: 21 октября 2019, 11:03



valambar, думаю, для этого вообще скрипт не нужен. Просто изменить Actor Value "JumpingBonus". Но если увеличить слишком сильно, то будет та же проблема, что и с летанием - мир для этого не предназначен.

valambar  Offline  Сообщение №2758 написано: 22 октября 2019, 06:49



513
Цитата Dsion

Просто изменить Actor Value "JumpingBonus". Но если увеличить слишком сильно, то будет та же проблема, что и с летанием - мир для этого не предназначен.



А какие настройки в магическом эффекте надо подкрутить? Я как-то пробовал, но изменения высоты прыжка не увидел.

Dsion  Offline  Сообщение №2759 написано: 22 октября 2019, 12:44



valambar, изменение jumpingbonus через консоль точно работает. 95%, что и магический эффект с типом "value modifier" тоже будет работать.

yakor77  Offline  Сообщение №2760 написано: 4 ноября 2019, 15:32 | Отредактировано: yakor77 - 4 ноября 2019, 15:36



28
Привет всем! Большое спасибо Сану за курс скриптологии. Вопрос: есть ли утилиты, способные склеивать пексы, то есть, их скрипты, автоматически. Так же, как, например, можно смержить в tes5edit, разные esp?
Конкретная проблема: есть пекс с активатором манекенов. Есть много вариантов такого пекса, но нет идеального. Самый лучший, какой мне известен, позволяет сделать манекен живым со сменой поз циклически, дать манекену до 10 видов брони и оружия, и сменить ему расу. И вот тут появляется баг с потерей головы. Тело у манекена - живое, а голова - деревянная. Есть другой пекс-активатор, там всё пофиксено, расы сменяются корректно, но функционал у него - бедный. Только 5 видов брони, и никакой динамики. Хотелось бы их склеить, не влезая в дебри программирования скриптов. Я декомпилировал оба пекса, паскаль изучал, в принципе структура понятна, но сам вручную склеить пока не могу, не хватает знаний и опыта именно по скриптовому языку игры. Такое автоматическое склеивание - возможно?
Спасибо.
С уважением, маг Иридий.

С уважением.
Маг Иридий.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Поиск:





Ответ на жалобу смотрите в разделе жалоб