Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Lexo  Offline  Сообщение №2101 написано: 16 мая 2016, 19:19 | Отредактировано: Lexo - 16 мая 2016, 19:29


Всепознающий мододел


223
Ничего себе... это просто потрясающе! пойду попытаюсь сделать... а тут требуется SKSE?

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Multigone  Offline  Сообщение №2102 написано: 16 мая 2016, 20:48 | Отредактировано: Multigone - 16 мая 2016, 20:51



815
Lexo, вот это требует (чем заменить, хз):

RegisterForMenu()
TapKey()
GetWeight()

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

А, в первом спойлере нужно закомментировать Debug.Notification("+").

Lexo  Offline  Сообщение №2103 написано: 16 мая 2016, 20:59


Всепознающий мододел


223
Цитата Multigone

чем заменить, хз

я просто спросил... я в обычных-то скриптах не всё знаю, а в СКСЕ тем более... но я проверил в игре - всё работает! Правда, при второй попытке меня выкинуло... но это бывает...

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Multigone  Offline  Сообщение №2104 написано: 16 мая 2016, 21:08



815
Lexo, меня тоже один раз (из многих тестов), когда я пытался сунуть НПС 6 флаконов зелья, но я не понимаю, с чем это связано. В скрипте нет структур, которые могли бы сильно загрузить процессор или заставить движок выполнять множество одновременных команд.
К слову, меня иногда (редко) выкидывает из МСМ-меню, когда я тестирую разные настройки. Совершенно рандомные вылеты.
В общем, используй на свой страх и риск. :)

Lexo  Offline  Сообщение №2105 написано: 17 мая 2016, 06:36


Всепознающий мододел


223
Цитата Multigone

выкидывает из МСМ-меню

видимо, SKSE опаснее, чем мы думаем...  :)

Добавлено (17 Мая 2016, 09:22)
---------------------------------------------
Перепроверил - всё прекрасно работает. Половину Вороньей Скалы обворовал - ни одного выкидывания... но возникла проблема:

Это воровство телекинезом повышает навык Изменения свыше 100... как такое могло произойти?

Добавлено (17 Мая 2016, 09:36)
---------------------------------------------
И ещё один вопрос попутно: 
Я нашёл способ, как сделать, что бы при рукопашной повышались карманные кражи - повесил на удары кулаком скрипт, который повышает навык. А как сделать, что бы при взломе замков повышался навык карманных краж (если вдруг я захочу объединить эти две ветки)? И есть ли способ хитрее того, который придумал я?


"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Myprism  Offline  Сообщение №2106 написано: 21 мая 2016, 12:26


Физик


Столкнулся со странной проблемой. Есть у меня колечки, на которых висит скрипт:

Ничего особенного. Само одевание кольца заставляет персонажа, кто его одел, стать спутником, снимание кольца освобождает спутника. Этот же скрипт делает кольцо видимым от первого лица (оно занимает нестандартный слот) через заклинание и он же обеспечивает доступ игроку к оутфиту персонажа. Но дело не в том, что делает кольцо, а в том, что если я это кольцо положу в интерьер, то потом его можно подобрать и оно работает как надо, а вот если я его положу в контейнер (сундук) и возьму его оттуда, кольцо не работает. Но что интересно, если я его возьму из сундука, брошу на пол и потом подберу, то работает как надо! Почему не работает из сундука? И что сделать, чтобы заработало, чтобы не объяснять пользователям, что они должны сначала кольцо выбросить, потом подобрать и только потом пользоваться :(

Aksyonov  Offline  Сообщение №2107 написано: 21 мая 2016, 13:00 | Отредактировано: Aksyonov - 21 мая 2016, 13:01



937
Здравствуйте, всем привет, скажите пожалуйста кто нибудь знает функцию в Condition Functions которая бы указывала условие - которая происходит после
попадания по цели стрелой? хочу сделать скрипт который заработал бы при попадания стрелы по цели - он скрипт вообще нужен или можно обойтись 
Condition Functions ?

Lexo  Offline  Сообщение №2108 написано: 21 мая 2016, 17:40


Всепознающий мододел


223
Цитата Aksyonov

попадания по цели стрелой?

думаю, нужен  Event OnHit ... там в есть такой пункт, как "Projectile akProjectile". Думаю, он должен помочь определить стрелу...

Если я не прав, местные мастера меня исправят...

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Dsion  Offline  Сообщение №2109 написано: 22 мая 2016, 01:14



Прав-прав... Если делать какой-то турнир лучников, в котором надо попасть по яблоку, то нужен скрипт на яблоко с ивентом OnHit. Или на алиас, в котором яблоко.

Aksyonov  Offline  Сообщение №2110 написано: 22 мая 2016, 01:20 | Отредактировано: Aksyonov - 22 мая 2016, 01:21



937
Цитата Dsion

рав-прав... Если делать какой-то турнир лучников, в котором надо попасть по яблоку, то нужен скрипт на яблоко с ивентом OnHit. Или на алиас, в котором яблоко.


А что если цель такова - что нужно воспроизводить звук каждый раз при попадании стрелой по живой
цели? не попадаешь ничего не происходит? значит одним только Condition Functions не обойтись?

С меня просто ещё тот скриптописака  smile2

Dsion  Offline  Сообщение №2111 написано: 22 мая 2016, 02:02



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

Только звук? Если только для стрел игрока, можно было бы легко сделать через перк. К выстрелам из лука прицепить заклинание, которые будет воспроизводить звук.
Еще, наверное, можно просто поменять звук, с котором стрелы втыкаются в акторов... Такое даже без esp можно...

Aksyonov  Offline  Сообщение №2112 написано: 22 мая 2016, 02:16 | Отредактировано: Aksyonov - 22 мая 2016, 02:18



937
Цитата Dsion

можно просто поменять звук, с котором стрелы втыкаются в акторов...


По поводу заклинания да не дошло ) спасибо, но будет ли звуки на заклинании и звук который воспроизводиться при втыкании в актеров слышно на расстоянии в 80 метров? 0_0

Только что то я не слышал вроде звука при втыкании стрел, он точно есть? надо будет прислушаться  closedeyes

Dsion  Offline  Сообщение №2113 написано: 22 мая 2016, 02:37



Стандартный звук есть... Его даже поменять можно:
WPNArrowVsFleshImpact
WPNArrowVsFleshImpactLG

А если надо чтоб звук звучал всегда громко и "прямо в голове", то через перк... Перк -> заклинание -> скрипт -> MySound.Play()

Aksyonov  Offline  Сообщение №2114 написано: 22 мая 2016, 02:44



937
Цитата Dsion

Стандартный звук есть... Его даже поменять можно:WPNArrowVsFleshImpact
WPNArrowVsFleshImpactLG


Вот за название большое спасибо! а то я ума не приложу где это было нужно искать, в звуках понятно, Но каким образом? =_= теперь попробую ага.

Myprism  Offline  Сообщение №2115 написано: 22 мая 2016, 06:43


Физик


В дополнение к моему вопросу https://modgames.net/forum/110-9434-1247624-16-1463833598
похоже, это глюк контейнеров. Попробовал положить в контейнер не 6 колечек одновременно, а 6 раз по одному. Редактор позволил. Но в игре в сундуке они выглядят как 6 раз по 6! Но если взять из сундука одну позицию из шести, то там убираются все.

Dsion  Offline  Сообщение №2116 написано: 22 мая 2016, 07:51



Честно говоря, я в скрипт на кольце вообще не врубился :(
Каким образом он делает NPC спутником? Как дает доступ к его аутфиту? Ну понял только, что оно устанавливает пустой аутфит для NPC, на которого надевается, и возвращает дефолтный аутфит, когда снимается.

А зачем его надевать игроку?
И как именно оно не работает? Ты берешь его из сундука, потом даешь NPC, а NPC не раздевается?
В общем, не ясно... Это точно полный скрипт?

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

Myprism  Offline  Сообщение №2117 написано: 22 мая 2016, 09:10


Физик


Dsion, Скрипт полный.
1. Спутником делает НПС не скрипт, а одевание кольца. Одевание его стоит в условии специального пакета следования.
2. Если заменить оутфит на пустой (на самом деле, не пустой, так как там лежит одно колечко, так как пустые игра обрабатывает не корректно), то содержание текущего оутфита вываливается в инвентарь персонажа и становится доступно из меню обмена вещами. Пока персонаж в спутниках, он пользуется шмотками из инвентаря, который доступен и игроку. При снимании кольца шмотки из исходного оутфита возвращаются в его оутфит. Если их в инвентаре нет, оутфит восстанавливается полностью.

Собственно говоря, обсуждать работу кольца не нужно, так как кольцо работает прекрасно. Проблема в том, что его работа прекращается (совсем, не работает ничего из скрипта), если положить в сундук несколько колец (у меня их шесть для шести потенциальных спутников), взять их оттуда и одеть, хоть себе, хоть персонажу (персонаж имеет специальный диалог обмена вещами даже до того, как стал спутником). Но если кольцо выбросить в мир (хоть все шесть), подобрать их с пола, то они все работают.
Если положить их в сундук не скопом, а по отдельности 6 раз по одному, то они прекрасно работают будучи взяты из сундука, но тогда глючит уже сундук. Он показывает 6 раз по 6 колец, хотя берутся оттуда только 6.

Кажется, нашёл решение, хотя не очень красивое: Персонифицировал кольца. Теперь каждому персонажу надо дать именно его кольцо. Теперь они разные, а не одинаковые, так как принадлежат разным персонажам. В сундуке показываются правильно.

Holtof55  Offline  Сообщение №2118 написано: 22 мая 2016, 10:55 | Отредактировано: Holtof55 - 22 мая 2016, 10:57



49
Привет всем.
В общем дело такое. Делаю танцы, видео можно посмотреть тут -  https://vimeo.com/167538368, а скачать из моего блога(ссылка есть под каждым видео)
Дело вот в чем, так как у меня в игре танцуют только нпс(гг не танцует) то я упустил из виду 3д камеру. Если взять игрока танцором, то камера улетает под потолок(в V-6 я это убрал) ...но в танцах, которые делал раньше, эта проблемка осталась. Переделывать 60 танцев чет желания нет никакого :( В общем нужен кусок скрипта устанавливающий камеру от "третьего лица" на уровень головы игрока(ну как по дефолту).
Кто-то сможет мне написать такую функцию? Кнопки в меню не надо, ползунок -не надо, только эту функцию. Отсылать на обучение тоже не надо.
Спасибо

Multigone  Offline  Сообщение №2119 написано: 24 мая 2016, 10:25



815
Holtof55, положение камеры можно менять с помощью SetINIFloat() и UpdateThirdPerson() (обе SKSE). См. скрипт Customizable Camera by Arindel.

Multigone  Offline  Сообщение №2120 написано: 2 июня 2016, 14:51



815
Aksyonov, если предметы квестовые (их нельзя выкинуть), то вот примерный скрипт на алиасы:


Код
Scriptname X extends ReferenceAlias

GlobalVariable Property MyGlobal Auto ; Новая глобальная, значение 0.

Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
    if akNewContainer == Game.GetPlayer()
        MyGlobal.Value += 1.0 ; Считаем предметы.
    EndIf
    IF MyGlobal.Value >= 5.0 ; Пусть у нас 5 разных квестовых предметов.
        GetOwningQuest().SetStage(7) ; Нам нужно установить 7 стадию.
    Endif
EndEvent

Вместо глобальной можно использовать переменную скрипта квеста.
В общем, см. FreeformRiften14, правда, там немного по-другому.

Lexo  Offline  Сообщение №2121 написано: 18 июня 2016, 20:57


Всепознающий мододел


223
Цитата Lexo

И ещё один вопрос попутно: Я нашёл способ, как сделать, что бы при рукопашной повышались карманные кражи - повесил на удары кулаком скрипт, который повышает навык. А как сделать, что бы при взломе замков повышался навык карманных краж (если вдруг я захочу объединить эти две ветки)? И есть ли способ хитрее того, который придумал я?



И могли бы вы ответить на этот вопрос?

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Multigone  Offline  Сообщение №2122 написано: 19 июня 2016, 14:30



815
Цитата Lexo

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

При активации перком узнаем референс закрытого объекта. Ждем мгновение (Wait()). Проверяем, закрыт ли объект. Если нет, повышаем навык. Думаю, это можно реализовать.

Lexo  Offline  Сообщение №2123 написано: 19 июня 2016, 15:19


Всепознающий мододел


223
И ещё один (наверное ОЧЕНЬ тупой) вопрос:

Пытаюсь на основе взлома замков из этого мода создать свой (как обычно). Хочу написать формулу, которая будет расчитывать рандом, умноженный на навык взлома и делённый на уровень замка (Random*LockpickingLevel/LockLevel). Да только проблема - как написать "Определить уровень навыка взлома"?

Пробовал вписать LockPickLevel == Player.GetSkill("LockPicking"), пробовал LockPickLevel == Player.GetSkillLevel("LockPicking") - ничего не подходит. Не подскажете, как быть?

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Dsion  Offline  Сообщение №2124 написано: 19 июня 2016, 16:04 | Отредактировано: Dsion - 19 июня 2016, 16:05



Цитата Lexo

как быть?


Перестать самостоятельно придумывать имена функций и методов и брать те, что действительно существуют :)
http://www.creationkit.com/index.php?title=Actor_Script
http://www.creationkit.com/index.php?title=GetActorValue_-_Actor

MagicalDagger  Offline  Сообщение №2125 написано: 23 июня 2016, 17:53



48
Ребята, все привет  :)
Возник вопрос по функции SetAttackActorOnSight(). Задумал сделать соратников-вервольфов дружественными к игроку-оборотню в форме зверя, но не нашел способа обхода этой функции в скрипте PlayerWerewolfChangeScript. С ней эти персонажи, как и прочие, становятся к игроку враждебными даже будучи его компаньоном (странно, но другие компаньоны, например Лидия, враждебными не становятся, даже если не сопровождают игрока). Манипуляции с фракциями в редакторе ничего не дали. Попробовал отключить эту функцию, но при этом все вокруг на вервольфа-зверя не реагируют и воспринимают как обычно со всеми вытекающими (причем даже фракции, прописанные как враги для PlayerWerewolfFaction). Если кто знает, как решить эту задачку, подскажите плс.

Multigone  Offline  Сообщение №2126 написано: 23 июня 2016, 19:51



815
MagicalDagger, может, влияет Relationship? У хускарлов изначально Ally. Попробуй скриптом установить Фаркасу ранг 3 и посмотри результат.

MagicalDagger  Offline  Сообщение №2127 написано: 25 июня 2016, 16:14



48
Multigone, проверил на Эйле, эффекта нет. Попробовал применить EvaluatePackage() в том числе, он, вроде, ИИ перезагружает, тоже не помогло. Тестил в вайтранском доме, так вот: Эйла атакует, Лидия нет, только бегает и орет "Помогите", как враг не помечается и при этом не в напарниках. На всякий случай, мой скрипт (прикреплен к Эйле в Actors):



Multigone  Offline  Сообщение №2128 написано: 25 июня 2016, 18:24



815
MagicalDagger, минутку. Все изменения базового объекта в СК после того, как нужный референс был инициализирован и записан в сохранение, не возымеют никакого эффекта. Т. о., скрипт нужно вешать на алиас актера, не на ActorBase.

Чтобы проверить, работает ли скрипт, можно добавить уведомление куда-нибудь.

MagicalDagger  Offline  Сообщение №2129 написано: 25 июня 2016, 23:02



48
Multigone, у других ActorBase такое проходило, например, добавление фракций и спеллов (проверял через новые появившиеся диалоги). На всякий случай проверил на ней же, работает. Попробую еще раз через Alias, отпишусь.

Lexo  Offline  Сообщение №2130 написано: 27 июня 2016, 17:39


Всепознающий мододел


223
А у меня ещё вопрос:
Есть ли функция, которая определяет, стоит ли перед персонажем другой персонаж? Т.е. хочу сделать скрипт, который кидает заклинание перед персонажем, но только если перед ним стоит другой персонаж.

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

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





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