Модератор форума: 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? Пиши не в ЛС, а в эту тему.
valambar  Offline  Сообщение №2041 написано: 26 марта 2016, 18:37



513
Я как-то видел мод на притупление улучшенного оружия до состояния неулучшенного при использовании. Работал мод через СКСЕ. Интересно, а без СКСЕ нельзя устроить так, чтобы при экипировке оружия назначать глобальную переменную,  зависящую от степени улучшения оружия, а потом уменьшать ее после каждого удара на 1, и по достижении какого-либо значения, соответствующего меньшей степени улучшения, соответственно менять ее у оружия - например, было легендарное, потом стало эпическое и т.д. до неулучшенного?

Myprism  Offline  Сообщение №2042 написано: 27 марта 2016, 03:43


Физик


valambar, только это не должна быть глобальная переменная. Достаточно локальной переменной использования оружия в скрипте, который висит на этом оружии. Ответ на вопрос, можно ли это сделать без SKSE заключается в том, какие именно функции использованы в скрипте. Т.е. сначала надо написать скрипт, а потом посмотреть, если там использованы функции SKSE, то потребовать его подключения.

erlick, глубоко не вникал, но может пригодится: если у персонажа удалить ВСЁ, то он автоматически восстановит себе то, что было в его Оутфите.

Dsion  Offline  Сообщение №2043 написано: 27 марта 2016, 07:06



Lexo, хороших - нету. Только та же идея, что и тебе пришла, - с невидимой стеной. Это точно можно сделать. В перках есть возможность установить заклинание, которое будет каститься при взмахе оружием, с условиями. А само заклинание может перемещать и устанавливать перед игроком стену. Там понадобится несложная формула с синусами и косинусами. Вот только не на 100% уверен, что получится настроить коллизию так, чтоб стрелы и магия отбивались, а NPC проходили спокойно. Должно быть можно...
Ну еще есть очень простой и тупой вариант без скриптов: добавить игроку перк, который будет понижать до нуля входящий урон от стрел и магии пока тот размахивает оружием. Только перку будет пофигу, летят ли стрелы тебе в лицо или в тыл.

valambar, вряд ли получится. Я в скриптах без SKSE не припоминаю никаких функций, которыми можно было бы получить или изменить степень улучшения предмета. Так что именно такой вариант, скорее всего, отпадает. Одной переменной тоже не отделаться - надо же сохранять уровень износа для каждого оружия, не зависимо от того, как часто игрок их меняет. Кроме того, там еще проблема в том, как получить Reference Id экипированного оружия, а не id базового объекта. В общем, фигово дело. Ну если придумать способ получения ид референса, то можно что-то такое (да, воще не круто):  создать три FormList: оружие немного повреждено, оружие значительно повреждено, оружие критически повреждено. При каждом ударе оружие имеет шанс, скажем, 4% продвинуться в следующий лист. Ну а игроку добавить перк, который будет немножко понижать урон, если оружие в списке слабо поврежденных итп. Но это хрень... Как поразростаются эти списки до 100 орудий - будет хрень.

Добавлено (27 Марта 2016, 10:06)
---------------------------------------------
Я себе похожим способом делал мод на магию. Мод позволял увеличить любому заклинанию силу в два или четыре раза, но затраты маны возрастают в 3 или 9 раз. И с длительностью эффекта так же. Вот там использовал 4 форм листа: два на силу и два на длительность.

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


Lexo  Offline  Сообщение №2044 написано: 27 марта 2016, 17:15 | Отредактировано: Lexo - 28 марта 2016, 20:29


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


223
Народ, ещё один вопрос, если позволите...
Можно ли скриптом добавить кейворд предмету? И убрать его, соответственно... вроде бы недавно только видел где-то это, а теперь, когда понадобилось, найти не могу... может, показалось?
Подскажите, пожалуйста...


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

Holtof55  Offline  Сообщение №2045 написано: 29 марта 2016, 17:29 | Отредактировано: Holtof55 - 29 марта 2016, 17:30



49
Всем привет! Давно здесь не был...в общем мне нужно добавить команду на кнопку в мсм меню, чтобы мод перерегистрировался в мсм(без его отключения):

elseIf option == UpdateMod_T

self.SetToggleOptionValue(UpdateMod_T, true)

Debug.MessageBox("Выйдите из меню")

endIf

Кнопка сделана и выбирается, сообщение есть , осталось написать правильную команду)))
Большая просьба не отсылать читать описания команд для папируса (у меня они есть, но чет не соображу как их правильно написать)
Буду весьма признателен...
Мод должен перерегистрироваться, и подхватить все изменения, что я в нем делаю

Multigone  Offline  Сообщение №2046 написано: 30 марта 2016, 12:09



815
Holtof55, я не совсем понял, что тебе нужно сделать в МСМ. Но на всякий случай:

1) Если тебе нужно обновить мод до новой версии - ссылка (см. Script Versioning).
2) Вместо событий и функций версии 1 (см. SKI_ConfigBase.psc) я бы рекомендовал пользоваться версией 2.
3) В МСМ для отображения окна с сообщением используется ShowMessage().

Holtof55  Offline  Сообщение №2047 написано: 30 марта 2016, 17:48 | Отредактировано: Holtof55 - 30 марта 2016, 17:49



49
Цитата Multigone

Holtof55, я не совсем понял, что тебе нужно сделать в МСМ. Но на всякий случай:1) Если тебе нужно обновить мод до новой версии - ссылка (см. Script Versioning).
2) Вместо событий и функций версии 1 (см. SKI_ConfigBase.psc) я бы рекомендовал пользоваться версией 2.
3) В МСМ для отображения окна с сообщением используется ShowMessage().

Ничего я там не понял(по ссылкам) .
Это
Код
-
  function OnOptionSelect(Int option)

        If option == UpdateMod_T

       self.SetToggleOptionValue(UpdateMod_T, true)

       Debug.MessageBox("Выйдите из меню")

      endIf
endFunction


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

Lexo  Offline  Сообщение №2048 написано: 30 марта 2016, 19:46


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


223
Может, моё сообщение не заметно... но, народ, я до сих пор не могу найти, как добавить\убрать кейворд на предмет скриптом... не подскажете, если такое есть, как это сделать?

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

Multigone  Offline  Сообщение №2049 написано: 31 марта 2016, 13:17 | Отредактировано: Multigone - 31 марта 2016, 13:47



815
Holtof55, если новая версия мода не содержит измененных Property (или внутренних переменных) скриптов, то при замене ЕSP взаимодействия с МСМ не требуется. Если подобные вещи есть, все-таки советую внимательно изучить вышеуказанный материал (вообще все разделы), возможно, с переводчиком. В шапке темы есть базовая информация о скриптах. Здесь есть все что душе угодно, если пользоваться поиском. Здесь есть переведенная инфа об основах МСМ. Если после изучения этих материалов останутся вопросы, в этой теме на них наверняка ответят.

Сейчас же я лишь могу объяснить, как работает обновление:


Lexo, скриптом добавить базовой форме ключевое слово нельзя. Однако, его можно добавить в Reference Alias и заполнить скриптом (ForceRefTo()) конкретным Object Reference. В этом случае ключевое слово будет ассоциировано с этой копией формы (но, опять-таки, не с базовой).

Lexo  Offline  Сообщение №2050 написано: 31 марта 2016, 13:41


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


223
Multigone, жаль... но и на этом спасибо.
А можно, тогда, узнать, как работает ключевое слово "Disallow Enchanting"? Хочу, что бы при получении перка, можно было снимать зачарования с артефактов... Или это где-то в движке зарыто?

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

Dsion  Offline  Сообщение №2051 написано: 31 марта 2016, 13:53



С каких еще артефактов? Просто удалять или так, чтоб потом накладывать на другие предметы? Ничего не ясно :(

Multigone  Offline  Сообщение №2052 написано: 31 марта 2016, 14:07 | Отредактировано: Multigone - 31 марта 2016, 15:52



815
Lexo, в движке. Если формы заранее известны, можно создать их копии. В один форм-лист поместить артефакты, в другой - копии. При активации станка проверяется, есть ли перк и артефакты у игрока, и добавить нужные копии в инвентарь. Удаление из инвентаря копии означает, что игрок снял с нее зачарование. Удаляется такой же артефакт. После выхода с фурнитуры добавленное удаляется. Но это в теории.

А, забыл сказать, что копии артефактов должны быть без MagicDisallowEnchanting.

PPS: Чтобы просто удалить (или установить новое) зачарование у базовой формы оружия / брони, есть SKSE-функция SetEnchantment():
Код
MyWeaponBase.SetEnchantment(none)

Lexo  Offline  Сообщение №2053 написано: 31 марта 2016, 16:14 | Отредактировано: Lexo - 31 марта 2016, 16:28


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


223
Цитата Multigone

можно создать их копии

Если не найду иных способов, попробую этот... спасибо

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

Dsion  Offline  Сообщение №2054 написано: 31 марта 2016, 18:41



Ааа, понятно... Фигово...
Ну максимум, что я придумал - это в Default Objects полностью отключить этот кейворд. А потом дать игроку перк, который устанавливает "Mod Soul Gem Enchanting" в ноль, если зачарование не находится в списке обычных и у игрока нету твоего адского перка. Тогда зачарование с артефактов снималось бы сразу и всегда, но использовать его потом можно было бы только имея твой перк. Ну и не круто, что пришлось бы создавать форм лист "обычных" зачарований.
Ничего лучше что-то не приходит в голову. Ну еще вариант с SKSE и плагином к нему есть, если ОЧЕНЬ надо.

Lexo  Offline  Сообщение №2055 написано: 31 марта 2016, 19:21


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


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

Цитата Dsion

SKSE и плагином к нему есть, если ОЧЕНЬ надо

Да я, пока что и в обычных скриптах плохо разбираюсь, так что, до СКСЕ, боюсь, надо ещё поднаучиться, иначе вообще запутаюсь, огорчусь и убегу в пичали в лес, подальше от скриптов :)

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

Dsion  Offline  Сообщение №2056 написано: 31 марта 2016, 21:22 | Отредактировано: Dsion - 31 марта 2016, 21:22



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

Multigone  Offline  Сообщение №2057 написано: 1 апреля 2016, 11:12



815
Dsion, Mod Soul Gem Enchanting влияет только на оружие.

TheTrickster  Offline  Сообщение №2058 написано: 6 апреля 2016, 15:20



5
Ни как не могу прояснить для себя ситуацию с сообщениями из скриптов (Notification). При совмещении с текстом из игры например +Getname()+ выводятся кракозябры. Единственный выход что нашел - выводить тест в проперти и заполнять из СК, но это жуть как не удобно. Нет ли способа выводить текст замещением через $ в файл translation как в МСМ скриптах? Ну или еще какой способ есть с этим головняком бороться?

Lexo  Offline  Сообщение №2059 написано: 7 апреля 2016, 17:32


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


223
Кстати, а можно скриптом сделать так, что бы часть урона передавалась другому существу? Например, призванному атронаху... если будет 1 атронах, то передаётся 10%, а если 3 - то 30. Это вообще возможно?

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

valambar  Offline  Сообщение №2060 написано: 9 апреля 2016, 06:11



513
Цитата Lexo

Кстати, а можно скриптом сделать так, что бы часть урона передавалась другому существу? Например, призванному атронаху... если будет 1 атронах, то передаётся 10%, а если 3 - то 30. Это вообще возможно?

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

Lexo  Offline  Сообщение №2061 написано: 9 апреля 2016, 16:47 | Отредактировано: Lexo - 9 апреля 2016, 16:48


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


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

Но не смотря на всё это, мысль очень интересная...

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

Dsion  Offline  Сообщение №2062 написано: 9 апреля 2016, 17:23



Интересная-то интересная, но хрен определишь, сколько урона получил игрок. Есть ивент OnHit, но он годится только для отслеживания факта получения урона, а не его количества...

Надо как-то с другой стороны копать...

Multigone  Offline  Сообщение №2063 написано: 9 апреля 2016, 17:26



815
Цитата Lexo

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

В маг. эффекте нужно указать флаг Detrimental и снять флаг Hostile.

Lexo  Offline  Сообщение №2064 написано: 10 апреля 2016, 16:13


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


223
Цитата Multigone

Можно измерить разницу здоровья до и после получения, и вернуть рассчитанные %

похоже, придётся временно отложить эту идею... пока что это слишком сложно для меня... надеюсь, после углубления в скрипты, получится сделать нечто подобное... если TES6 раньше не выйдет :)

всем спасибо огромное за советы!

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

Нарада  Offline  Сообщение №2065 написано: 14 апреля 2016, 17:12



129
Столкнулся с проблемой следующего характера: происходит вылет из игры при смене одежды
PresetB02.SetOutfit( kOutfit02)
PresetB02.RemoveAllItems() 
Самое интересное - вылет происходит, когда игра идет с архивом bsa. Если файлы игры не скручивать, то вылет не наблюдается.
Не подскажите решение проблемы? 

evTau  Offline  Сообщение №2066 написано: 14 апреля 2016, 17:41



Цитата Нарада

Столкнулся с проблемой следующего характера: происходит вылет из игры при смене одеждыPresetB02.SetOutfit( kOutfit02)
PresetB02.RemoveAllItems() 
Самое интересное - вылет происходит, когда игра идет с архивом bsa. Если файлы игры не скручивать, то вылет не наблюдается.
Не подскажите решение проблемы?

 У bsa архива название такое же как у esp?

Нарада  Offline  Сообщение №2067 написано: 14 апреля 2016, 17:48



129
Наименование esp  и bsa одинаковые.  Может быть это имеет какое-то значение - тестировал квест на нотбуке, где стоит пиратка.

valambar  Offline  Сообщение №2068 написано: 15 апреля 2016, 16:41



513
Цитата Dsion

Интересная-то интересная, но хрен определишь, сколько урона получил игрок


А вроде есть функция проверки - GetAV Health - в Обливионе она отлично работала, а здесь только вот синтаксис у нее как и у всего папируса дурацкий, но работать-то она работает. Назначить переменную, которая отражала бы разность здоровья до и после удара - вот вам и проверка урона.

Dsion  Offline  Сообщение №2069 написано: 15 апреля 2016, 17:02



Эгэ. А как ты заставишь какую-либо функцию вызываться "до" удара? И кому нужен будет результат, если между вызовами функций "до" и "после" игрок будет лечиться или регенерировать хп? И как учесть то, что урон по ХП уже был уменьшен броней или магической защитой...
Идея-то логичная, в принципе, но не так всё просто.

valambar  Offline  Сообщение №2070 написано: 15 апреля 2016, 17:59



513
Цитата Dsion

если между вызовами функций "до" и "после" игрок будет лечиться или регенерировать хп?

Если будет лечиться - то незачем ему атронахов высасывать ;) А не будет лечиться - как раз тут ему атронахи и послужат донорами.

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





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