Перейти к содержанию
  • Новые материалы

  • Программируемые эффекты заклинаний


    Вы спросите, зачем нужна эта статья? Разве нельзя использовать скриптовые заклинания?Конечно можно, но у них есть некоторые ограничения. Например, вы хотите сделать комбинацию из нижеследующего:

    • «Тихо» нанести повреждения NPC, то есть не видя никаких магических эффектов.
    • Сделать игрока невидимым так, чтобы не было видно руку, колдующую заклинание.
    • Какое-то заклинание считается враждебным, только стражник видит, как я его колдую.
    • Колдовать заклинание аля Morrowind, которое может не сработать, или нанести случайное кол-во повреждений оружием.
    • Колдовать заклинание, которое наносит огненное повреждение инеевым атронахам, а огненным атронахам наносит повреждение холодом.
    • Узнать, кто колдовал заклинание на меня или на другого актера.

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

    Вот простейший пример, как создать простейшее «тихое» заклинание, наносящее 10 ед. повреждений мгновенно на избранную цель.

    • Шаг 1 – создайте заклинание типа Способность, скажем "SilentDm10" с эффектом: "Понижение здоровья 10" и скриптовым эффектом: "StopSilentDm10" .
    • Шаг 2 – создайте следующей скрипт для магических эффектов "StopSilentDm10" :
    scn StopSilectDm10 
    
    short doOnce 
    
    Begin ScriptEffectUpdate 
      if doOnce 
        Dispel SilentDm10 
      endif 
      set doOnce to 1 
    End 
    
    Begin ScriptEffectFinish 
      RemoveSpell SilentDm10 
    End
    • Шаг 3 – используйте это заклинание в каком либо другом скрипте:
    ; target – ссылка на актера (или игрока) 
      target.AddSpell SilentDm10

    Примечание: добавление способности игроку вызовет появление сообщения, и заклинание не будет «тихим». Поэтому я бы изменил имя заклинания на что-нибудь более подходящее, например, "Отравление" . Вы не увидите больше одного сообщения "Добавлено Отравление" , если у всех ваших заклинаний-способностей будет одно имя.

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

    Вот простой пример. Он позволяет вам нанести цели случайные повреждения от X до X+Y:

    scn WildDamageSpell 
    
    ; это внутриигровая функция на объекте 'FIGWildDamageSpell' 
    
    ref target 
    short baseDamage 
    short wildDamage 
    short isPlayerHostile 
    short dam 
    
    Begin OnActivate 
    
      ; обнаруживаем цель 
      set target to GetActionRef 
      if target.IsActor == 0 || target.GetDead == 1 
        Return 
      endif 
    
      ; считаем кол-во повреждений 
      set dam to baseDamage+wildDamage*0.01*GetRandomPercent 
    
      ; если заклинание враждебное – простая проверка, только для игрока 
      if dam > 0 && isPlayerHostile > 0 
        if target.IsGuard == 0 
          target.Startcombat player 
        endif 
        SendTrespassAlarm player 
        player.ModCrimeGold 35 
      endif 
    
      ; добавляем какой-нибудь нетипичный графический эффект (не обязательно!) 
      if dam > 0 
        target.PME DTCT 1 
      endif 
    
      ; наносит повреждения – здесь они ограничены от 0 до 31 
      ; dam <= 0 ничего не делает, dam > 31 дает 31 
      if dam >= 16 
        target.AddSpell SilentDm16 ; тот же SilentDm10, что и в предыдущем пример, но дает 16 повреждений 
        set dam to (dam)-16 
      endif 
      if dam >= 8 
        target.AddSpell SilentDm08 ; дает 8 повреждений, и так далее... 
        set dam to (dam)-8 
      endif 
      if dam >= 4 
        target.AddSpell SilentDm04 
        set dam to (dam)-4 
      endif 
      if dam >= 2 
        target.AddSpell SilentDm02 
        set dam to (dam)-2 
      endif 
      if dam >= 1 
        target.AddSpell SilentDm01 
      endif 
    
    End 

    Чтобы колдовать это заклинание:

    ; target – ссылка на актера, предполагается, что заклинание колдует игрок 
    set FIGWildDamageSpell.baseDamage to 10 
    set FIGWildDamageSpell.wildDamage to 20 
    set FIGWildDamageSpell.isPlayerHostile to 1 
    FIGWildDamageSpell.Activate target 1 

    Продвинутые эффекты:

    Здесь все ограничено вашей смекалкой и воображением. Вот несколько вещей, которое можно сделать:

    1) Заклинания-таймеры: Поскольку внутриигровые функции могут использовать блок GameMode, небольшая модификация скрипта позволит запускать его каждую секунду (или каждый кадр) в течение любого времени.

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

    3) Заклинания с центром на игроке: Можно использовать заклинания, кастующиеся с активатора на игрока, а использование внутриигровых функцию дает вам полный контроль над ними.

    4) Отслеживание колдующего: Добавьте ref-переменную в скрипт функции под названием 'caster' и устанавливайте ее перед вызовом функции. (можно также задать переменные для целей.)

    5) Симулирование сопротивления, цены заклинания: Все это можно запрограммировать с помощью условий!

    6) NPC колдуют заклинания: Заставить актера X немедленно колдовать заклинание на цель Y просто. Заставить его колдовать, когда это бы сделал RAI, может быть потруднее. Можно попробовать самому симулировать AI (AAI), с помощью постоянного заклинания.

    Постоянные заклинания:

    Самое смешное, что заклинания-способности не годятся для наложения постоянных эффектов – даже для игрока! Дело в том, что при смене ячейки заклинание удаляется и накладывается снова, то есть все переменные в скриптовом эффекте сбрасываются.

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

    Конечно, это хорошо, если вам надо, чтобы заклинание наложилось на всех актеров и исполнялось, только когда рядом игрок.


    Данная статья взята с неработающего ныне сайта tiarum wiki. Статья является переводом данной статьи http://cs.elderscrolls.com/index.php?title=Programmable_Spell_Effects за авторством GuidoBot. Переводчик Gwathlobal (OSFM team).


    Обратная связь

    Рекомендуемые комментарии

    Комментариев нет



    Для публикации сообщений создайте учётную запись или авторизуйтесь

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать учетную запись

    Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

    Регистрация нового пользователя

    Войти

    Уже есть аккаунт? Войти в систему.

    Войти

×
×
  • Создать...