Модератор форума: 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? Пиши не в ЛС, а в эту тему.
nepewka  Offline  Сообщение №901 написано: 7 апреля 2014, 15:44



255
С этим понятно!

ещё вопросик Alex

int WeakFire = 100

Function WeaknessToFire(Actor akTarget)
;Задаем функцию, которая будет увеличивать уязвимость цели к огню на 100%
akTarget.DamageAV("FireResist", WeakFire)
EndFunction

Event OnEffectStart(Actor akTarget, Actor akCaster)

WeaknessToFire(akTarget)   ; наложили уязвимость
FIREBOLT.cast (akCaster, akTarget)    ; собственно вопрос, сработает ли 100% уязвимость на каст Firebolt и увеличит ли она урон?

endEvent

Как срабатывают эффекты в эвенте? По своей очереди или же одновременно?
Я хочу чтобы сначало сработал WeaknessToFire, увеличив уязвимость цели к огню, а потом уже каст Файрболта на цель подверженную уязвимости. Сработает ли?

AleksTirex  Offline  Сообщение №902 написано: 7 апреля 2014, 17:54


Архимаг


371
nepewka, а событие OnEffectStart в каком скрипте, в каком именно маг.эффекте?
Если в том эффекте, который наносит урон, то поздно давать уязвимость, эффект то уже отработал и нанёс урон.
Если в другом маг.эффекте, то сработает уязвимость, если она будет наложена на актёра раньше, чем эффект с уроном.


Как срабатывают эффекты в эвенте? По своей очереди или же одновременно?


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

************
nepewka, смени команду akTarget.DamageAV("FireResist", WeakFire), она не будет давать уязвимости к огню.
 
DamageAV - это повреждение параметра, т.е. его уменьшение.
Лучше кастонуть спеллом на уязвимость к огню, есть такие.

nepewka  Offline  Сообщение №903 написано: 7 апреля 2014, 17:57 | Отредактировано: nepewka - 7 апреля 2014, 17:58



255
Цитата AleksTirex

Лучше кастонуть спеллом на уязвимость к огню, есть такие.

Напомника, пожалуйста один из таких спеллов

айдишник или ссылку на вики)

AleksTirex  Offline  Сообщение №904 написано: 7 апреля 2014, 18:16


Архимаг


371
nepewka, ID сейчас не помню. Ты открой СК и найди спеллы или эффекты с названием "Уязвимость к огню" (сортировка по столбцу с названиями, и далее по алфавиту легко найти).
 
Можешь даже и не кастовать отдельное заклинание, а сделать в основном/первом/скоростном маг.эффекте эту уязвимость. Тогда сделай длительность спелла/эффекта 2-3 сек. Ты просто открой дефолтный эффект с уязвимостью и посмотри как именно сделана такая уязвимость, и тоже самое сделай на своём эффекте.
 
Это точно будет работать и давать уязвимость раньше, чем файерболт, что тебе и надо.

nepewka  Offline  Сообщение №905 написано: 7 апреля 2014, 18:52 | Отредактировано: nepewka - 7 апреля 2014, 18:58



255
Цитата AleksTirex

ID сейчас не помню. Ты открой СК и найди спеллы или эффекты с названием "Уязвимость к огню" (сортировка по столбцу с названиями, и далее по алфавиту легко найти).


нашел 2 типа подобных эффектов. 1 const (постоянный, пассивный), другой с duration

тот который с duration, от алхимии, AlchWeaknessFire. 

думаю прикрутить к основному спеллу, труда не составит.

будет ли работать?

MemoriaVetusta  Offline  Сообщение №906 написано: 8 апреля 2014, 11:19



173
nepewka, если задать для цели заклинания уязвимость к огню, то огненные существа (например, огненный атронах) потеряют иммунитет к этому виду урона (а нужно ли?).

Если не нужно, то в Target Conditions эффекта уязвимости:

(S) (GetActorValue) (FireResist) (<100) (AND)

Nothing is...
nepewka  Offline  Сообщение №907 написано: 8 апреля 2014, 14:52



255
Цитата MemoriaVetusta

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


Ты наверное не вкурсе, но эффекты уязвимости работают со значениями больше чем 100% (проверенно)
Накладывал на стражников Вайтрана эффект со 100% уязвимостью, 200% и 500%. И кастовал спелл пламя.
100% и 200% снимал по 15-30% здоровья, с 500% уязвимостью уже убивал его. За отрезок времени брал 100 стандартной маны у персонажа.

Это я к тому, что этот эффект работает не только в значениях 0-100% как все думают, а даже больше

MemoriaVetusta  Offline  Сообщение №908 написано: 8 апреля 2014, 16:10 | Отредактировано: MemoriaVetusta - 8 апреля 2014, 16:16



173
nepewka, ты, наверное, меня не понял.

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

Избежать этого недоразумения можно двумя способами (редактируя MGEF уязвимости):

1) Указать в строке Resist Value тип сопротивления огню. Если НПС обладает сопр. огню = 100 (%), то эффект уязвимости не будет наложен, поскольку магнитуда эффекта умножается на 0 (т.е. 100% - 100% = 0%). Если же НПС будет обладать 90% сопротивлением огню, то эффект все равно будет наложен, но с магнитудой 10% (100% - 90% = 10%).

2) Не указывать сопротивление, а указать в Target Conditions то, что я написал в пред. посте. В этом случае НПС с иммунитетом к огню не будут подвержены эффекту уязвимости вовсе, все остальные, имеющие сопротивление огню < 100%, получат уязвимость с магнитудой 100%.

Надеюсь, все написанное понятно.

Nothing is...
nepewka  Offline  Сообщение №909 написано: 8 апреля 2014, 17:24



255
Не считаю это недоразумением.

200% уязвимости и умрёт твой атронах от фаерболла ;)

MemoriaVetusta  Offline  Сообщение №910 написано: 8 апреля 2014, 17:45



173
nepewka, вопрос снят. Похоже, кнопки на клавиатуре нажимались зря.

Nothing is...
nepewka  Offline  Сообщение №911 написано: 9 апреля 2014, 06:00 | Отредактировано: nepewka - 9 апреля 2014, 06:00



255
Я не совсем понял, с какой целью ты всё это писал)
Советов, как сохранить лорность игры после всех изменений я вроде не спрашивал))
Но твое желание спасти жизнь атронаху я учту. Добавлю им в памаметры 200% резиста от огня.

=========

oh wait, ты сейчас всем этим хотел сказать, что при 100% резисте у цели, любая уязвимость на нее не подействует?

Добавлено (09 Апреля 2014, 10:00)
---------------------------------------------
проверил на огненном атронахе, все работает

AveDarkness  Offline  Сообщение №912 написано: 9 апреля 2014, 09:27



9
Почему то скрипт не компилируется с функциями disable и enable. Компилятор выдает ошибку  Enable is not a function or does not exist.
Ванильные скрипты с этими функциями сохраняются нормально.
В чем тут может быть проблема?

Код
Scriptname a1MyAddPotions01 Extends TopicInfo Hidden

Potion Property Heal  Auto   
Potion Property Magica  Auto   
Potion Property stamina  Auto   
Alias Property MGEffect  Auto   
Alias Property SGDoor  Auto  

Function Fragment_1(ObjectReference akSpeakerRef)
Actor akSpeaker = akSpeakerRef as Actor
Game.Getplayer ().AddItem (Heal, 5)
Game.Getplayer ().AddItem (Magica, 5)
Game.Getplayer ().AddItem (Stamina, 5)
GetOwningQuest().SetStage(60)
SGDoor.Enable()
MGEffect.Enable()
EndFunction

nepewka  Offline  Сообщение №913 написано: 9 апреля 2014, 09:49



255
я вот например не понимаю что делает эта твоя функция, думаю компилятор тоже

LordVadim  Offline  Сообщение №914 написано: 9 апреля 2014, 11:23 | Отредактировано: LordVadim - 9 апреля 2014, 11:29



139
Цитата AveDarkness

Почему то скрипт не компилируется с функциями disable и enable. Компилятор выдает ошибку  Enable is not a function or does not exist. Ванильные скрипты с этими функциями сохраняются нормально. В чем тут может быть проблема?


Ошибку выдает потому, что скрипт Alias не содержит функций Disable и Enable.
Если целью является управление объектами через алиасы, необходимо использовать ReferenceAlias.

ReferenceAlias Property MGEffect Auto
ReferenceAlias Property SGDoor Auto

...

SGDoor.GetRef().Enable()
MGEffect.GetRef().Enable()

AleksTirex  Offline  Сообщение №915 написано: 9 апреля 2014, 11:29


Архимаг


371
Цитата AveDarkness

Почему то скрипт не компилируется с функциями disable и enable. Компилятор выдает ошибку  Enable is not a function or does not exist.



 SGDoor.Enable()
 SGDoor.Enable().GetReference()
 
 MGEffect.Enable()
 MGEffect.Enable().GetReference()
 
Если MGEffect это маг.эффект, то работать не будет, а если физический объект, то будет.
 
Поскольку используются алиасы, то тип свойства Alias надо заменить на ReferenceAlias.
Если автор хотел вкл/выкл именно сами объекты и они не прописываются в алиасы, тогда так:
 
ObjectReference Property MGEffect  Auto  
ObjectReference Property SGDoor  Auto 
...
SGDoor.Enable()
MGEffect.Enable()
 ...

AveDarkness  Offline  Сообщение №916 написано: 9 апреля 2014, 12:09



9
Цитата AleksTirex

ObjectReference Property MGEffect Auto ObjectReference Property SGDoor Auto
...
SGDoor.Enable()
MGEffect.Enable()


Спасибо огромное, заработало!

nepewka  Offline  Сообщение №917 написано: 9 апреля 2014, 17:01 | Отредактировано: nepewka - 9 апреля 2014, 17:04



255
AlexTirex, вообщем снова есть вопрос насчет работы уязвимости. Внимательно прочитав тобою написанное, придумал 2 варианта реализации.

Но для начала начну с 0 пункта. Эффект который я взял за основу:



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

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

сергей007788  Offline  Сообщение №918 написано: 9 апреля 2014, 17:17



76
Цитата nepewka

спелл просто не отображается в игре.


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

AleksTirex  Offline  Сообщение №919 написано: 9 апреля 2014, 17:49


Архимаг


371
nepewka, в одном спелле могут быть только однотипные эффекты. Если спелл типа "на цель", то и все эффекты там будут "на цель".
У тебя этот эффект "на себя" - переделай его "на цель". Точнее не его переделывай, а задублируй этот и уже крути дубликат, дабы не испортить дефолтный эффект.
А так же сделай, как пишет сергей007788.

nepewka  Offline  Сообщение №920 написано: 9 апреля 2014, 18:00 | Отредактировано: nepewka - 9 апреля 2014, 17:59



255
Вопрос временно снят, спасибо Серёга.

Даже не подумал что это может повлиять, как первоклассник  :D

AlexTirex, на себя изначально менял ;)

Добавлено (09 Апреля 2014, 22:00)
---------------------------------------------
Кстати вопрос немного не по теме, кто нибудь знает как работает левелинг в игре?

Хочу точно определить кол-во хп у нпц, будь то охранник или вызванный огненный атронах. У меня 24 уровень, есть ли формула?


AleksTirex  Offline  Сообщение №921 написано: 9 апреля 2014, 21:19


Архимаг


371
Цитата nepewka

Хочу точно определить кол-во хп у нпц, будь то охранник или вызванный огненный атронах. У меня 24 уровень, есть ли формула?



Полистай официальный сайт СК, там есть такая формула.
Можно и просто посчитать: возьми посмотри класс НПС, открой этот класс, там указано, сколько и чего повышается за один уровень. У каждого класса разное поднятие здоровья/магии/силы. Перемножь показатель/коэффициент здоровья на уровень НПС и прибавь стартовый показатель здоровья. Так же прибавь бонусы от способностей, если они есть.
 
Или узнай в игре через консоль: тырк по НПС и команда getav health
В скрипте почти так же: GetAV("Health")

nepewka  Offline  Сообщение №922 написано: 10 апреля 2014, 10:13



255
интересно, можно ли с эффектом уязвимости сделать так, чтобы он увеличивал уязвимость цели с течением времени. Что то типо проклятья, накладываем на цель, а оно увеличивает каждую секунду уязвимость цели скажем на 10%, работает 10 секунд. На 10ой секунде достигает максимума в 100%. Думаю сложно будет такое реализовать..)

AleksTirex  Offline  Сообщение №923 написано: 10 апреля 2014, 12:14


Архимаг


371
Цитата nepewka

можно ли с эффектом уязвимости сделать так, чтобы он увеличивал уязвимость цели с течением времени.



Можно. Читаем это: http://www.creationkit.com/%D0%9C%....2%D1%8B 
Смотри абзац Tapering, эти параметры отвечают за "временну'ю нелинейность": подъём и спад магнитуды по времени.

nepewka  Offline  Сообщение №924 написано: 10 апреля 2014, 17:42



255
разобрался и с хп мобов и с Tapering, благодарю!

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

В MGEF фаерболла, в пункте Perk to Apply указал свой созданный перк. (Перк который накладывается на цель при срабатывании MFEF)
В перке создал Entry point, Mod Incoming Spell Magnitude Multiply Value 2.0 ( Adjusts the magnitude of magic effects applied to the perk owner = Увеличивает входящий урон от магии владельца перка в 2 раза)

При касте фаерболла, в теории на цель должен накладываться этот перк. В теории и с виду всё правильно, но в игре перк после фаерболла отказывался работать. Как думаете, в чем может быть проблема?

MemoriaVetusta  Offline  Сообщение №925 написано: 10 апреля 2014, 18:02



173
nepewka, если ты внимательно смотрел раздел "Вопросы по СК", там я описал проблему, почему это возникает. К сожалению, пост удалил, а писать новый лень.

Вкратце: подозреваю, к НПС не применяются перки, выданные таким образом.

Nothing is...
nepewka  Offline  Сообщение №926 написано: 10 апреля 2014, 19:08



255
MemoriaVetusta

К сожалению, я только этой теме уделяю внимание :) А что там было конкретно, проблему так решить и не удалось?

Добавлено (10 Апреля 2014, 23:08)
---------------------------------------------
Попробовал решить проблему скриптом:

Perk Property AAAfirePerk auto

Event OnEffectStart (Actor akTarget, Actor akCaster)

akTarget.AddPerk(AAAfirePerk)

endEvent

Event OnEffectFinish(Actor akTarget, Actor akCaster)

akTarget.RemovePerk(AAAfirePerk)

endEvent

опять же никакого эффекта замечено небыло, видимо функция добавления перка через таргет сломана и не работает))


MemoriaVetusta  Offline  Сообщение №927 написано: 10 апреля 2014, 19:21



173
nepewka, может, так:

Event OnEffectStart (Actor Target, Actor Caster)

Nothing is...
nepewka  Offline  Сообщение №928 написано: 10 апреля 2014, 19:25



255
нет там всё правильно

сергей007788  Offline  Сообщение №929 написано: 10 апреля 2014, 19:36



76
nepewka, Я много раз пытался давать перк нпк через скрипт но похоже это не работает перки скриптом даются только гг, та же история с кейвордами. Даже в аллиасе нет места для перков. Может я не прав, хотелось бы чтоб это было так.

nepewka  Offline  Сообщение №930 написано: 10 апреля 2014, 19:43



255
похоже без помощи Алекса и какого нибудь хитрого обхода не обойтись тут ;)

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





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