Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Dsion  Offline  Сообщение №1921 написано: 19 ноября 2015, 05:40



Myprism, мне что-то тоже ничего полезного в голову не приходит.

Тебе ведь не достаточно, чтоб видимые NPC переодевались, когда ложатся спать. Нужно еще, чтоб все спящие NPC были переодеты, когда игрок заходил в локацию. А это всё усложняет и отбрасывает многие варианты. Да еще и с RegisterForSleep надо быть очень осторожным.

Не думал за расовые абилити? Не знаю, позволяет ли SKSE добавить абилити целой расе (без перезаписи расы в esp). Если позволяет, то можно тут что-то подумать.

И еще есть старый способ с Cloak заклинанием и условиями на нем. С его помощью можно вешать магический эффект на всех NPC вокруг, которые спят или собираются спать. Вообще, вещь полезная. Но тут проблема в том, что NPC могут переодеться не прямо сразу после входа в локацию, а, скажем, через пол секунды. И это будет заметно. А, может, и не будет такой проблемы... Возможно, эффект будет срабатывать еще раньше, чем пропадает черный экран загрузки.

andrelo-1  Offline  Сообщение №1922 написано: 19 ноября 2015, 14:53 | Отредактировано: andrelo-1 - 19 ноября 2015, 14:56



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

Или можно попробовать разобраться, почему не работает галка для переодевания в пакетах, видимо изначально планировалось реализовать эту функцию, но, либо что-то пошло не так и решили забить на нее, либо уже в последних патчах сломали.

Добавлено (19 Ноября 2015, 17:53)
---------------------------------------------
Есть похожий мод Sleep Tight, но он не outfit применяет, а просто переодевает нпц. Насколько я понял, он при загрузке внутренней (interior) локации применяет эффект к находящимся в ней нпц. Соответственно, скорее всего, если нпц ложится спать пока ты находишься в локации, то ничего не происходит.

Myprism  Offline  Сообщение №1923 написано: 19 ноября 2015, 16:03


Физик


Dsion, с переодеванием уникальных персонажей проблем нет. Скрипт на персонаже отслеживающий смену пакета работает надёжно. По моим наблюдениям за переодеваниями, при входе игрока в локацию все пакеты инициализируются заново. Т.е. если персонаж должен быть переодетым, то именно таким я его и нахожу. Единственная проблема, что для чистоты работы сейв должен быть чистым. Иначе в нём сохраняются и старые оутфиты и скрипты. Вот такой скрипт работает нормально:

Сейчас я его изменил:

Но тщательно не тестировал.
Важно, что и то и другое не работает на стражниках, скажем, Вайтрана. Сегодня прочёл, что скрипты не работают на левельных персонажах. Т.е. предлагается выбирать, либо левельность, либо скрипт. Но там же было написано, что заклятия на них работают. Так что, твоя идея абилити на расу - как раз то, что надо. Только делать это надо исключительно скриптом. На какое событие этот скрипт можно повесить? Может сделать пустой самозапускающийся квест со скриптом изменения рас? Пойду разбираться.

andrelo-1, не я один пытаюсь починить это переодевание. Пока никому не удалось :( На буржуйских сайтах говорят - только через скрипты и при этом готового решения я пока не нашёл.

Dsion  Offline  Сообщение №1924 написано: 19 ноября 2015, 16:30



Myprism,  даже если бы тот скрипт и работал на левелед-НИП, то все-равно перезаписывать столько акторов ради такой мелочи - это не по кодексу...
По поводу расовой абилити я тоже уже сомневаюсь. Перезаписывать расу нельзя, а функции добавления абилы расе, вроде, нету даже в SKSE:
http://www.creationkit.com/Race_Script

Я бы потестировал вариант с Cloak заклинанием... Надо узнать, вешается ли эффект до пропадания экрана загрузки или уже после... Способ выглядит жутко на первый взгляд, но не требует никаких перезаписей. Я его когда-то использовал, когда мне захотелось, чтоб разбойницы разное нижнее белье носили blush

Добавлено (19 Ноября 2015, 19:30)
---------------------------------------------
Ну и с помощью плагинов к SKSE, конечно, можно что-угодно сделать в т.ч. починить ванильную систему, чтоб работала смена аутфита...


Myprism  Offline  Сообщение №1925 написано: 19 ноября 2015, 17:29


Физик


Dsion, да, нет такой команды даже в SKSE... А менять расы не хочу. Да и поклонники LB сразу завоют, так как их любимый мод меняет расы :(
Не мог бы ты найти тот свой скрипт для переодевания окружающих? И опиши поподробнее, как это Cloak-заклинание сделать. Я не силён в заклинаниях. Временами разбираюсь, делаю что-то, а потом напрочь забываю как :(

andrelo-1  Offline  Сообщение №1926 написано: 19 ноября 2015, 17:55 | Отредактировано: andrelo-1 - 19 ноября 2015, 18:17



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

Myprism  Offline  Сообщение №1927 написано: 20 ноября 2015, 03:56


Физик


Спасибо всем за идеи!
Проблема решается скриптом на кровати:

Этот скрипт просто раздевает спящих персонажей, но в него можно встраивать и смену оутфита, как я это делал в предыдущих примерах. Важно, что типов кроватей в Скайриме не много и повесить его на них не трудно. Ещё меня радует то, что его можно повесить только на кровати, но не на спальные места на открытом воздухе, где переодевание ко сну было бы нелепо.

Dsion  Offline  Сообщение №1928 написано: 20 ноября 2015, 07:45



А что? OnActivate срабатывает, если NPC уже спит на кровати, когда заходишь? Тогда круто.
Только вместо RegisterForUpdate(5) - UnregisterForUpdate() лучше RegisterForSingleUpdate(5.0)

Myprism  Offline  Сообщение №1929 написано: 20 ноября 2015, 15:14 | Отредактировано: Myprism - 20 ноября 2015, 15:18


Физик


Dsion, срабатывает! Спасибо за 5.0. А чем отличается RegisterForSingleUpdate? Тогда и UnRegisterForSingleUpdate?

Dsion  Offline  Сообщение №1930 написано: 20 ноября 2015, 15:38



Unregister для Single не надо... Просто один раз срабатывает и всё. А если просто зарегистрироваться и отключить мод до дерегистрации, то фигово...

Добавлено (20 Ноября 2015, 18:38)
---------------------------------------------
а, ладно, забей...


Нарада  Offline  Сообщение №1931 написано: 5 декабря 2015, 18:28



129
Подскажите, могу ли я проконтролировать переход ГГ по телепорту двери следующим событием:
Event OnOpen(ObjectReference akActionRef)?

Dsion  Offline  Сообщение №1932 написано: 5 декабря 2015, 19:24



А почему сам не проверил? :) Еще OnActivate наверняка срабатывает...
Так же есть OnLocationChange, который можно повесить на игрока, - срабатывает при смене локации.

Нарада  Offline  Сообщение №1933 написано: 6 декабря 2015, 07:28 | Отредактировано: Нарада - 6 декабря 2015, 08:33



129
Спасибо. Ответ прост - лишний повод с умными людьми побеседовать. :)
И еще вопрос - как можно повесить event на игрока? 
Поясню - повесить на дверь или иной статик или активатор - это значит в их Reference в закладку Skript добавить соответствующий скрипт. Ну еще можно в квесте как-то обыграть... Актер - тоже понятно, Но игрок?  Или я что-то недопонимаю?

Kepper  Offline  Сообщение №1934 написано: 6 декабря 2015, 11:32



860
Нарада,
1) В квесте на алиас повесить скрипт, который будет отслеживать эти события. И заполнить этот алиас ссылкой на игрока (так же данный способ подойдёт и для НПС)
2) можно добавить скрипт в магический эффект и скастовать его на ГГ(с НПС он периодически следает, так что закладываться на это не стоит)

Dsion  Offline  Сообщение №1935 написано: 6 декабря 2015, 13:33



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

livmumw  Offline  Сообщение №1936 написано: 12 декабря 2015, 19:00



6
Всем привет, у меня такая проблема. Мне нужно, что бы на моего героя после определенной реплики в диалоге с определенным персонажем экипировалась вещь, к примеру броня (не просто добавлялась в инвентарь, а именно сразу надевалась). Персонажа я создал, диалоги тоже, а вот как реализовать скриптовую систему без понятия. Какое событие отвечает за выбор нужной реплики, какая функция экипирует броню и как указать эту самую броню (через ID или еще как)? И куда все это прикреплять в диалоге, на NPC с которым я говорю или еще куда? Заранее спасибо.

andrelo-1  Offline  Сообщение №1937 написано: 13 декабря 2015, 13:10



172
livmumw, видимо в Topic Info, там где вводится реакция нпц на реплику, там внизу есть раздел под скрипты, туда добавляешь скрипт, и в поле Begin или End ( в зависимости от того какое событие нужно ) вводишь скрипт, который будет добавлять броню и одевать.

livmumw  Offline  Сообщение №1938 написано: 13 декабря 2015, 14:43



6
andrelo-1, То есть просто функцию вводить, без события? И какая функция отвечает за экипировку брони, да и как указать какую броню выбрать (ID предмета или там другой принцип)?

andrelo-1  Offline  Сообщение №1939 написано: 13 декабря 2015, 15:31 | Отредактировано: andrelo-1 - 13 декабря 2015, 15:31



172
livmumw, Begin и End это и есть события. Описание функций есть тут. Броню указываешь через свойство скрипта ( выбираешь скрипт, нажимаешь Properties > Add Property ). Добавляешь свойство "ArmorItem", тип свойсnва "Armor", выбираешь в списке броню. Также добавляешь свойство Player типа "Actor", и выбираешь игрока. Можно конечно без свойства Player обойтись, но лучше так. Потом пишешь текст скрипта.

Player.AddItem( ArmorItem )
Player.EquipItem( ArmorItem )

livmumw  Offline  Сообщение №1940 написано: 13 декабря 2015, 19:47 | Отредактировано: livmumw - 13 декабря 2015, 19:49



6
andrelo-1, Написать это в Begin или End не дает, ошибка. А при создании нового чистого скрипта и прикреплении к нему свойства типа Actor в списке нет игрока. Можно поподробнее? И как в редакторе найти предмет, если он из мода (файл мода в Creation Kit подключил)?

andrelo-1  Offline  Сообщение №1941 написано: 13 декабря 2015, 20:27 | Отредактировано: andrelo-1 - 13 декабря 2015, 20:31



172
livmumw, я немного ошибся, вручную скрипт добавлять не надо, когда вводишь код в Begin или End, то CK сам добавляет скрипт, никакой ошибки при этом быть не должно. По пунктам:

1. Набираешь сначала что угодно в Begin или End, например, "123", CK добавляет скрипт с именем "TIF__*".
2. Выбираешь скрипт, жмешь Properties.
3. Создаешь свойство Player типа "Actor", жмешь OK.
4. Выбираешь это свойство, жмешь Edit Value, Cell: (any) Reference: PlayerRef.
5. Создаешь свойство ArmorItem типа Armor, жмешь OK.
6. Выбираешь это свойство, жмешь Edit Value, выбираешь из списка броню.
7. Закрываешь окно свойств (OK).
8. Вводишь в окно кода вместо "123" код скрипта, жмешь Compile, если нет ошибок компиляции, то закрываешь окно (OK).

Мод с броней и с диалогом это у тебя разные моды ?

livmumw  Offline  Сообщение №1942 написано: 14 декабря 2015, 21:53



6
andrelo-1, Что бы я не вводил в Begin или End в Properties не активна кнопка Add Property. Активна только если создаю новый скрипт без ввода в Begin или End. Диалоги делаю в своем моде, а броня в моде который подключается как esm.

andrelo-1  Offline  Сообщение №1943 написано: 15 декабря 2015, 09:56 | Отредактировано: andrelo-1 - 15 декабря 2015, 10:55



172
livmumw, ошибки есть какие-нибудь ? Попробуй, после того как появился скрипт TIF__*, нажать OK в Topic Info, чтобы сохранить изменения, и опять открыть его, после этого кнопка Add Property должна стать активной.

livmumw  Offline  Сообщение №1944 написано: 15 декабря 2015, 11:11 | Отредактировано: livmumw - 15 декабря 2015, 12:19



6
andrelo-1, Заработало, спасибо! Только вот как выбрать предметы из подключаемых модов? Предметы в списке я нашел, но они не работают как в моде. То есть даже после обычного добавления предмета в инвентарь (что бы потом одеть его вручную) он не работает как в оригинальном моде и его можно одеть к примеру поверх другой брони (это вручную, через инвентарь), в оригинальном же моде предмет может заменить экипировку героя (к примеру одевание одной брони снимет другую - уже одетую на героя). А тут просто как для галочки в инвентаре лежит и даже отображается на герое, но одевается не снимая экипировку которую должен заменить.

andrelo-1  Offline  Сообщение №1945 написано: 15 декабря 2015, 12:21 | Отредактировано: andrelo-1 - 15 декабря 2015, 12:23



172
livmumw, если мод esm, то просто при загрузке плагина в CK отметить его в списке модов, тогда броня будет в общем списке. Если мод не esm, то тут сложнее, так как, насколько я понимаю, CK не позволяет устанавливать зависимость одного esp-файла от другого esp-файла. Тут придется через Tes5Edit делать.

livmumw  Offline  Сообщение №1946 написано: 15 декабря 2015, 14:46



6
andrelo-1, Мод через esm, и в списке я все же нашел предметы. Просто они в основном моде, как я понял, скриптом каким-то работают и при таком добавлении становятся просто оболочкой с моделью, и так же, как и в моде, не функционируют.

Holtof55  Offline  Сообщение №1947 написано: 19 декабря 2015, 22:31



49
Привет всем!
Вопрос такой: в мсм меню надо добавить кнопку рестарта мода, чтобы обновления были доступны без  отключения и потом подключения мода. Так же не помешает регулировка громкости музыки.(в то же мсм меню) Кто-то может помочь?

Kepper  Offline  Сообщение №1948 написано: 22 декабря 2015, 11:01



860
На сколько безопасно менять расу(скажем с норда на имперца) с помощью функции Game.GetPlayer().SetRace() ?

Пока что я нашел только такой подводный камень:
- в скрипте CompanionsHousekeepingScript (это квест соратников C00) сохраняется не вампирская раса игрока

MagicalDagger  Offline  Сообщение №1949 написано: 25 декабря 2015, 15:14



48
Kepper, насколько я знаю, безопасно в случае с игроком. НПЦ получат баг с серыми лицами. Проверено на практике лично. Через консоль та же ситуация. По этой причине, кстати, в квестах Dawnguard Серана и семья являются простыми нордами с вампирскими глазами, цвет которых меняется при излечении Сераны или заражении вампиризмом супруга/супруги. Расы же по факту неизменны (разрабы это указали в скриптах, правда без подробностей, какие именно баги это вызвало). Правда есть одно НО: этот баг лично я наблюдал только с гуманоидными расами, т.е. при обращении в вервольфа или вампира-лорда такого нет, ну или это графически незаметно.

Народ, у самого вопрос. Есть ли в паирусе функция использования неписями зелья/еды? Я таковой не нашел. Требуется для скрипта, чтобы спутники использовали зелья в их инвентаре. Вроде бы, по умолчанию они используют зелья лечения, если мало здоровья, но по моим наблюдениям делают они это как-то криво. Т.е. это все-таки реализуемо и надежда есть))

Kepper  Offline  Сообщение №1950 написано: 25 декабря 2015, 15:38



860
MagicalDagger, попробуй функцию актёр.equipItem(зелье)
Для игрока это работает.

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





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