• Страница 1 из 1
  • 1
Форум » Записи участника [xCYNICx]

Результаты поиска
xCYNICx  Offline  Сообщение №1 | Тема: Вопросы по скриптам Papyrus написано: 31 мая 2020, 07:13 | Отредактировано: xCYNICx - 31 мая 2020, 09:22



6
Здрасти всем. Если тут еще кто-то есть, можете помочь? Я тут создал несколько paired animations, и при помощи FNISS зарегистрировал соответствующие Anim Events. Теперь CK видит мои анимации. Я создал заклинание с магическим эффектом со скриптом, что бы проигрывать эти анимации. Все работает, но есть проблема. Эти анимации не Killmovesб после их проигрывания не предусматривается убийство NPC. И тут оказывается что если вызвать анимации во время боя, после проигрывания непись перестает сражаться и вообще что-либо делать, он тупо бегает вокруг игрока и ничего не делает)) Есть ли возможность как то это исправить, что бы после проигрывания парной анимации непись возвращался в прежнее состояние? Вообще я новичок в скриптах, прошу тапками не закидывать.

Idle Property pa_01 Auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
akCaster.PlayIdleWithTarget(pa_01, akTarget)

Endevent

[b]Добавлено[/b] (31 Мая 2020, 12:09)
---------------------------------------------
Дополню. Путем многочисленных проб я обнаружил, что если в мое заклинание, инициирующее проигрывание анимации, добавить ванильный магический эффект - calm, который понижает агрессию NPC и выставить его длительность больше, чем длительность парной анимации, то после проигрывания анимации во время боя, непись снова продолжает бой, а не бегает вокруг. Видимо это как то связано с behaviors NPC во время боя, ведь парные анимации это по сути айдлы, которые должны работать в спокойном состоянии, а я пытаюсь их впихнуть во время боя. Есть ли возможность добиться такого же эффекта в самом скрипте без дополнительного эффекта calm в моем заклинании.

Мне просто захотелось освежить немного боевку скайрима эффектами типа killmoves, но только без убийства, что бы после анимации бой продолжился. Кстати, я сейчас подумал, а можно ли с помощью скрипта на время проигрывания анимации замедлить время для остальных персонажей, такой эффект слоумо, но только что бы парная анимация воспроизводилась без замедления на персонаже и NPC?
Еще забыл упомянуть, помимо всего прочего, после проигрывания моей анимации персонаж игрока переходит в состояние вне боя, приходится переэкипировать оружие каждый раз, есть ли какая нибудь команда как его принудительно вернуть в состояние в котором он был до воспроизведения анимации, проблема не критична, но надоедлива.

xCYNICx  Offline  Сообщение №2 | Тема: Вопросы по скриптам Papyrus написано: 31 мая 2020, 12:26 | Отредактировано: Multigone - 31 мая 2020, 14:22



6
Цитата Multigone

Попробуй ре-экипировать оружие скриптом (UnequipItem / EquipItem).


Спасибо за совет. Я пока только учусь папирусу, поэтому не знаю как снять конкретное оружие с NPC, но я использовал команду aktarget.unequipall(), а затем после проигрывания IdleStop_Loose анимации - akTarget.DrawWeapon().

В результате эффект получился почти такой же как я и ожидал. Неписи реагируют на обстановку и сражаются, только в трусах. Осталось понять как снимать с них только оружие, а не всю экипировку. Вт что я добавил в своем скрипте:

Код
Event OnEffectFinish(Actor akTarget, Actor akCaster)
    NPCWeapon = akTarget.GetEquippedWeapon()
    akTarget.unEquipAll()
    akTarget.PlayIdle(IdleStop_Loose)
    akTarget.DrawWeapon()
Endevent

xCYNICx  Offline  Сообщение №3 | Тема: Вопросы по скриптам Papyrus написано: 31 мая 2020, 16:38 | Отредактировано: Multigone - 2 июня 2020, 18:16



6
Цитата Multigone

xCYNICx, все функции есть в исходниках (Data/Scripts/Source). Смотри, что расширяет скрипт, который ты пишешь (Например, заголовок "Script MyScript Extends Actor"), ищи в исходниках .psc с таким именем (Actor.psc), в нем будут все допустимые функции для этого типа форм с комментами. Больше инфо о любой функции можно получить здесь, набрав в поиске ее название. Также смотри, что расширяет Actor.psc (ObjectReference), ищи ObjectReference.psc и смотри все функции, многие из них могут применяться в том числе к Actor. И так далее. Большинство скрипт-объектов имеют иерархию.


Спасибо за подсказку. Теперь буду знать где искать полезные функции. Попробую все предложенные тобой варианты. Надеюсь все заработает)

У меня возник еще один вопрос. Как можно определить под каким углом стоит НПС по отношению к игроку. Например я хочу чтобы событие (анимация) произошло когда НПС стоит спиной или лицом к персонажу. Я вписал в скрипт такой код. Но работает он как то не правильно, как будто рандомно. Видимо я использую не ту функцию:
Код
Event OnEffectStart(Actor akTarget, Actor akCaster)
    if AkTarget.GetAngleZ() > 90 && AkTarget.GetAngleZ() < 270
        akCaster.PlayIdleWithTarget(pa_01, akTarget)
        Debug.MessageBox("Back")
    Else
        akCaster.PlayIdleWithTarget(pa_02, akTarget)
        Debug.MessageBox("Front")
    Endif
Endevent

xCYNICx  Offline  Сообщение №4 | Тема: Вопросы по скриптам Papyrus написано: 31 мая 2020, 18:06 | Отредактировано: Multigone - 2 июня 2020, 18:14



6
Цитата Dsion

xCYNICx, посмотри функцию GetHeadingAngle(). Скорее всего, это то, что нужно.


Спасибо большое. Это, действительно то что нужно. Работает замечательно. Единственное чего я не пойму, если я напрямую вставляю функцию akTarget.GetHeadingAngle(akCaster) в условие, тогда компиляция проходит успешно, но когда пытаюсь присвоить переменную - скрипт не хочет компилироваться - блокнот вылетает:

Код
Event OnEffectStart(Actor akTarget, Actor akCaster)

    direction = akTarget.GetHeadingAngle(akCaster) ; пытаюсь присвоить переменную - вылет

    if direction > 90 && direction < 180
        akCaster.PlayIdleWithTarget(pa_01, akTarget)
        Debug.MessageBox("Back")
    Else
        akCaster.PlayIdleWithTarget(pa_02, akTarget)
        Debug.MessageBox("Front")
    endif
Endevent

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

xCYNICx  Offline  Сообщение №5 | Тема: Вопросы по скриптам Papyrus написано: 12 июня 2020, 14:37 | Отредактировано: Multigone - 12 июня 2020, 20:24



6
Всем привет. У меня снова возник вопрос. Я тут написал скрипт, который показывает меню messagebox с несколькими опциями, каждая из котороых запускает ту или иную анимацию. Все работает хорошо, но вот я хотел бы немного расширить эту функцию, мне нужно что бы после проигрывания выбранной анимации, всплывал еще один messagebox с другими опциями и возможностью отменить все, вернувшись в игру. Вот мой код:

Код
Idle Property pa_05 Auto
Idle Property pa_06 Auto
Idle Property pa_07 Auto
Idle Property pa_08 Auto
Message Property MsgNPC_01 Auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
    Int iButton = MsgNPC_01.Show()
    If (iButton != -1)
        If (iButton == 0)
            Debug.Notification("pa_05")
            akCaster.PlayIdleWithTarget(pa_05, akTarget)
        ElseIf (iButton == 1)
            Debug.Notification("pa_06")
            akCaster.PlayIdleWithTarget(pa_06, akTarget)
        EndIf
    EndIf
Endevent
Заранее спасибо

xCYNICx  Offline  Сообщение №6 | Тема: Вопросы по скриптам Papyrus написано: 12 июня 2020, 19:16 | Отредактировано: Multigone - 12 июня 2020, 20:23



6
Цитата Multigone

А зачем вы проверяете на -1? Окно возвращает от 0 и выше.

Если честно я и сам толком не знаю, подсмотрел кусок кода у кого-то. Но, сейчас главное для меня, что скрипт работает как я задумывал. А, вообще, я новичок в скриптинге, только недели три как начал разбираться с папирусом. Пока для меня тут много непонятного. Сейчас попробую скрипт без этого условия ( ibutton != -1).

Форум » Записи участника [xCYNICx]
  • Страница 1 из 1
  • 1
Поиск:





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