Приветствую всех, пытаюсь сделать спелл, возник вопрос по скриптам, подскажите, пожалуйста.
Тип спелла - кастанул и забыл на цель.Что происходит с целью - врубается анимация bleedout (такая, когда у бессмертных нпс заканчивается хп и они падают на колени), при этом цель ничего не может делать и находится в таком состоянии пока не закончится действие спелла либо она не умрёт. В общем - что-то типа парализа, но с нормальной анимацией.
Scriptname Bleedout extends ActiveMagicEffect
Event OnEffectStart(Actor akTarget, Actor akCaster) ; Определяем ХП цели Float currentHealth = akTarget.GetActorValue("Health") Float percentHealth = akTarget.GetActorValuePercentage("Health") Float maxHealth = currentHealth / percentHealth Float dmgHealth = maxHealth - currentHealth ;Включаем анимацию и делаем цель невосприимчивой Debug.SendAnimationEvent(akTarget, "BleedOutStart") akTarget.SetUnconscious(true) ;Восстанавливаем ХП цели akTarget.ForceAV("Health", maxHealth) akTarget.DamageAV("Health", dmgHealth) EndEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster) ;Отключаем анимацию и делаем цель восприимчивой akTarget.SetUnconscious(false) Debug.SendAnimationEvent(akTarget, "BleedOutStop") EndEvent ;===========================================
Проблема в том, что функция Actor.GetActorValuePercentage работает некорректно, возвращает не то, что должна. В SKSE есть GetMaximumValue, но я не совсем понимаю на чём её вызывать и как вообще использовать.
P.S. Извиняюсь, если вопрос покажется совсем нубским, это моя первая попытка работы со скриптами, буду рад любым вариантам, заранее благодарю!
По-моему, ты круто запутался и было бы хорошо начать всё с нуля...
Да что там с нуля то начинать - три строчки кода омфг, если шаришь, то просто напиши как корректно определить текущее и макс хп цели и после установить цели эти значения, если не сильно трудно, разумеется, я был бы весьма признателен.
Изменение репутации для пользователя keboard
keboardOffline
Сообщение №4
| Тема: Вопросы по скриптам Papyrus
написано: 22 октября 2015, 22:48
| Отредактировано: keboard - 22 октября 2015, 22:52
Попробуй в первой версии скрипта заменить ForceAV на RestoreAV
Спасибо за наводку, удалось решить проблему с хп, кстати, методом тыка установлено:
пусть изначально
текущее значение = X максимальное = Y
используем ф-цию
ForceAV <value> Z
теперь станет так
текущее значение = Z максимальное = Z + (X - Y)
пусть изначально
текущее значение = X максимальное = Y
используем ф-цию
SetAV <value> Z
теперь станет так
текущее значение = Z - (X - Y) максимальное = Z
Возник вопрос по поводу анимации - при повторном использовании спелла на цель, которая уже под его воздействием, анимация выключается, юзаю снова - включается и так далее вкл выкл вкл выкл, увловие вроде правильно настроил, не пойму что не так...
Я так понимаю, что независимо от того истекает ли время действия эффекта или он применяется повторно до истечения времени - мы в любом случае попадаем в OnEffectFinish. Можно ли определить, какая из этих двух причин нас туда привела?
Изменение репутации для пользователя keboard
keboardOffline
Сообщение №6
| Тема: Вопросы по скриптам Papyrus
написано: 23 октября 2015, 02:43
| Отредактировано: keboard - 23 октября 2015, 02:44
Повесил условие HasMagicEffect - эффект не накладывается повторно пока предыдущий не спадёт, но косяк с анимацией всё равно полностью не вылечился - если кастануть спелл на цель, когда предыдущий эффект только закончился и она "в процессе вставания с колен" xD - анимация "вернуться на колени" не срабатывает, она как бы зависает в положении стоя.