Модератор форума: 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? Пиши не в ЛС, а в эту тему.
Нарада  Offline  Сообщение №2401 написано: 18 марта 2017, 14:49



129
Большое спасибо за ответ, но это чуть-чуть не то.  Расскажу подробнее. В моде ГГ нужно поджечь корабль. Для того, чтобы активировать Огонь (например :BFXFireVolCorner) я решил использовать предложенный Кальяном метод возгорания костра. Там берется активатор возгорания масла TrapOilPool01 на него бросается связь от Огня  через функцию EnableParent, предварительно Огонь установив в Disable. Теперь когда ГГ Пламенем поджигает активатор масла - срабатывает связь и появляется Огонь. 
Чтобы отследить поджег корабля ГГ, пробовал на TrapOilPool01 вешать скрипт с event onActivate(objectReference akActivator), но он почему-то не срабатывает.
Вот и думаю, каким образом отследить момент перехода Огня из скрытого состояния (Disable) в открытое (Enable).

Dsion  Offline  Сообщение №2402 написано: 18 марта 2017, 15:00



Найти тот кусок скрипта, который и переводит его из Disabled в Enabled.

Lexo  Offline  Сообщение №2403 написано: 28 марта 2017, 20:13


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


223
И снова здравствуйте. Просмотрел я сейчас диалоги PitrPokirDsion и Multigone по поводу призраков. Как ни странно, но я тоже добрался до колдовства в моём моде... и есть некоторые сходства с идеями PitrPokir. Но не совсем...

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

Тогда я попробовал замаскировать эффект, и вместо PlaceAtMe использовал каст заклинания призыва призрака (как ни странно, но это тоже сработало), и он даже исчезал при призыве нового (ну а куда ему деваться?). Однако вновь проблема - он просто исчезал. Ни лужици эктоплазмы, ни трупа... ничего (оно и понятно - он же призван). 

Поэтому я вновь вынужден просить у вас совета. Как убить существо, призванное с помощью PlaceAtMe?
Есть же вероятность, что оно окажется бесконечно далеко, а значит, фишка с заклинаниями отпадает. С диспелом тоже, поскольку, на игрока при этом никаких эффектов не вешается.
Или же, можно заставить призванное существо не исчезать, а умирать (хотя, конечно, это навряд ли)?
И можно ли обойтись без квеста?

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

Dsion  Offline  Сообщение №2404 написано: 28 марта 2017, 20:21



Lexo, функция PlaceActorAtMe возвращает созданного актора. Можешь сохранить в переменную и делать с ним что захочешь.

AlexeyVN  Offline  Сообщение №2405 написано: 29 марта 2017, 07:40



52
Здравствуйте,  подскажите пожалуйста как определить  подключение DLC?

Dsion  Offline  Сообщение №2406 написано: 29 марта 2017, 18:17



AlexeyVN, вот этим:
https://www.creationkit.com/index.php?title=GetFormFromFile_-_Game
можешь выбрать какой-то объект в любом моде или DLC и проверять, существует ли такой.

AlexeyVN  Offline  Сообщение №2407 написано: 31 марта 2017, 09:23 | Отредактировано: AlexeyVN - 31 марта 2017, 13:34



52
Dsion, Большое спасибо за ответ

Добавлено (31 Марта 2017, 12:23)
---------------------------------------------
Здравствуйте, можно ли блокировать карту
Идея такая - Есть дом, попавшись в него, нельзя открыть карту местности а прочитав книгу можно пользоваться картой.

Lexo  Offline  Сообщение №2408 написано: 31 марта 2017, 18:55


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


223
А ещё вопрос.

Можно заставить воскрешённое существо стать агрессивным?
Я пробовал скрипом кастануть 4 раза заклинание, наносящее урон, но, видимо, скриптовые чары не считаются кастанутые игроком, даже если источником является игрок.
Пробовал кинуть заклинание ярости - призванное существо не может беситься (видимо, сказывается то, что воскрешённый - часть игрока).

Не подскажете, есть что-нибудь для этого?

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

AlexeyVN  Offline  Сообщение №2409 написано: 31 марта 2017, 18:59



52
Lexo, Агрессивный по отношению кому?

Lexo  Offline  Сообщение №2410 написано: 31 марта 2017, 19:05


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


223
К тому, кто воскресил... в данному случае - к игроку...

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

AlexeyVN  Offline  Сообщение №2411 написано: 31 марта 2017, 19:17



52
Lexo, Попробуйте вот так - ''воскрешённое существо.SetRelationShipRank.(игрок, -4)''

Lexo  Offline  Сообщение №2412 написано: 31 марта 2017, 20:07


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


223
К сожалению, не сработало... видать, опять сказывается то, что воскрешённое существо является частью игрока...

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

AlexeyVN  Offline  Сообщение №2413 написано: 31 марта 2017, 20:15 | Отредактировано: AlexeyVN - 31 марта 2017, 20:16



52
Lexo, а попробуйте перед этим вот это поставить  "воскрешённое существо.Resurrect()" . То есть полностью его воскресить

Lexo  Offline  Сообщение №2414 написано: 31 марта 2017, 20:21


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


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

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

AlexeyVN  Offline  Сообщение №2415 написано: 3 апреля 2017, 19:26



52
Здравствуйте, подскажите пожалуйста как отследить приобретения перка, то есть - как только у игрока появляется перк выводиться сообщение

Lexo  Offline  Сообщение №2416 написано: 7 апреля 2017, 21:25 | Отредактировано: Lexo - 7 апреля 2017, 21:27


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


223
AlexeyVN, есть очень простой вариант (но думаю, меня поправят, если есть вариант получше):

вставить в перк, что бы он давал способность (ability). В способности выставить магический эффект архетипа Script. В скрипте прописать:


Код
Message property MyMessage auto

Event OnEffectStart(actor ya, actor ty)
    MyMessage.show()
EndEvent

В проперти выставить своё сообщение...

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

Mengur  Offline  Сообщение №2417 написано: 24 апреля 2017, 05:21



12
Доброго времени суток уважаемым мастерам электронного скальпеля и молотка.

Есть несколько вопросов:

1) насколько опасно изменять фундаментальные скрипты игры. Сейчас я во время разработки мода вписал дополнительный код в скрипт "Actor". Понимаю, что это может эпично конфликтовать с другими модами, затрагивающими этот скрипт. Но может есть еще подводные камни?

2) Есть ли альтернатива изменению этих фундаментальных скриптов? Если подробней, то мне нужно, чтобы кусок кода работал на всех Актеров игры (достаточно, в принципе, только актеров в определенном окружении от игрока). Есть ли возможность как-нибудь присосаться к скрипту "Actor"?

Были мысли навесить на игрока незаметный постоянный спелл на область вокруг, чтобы всем в окружении добавлялся магический эффект со скриптом. Но вопросы тут такие: будут ли работать события Актеров на магическом эффекте? Насколько большую область накладывания эффекта можно сделать (в идеале с момента прогрузки актера в игре)

Если важно. Задумка такая: когда любого актера атакуют, включая главного героя, то срабатывает определенная функция. Через скрипт Actor система работает. Но интересны альтернативные возможности.

Dsion  Offline  Сообщение №2418 написано: 24 апреля 2017, 06:30 | Отредактировано: Dsion - 24 апреля 2017, 06:27



Mengur, а что вписал в скрипт Actor? Не покажешь? Я просто вообще ни разу не слышал, чтоб кто-то редактировал эти скрипты. Интересно!

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

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

Добавлено (24 Апреля 2017, 09:30)
---------------------------------------------
Хотя видел еще в Default Objects поле "Every Actor Ability". Я его не проверял и не знаю, работает ли, но, судя по названию, должно добавить пассивное умение всем акторам. Но, опять же, может вызвать несовместимость с чем-то.


Mengur  Offline  Сообщение №2419 написано: 24 апреля 2017, 06:35 | Отредактировано: Mengur - 24 апреля 2017, 06:44



12
[quote] а что вписал в скрипт Actor? Не покажешь? Я просто вообще ни разу не слышал, чтоб кто-то редактировал эти скрипты. Интересно! [/quote]

ай. блин. У меня цитирование не пашет. Прошу прощения за корявость. Это мое третье сообщение.

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

Позже смогу прислать сам скрипт. Пока нет к нему доступа.

Кстати, еще вопрос. Так нигде и не нашел, можно ли получить в эвенте "OnHit" данные о размере урона. Считаю тупо через переменную ("предыдущее здоровье" - "нынешнее здоровье"). Но как-то считает, походу, аляповато.

Dsion  Offline  Сообщение №2420 написано: 24 апреля 2017, 07:31



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

Добавлено (24 Апреля 2017, 10:29)
---------------------------------------------
Я когда-то делал отдельную игровую расу, которая получала в 4 раза больше урона от почти любых источников, но могла переходить в состояние "фокуса", когда сам игрок движется с нормальной скоростью, а весь остальной мир - замедляется в 2 или 4 раза. Весело было от града стрел уклоняться как в "Матрице" :)

Добавлено (24 Апреля 2017, 10:31)
---------------------------------------------
И еще надо Game Settings посмотреть. Там много переменных, которые напрямую участвуют в формулах расчета всякой фигни, включая урон. Есть шанс процентов 60%, что там есть что-то, чем можно поднять урон абсолютно всем акторам.


Mengur  Offline  Сообщение №2421 написано: 24 апреля 2017, 07:42



12
Dsion,

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

А вот с игровыми настройками интересно. надо поизучать. Есть где-нибудь описание настроек? хотяб на инглише?

=========

И на будущее. Ты говорил, что можно через эффекты расам добавлять различные скрипты, верно? То есть теоретически можно сделать уникальные требования для убийства каждой расы? (типа призраки получают урон только от железа, а драугов после убийства необходимо сжигать)?

Dsion  Offline  Сообщение №2422 написано: 24 апреля 2017, 07:52



С Game Settings точно стоит поразбираться.
Вот я выбрал наугад три настройки и увеличил их в 5 раз: fDamageStrengthMult, fCombatDamageScale, fDamageWeaponMult.
И что-то из этого реально изменило урон и мой, и НИП, который в меня стрелял.

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

Mengur  Offline  Сообщение №2423 написано: 24 апреля 2017, 13:03 | Отредактировано: Multigone - 22 апреля 2020, 15:49



12
Dsion, спасибо. Поищу какую-нибудь инфу по ним.

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

Кстати. Вот такой скрипт на actor у меня работал довольно хорошо. Тупо добавил в конец оригинального скрипта вот это:


Dsion  Offline  Сообщение №2424 написано: 24 апреля 2017, 14:21 | Отредактировано: Dsion - 24 апреля 2017, 14:24



Ага... Ну раз хорошо, то ладно...
По настройкам я много информации не видел.
https://www.creationkit.com/index.php?title=Category:Settings
Вот тут кое-что, но комментировано очень мало из них.
Легче методом тыка. Ввести фильтр "Damage" и пытаться догадаться, что они делают.
Но одна из тех трех точно работала!

Фигово, что нельзя всем НИП перк выдать. Там же всякое можно... Можно было бы сделать и шанс блокирования и шанс и что-угодно еще.

Mengur  Offline  Сообщение №2425 написано: 26 апреля 2017, 01:19



12
Хм. А вот интересно.

А эти настройки можно изменять динамически скриптами? И какая команда там, если возможность есть.

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

Dsion  Offline  Сообщение №2426 написано: 26 апреля 2017, 05:42 | Отредактировано: Dsion - 26 апреля 2017, 05:42



Mengur, скриптами без SKSE нельзя... С SKSE, вроде как, можно. Команды такого типа:
https://www.creationkit.com/index.php?title=SetGameSettingFloat_-_Game
Но я им не пользуюсь и не проверял.

Добавлено (26 Апреля 2017, 08:42)
---------------------------------------------
Может, действительно просто дать перк игроку? На битвы НИП против НИП это влиять не будет, но это же не так плохо. А то страшно представить, что может пара вампиров в городе сделать, если ты им еще и урон в 4 раза поднимешь :D

Mengur  Offline  Сообщение №2427 написано: 26 апреля 2017, 05:52



12
Dsion, Неее. Просто на игрока эффект не тот. В Скайриме же часто происходят стычки между народом. И мне не нравится, что в чувака могут засандалить с десяток стрел, а он сидит себе живой. Плюс компаньоны остаются крутыми. И можно на них скидывать сесь агр, а самому отстреливать врагов издали, что, собственно говоря, имба.

С тем кодом, что я выше оставлял, довольно интересно было играть, так как и компаньона выносили за раз, и просто война в округе была интересней. (ну может я предвзят, не спорю) =)

Минус скрипта был, он считал как-то подозрительно. Да так, что порой дракона можно было с одной стрелы убить. А иногда приходится запулить стрел 10. что почти нереально, так как с одного дыха он выносит в 80% случаев. Вот это истинное испытание =)

Dsion  Offline  Сообщение №2428 написано: 26 апреля 2017, 07:10



Ну да, я тоже когда-то размышлял над альтернативами концепии "HP". Не очень реалистично, когда в кого-то всаживают 20 стрел и ему пофиг, а потом еще одна стрела и он сразу сдыхает...
В Neverwinter Nights (и D&D вообще) хоть и тоже есть HP, но там иначе работает броня. Броня не уменьшает получаемый урон, а увеличивает шанс избежать урона вообще. Точно так же как ловкость. Можно было бы эту механику и в скайрим перенести. Больше бронищи - больше шанс избежать урона вообще. Но если уж урон получаешь, то он АДСКИЙ.
В добавок к этом можно было бы добавить какой-то штраф при низком значении HP. При, типа, ранении. Чем меньше ХП, тем медленее и слабее игрок.

Но совсем от HP я бы не отказывался, чтоб слабые крыски не ваншотили и чтоб не потеряли актуальность заклинания лечения.

Добавлено (26 Апреля 2017, 10:10)
---------------------------------------------
Кстати, можно еще рассмотреть вариант не увеличения урона, а уменьшения ХП... Эффект-то похожий?


Mengur  Offline  Сообщение №2429 написано: 26 апреля 2017, 07:17



12
Dsion, В идеале бы порезать и урон и ХП, чтобы отстроить весь баланс заного. Но это много работы, плюс правка всех актеров тоже неминуема.

Если просто уменьшать здоровье, то будет одинакого, что и увеличивать урон.

Меня сейчас другая дума тревожит. В моем варианте скрипта вычислялся урон, который актер получил (сразу же учитываются его броня, эликсиры, магические эффекты, и так далее). Там тупо от прошлого значения отнимается нынешнее. В итоге все эти фишки имеют значение.

С найстройками нужно будет не только увеличивать урон, но и усиливать все фишки эти.

Dsion  Offline  Сообщение №2430 написано: 26 апреля 2017, 07:47 | Отредактировано: Dsion - 26 апреля 2017, 07:50



Mengur, сам понимаешь, что отнимать от предыдущего значения текущее - это сомнительное решение. NPC могут лечиться или регенерировать  или получать урон из других источников (падение с высоты итп).
Я бы сначала трижды перепроверил, что желаемое нельзя сделать через game settings. Это безопасно и никаких конфликтов с другими модами.

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





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