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


Архимаг


371
Цитата nepewka

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



Static Property XMarker auto
 
float[] aamagnitude
bool bDone

 
Event OnEffectStart(Actor akTarget, Actor akCaster)
  aamagnitude = new float[10]
endEvent

 
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
  if akSource as Spell && akAggressor as Actor && !bDone
    Spell akSpell = akSource as Spell
    Actor akSelf = GetTargetActor()
    bDone = true
    if akSpell.IsHostile()
      int numEffects = akSpell.GetNumEffects()
      int index = 0
      While index < numEffects
        float magnitude = akSpell.GetNthEffectMagnitude(index)
        aamagnitude [index]= magnitude
        if akSpell.GetNthEffectMagicEffect(index).GetAssociatedSkill() == "Destruction"
          magnitude = magnitude * 1.2  ; +=20%
        else
          magnitude = 0.0 ;
        endif
        akSpell.SetNthEffectMagnitude(index, magnitude)
        index += 1
      endWhile
      ObjectReference akMarker = akSelf.PlaceAtMe(XMarker)
      akSpell.Cast(akMarker, akSelf)
      Utility.Wait(0.3)
      index = 0
      While index < numEffects
        akSpell.SetNthEffectMagnitude(index, aamagnitude[index])
        index += 1
      endWhile
      akMarker.DisableNoWait()
      akMarker.Delete()
    endif
    bDone = false
  endif
endEvent


Жирным отмечено создание маркера под ногами цели и потом его удаление (чтобы не захламлять игровой мир).

Маркер кастует на цель, а цель выбирает не он, а ты сам, и прописываешь эту цель в команду каста.
 
************************
 
Перк "на всех" создать можно, но его ведь ещё и добавить надо всем, а вот с этим и есть сложность. :)
 
************************
В Settings много чего есть, надо искать и проверять. Воспользуйся фильтром, начни с magick, damade и т.д. Сами названия переменных говорят о их применении/назначении. Меняй значения и проверяй реакцию в игре.
 
************************
 
DoCombatSpellApply() работает только на актёрах, Cast() на любом объекте.
DoCombatSpellApply() добавляет спелл актёру, Cast() не добавляет спелл.
DoCombatSpellApply() и Cast() кастуют спелл на цель.
Через DoCombatSpellApply() можно заражать и отравлять актёра, через Cast() можно только заклинания кастовать.

nepewka  Offline  Сообщение №992 написано: 20 апреля 2014, 22:04 | Отредактировано: nepewka - 20 апреля 2014, 22:08



255
AleksTirex, благодарю! А какой маркер выбрать в Property?

AleksTirex  Offline  Сообщение №993 написано: 20 апреля 2014, 22:13 | Отредактировано: AleksTirex - 20 апреля 2014, 22:15


Архимаг


371
Цитата nepewka

AleksTirex, благодарю! А какой маркер выбрать в Property?



XMarker  (это и есть его ID)  ;) Нажми Auto-Fill, он сам заполнится.

nepewka  Offline  Сообщение №994 написано: 20 апреля 2014, 22:16 | Отредактировано: nepewka - 20 апреля 2014, 22:17



255
Цитата AleksTirex

Там же написано: XMarker  (это и есть его ID) ;)


уже разобрался. А мы можем одновременно поставить 3 маркера например у ног нпц или только 1 за раз?

AleksTirex  Offline  Сообщение №995 написано: 20 апреля 2014, 22:27


Архимаг


371
Цитата nepewka

уже разобрался. А мы можем одновременно поставить 3 маркера например у ног нпц или только 1 за раз?



Можно хоть сотню.  А какой смысл в трёх маркерах?

nepewka  Offline  Сообщение №996 написано: 20 апреля 2014, 22:39 | Отредактировано: nepewka - 20 апреля 2014, 23:20



255
Цитата AleksTirex

Можно хоть сотню.  А какой смысл в трёх маркерах?


Да так чисто рабочий интерес))

Чтобы в этом же скрипте добавить ещё 2 маркера, достаточно будет дописать?
ObjectReference akMarker = akSelf.PlaceAtMe(XMarker)
ObjectReference akMarker2 = akSelf.PlaceAtMe(XMarker)
ObjectReference akMarker3 = akSelf.PlaceAtMe(XMarker)

Ах да, маркеры будут работать в любых условиях или только для ГГ? Допустим если мой саммон, грозовой атронах, кастит в нпц под влиянием этой абилки

===
Ну и последнее что хотел спросить, если хочу чтобы маркер дал 3 каста подряд
akSpell.Cast(akMarker, akSelf)
akSpell.Cast(akMarker, akSelf)
akSpell.Cast(akMarker, akSelf)  ; можно ли как то заменить 3 каста одной командой? Есть ли такая в наличии? Может быть repeat какая нибудь )) Чисто для удобства, чтобы не писать 3 одинаковых строчки

===================

Проверил все в игре. С виду всё работает и выглядит прекрасно!  good



AleksTirex  Offline  Сообщение №997 написано: 20 апреля 2014, 23:47


Архимаг


371
Цитата nepewka

Ах да, маркеры будут работать в любых условиях или только для ГГ? Допустим если мой саммон, грозовой атронах, кастит в нпц под влиянием этой абилки



Этот маркер сам по себе, и кастует туда, куда ты в команде укажешь - цель. Создать его можно под ногами любого НПС. Никаких условий или зависимостей нет. Полная свобода действий.

nepewka  Offline  Сообщение №998 написано: 21 апреля 2014, 12:04 | Отредактировано: nepewka - 21 апреля 2014, 14:39



255
да уж, потрясающие возможности в скайриме! По сравнению то с моровиндом  :D

если создать

event onUpdate()
...
registerForUpdate(10.0)
endevent

то всё что в ... будет повторяться каждые 10 секунд бесконечно?

serdj_st  Offline  Сообщение №999 написано: 21 апреля 2014, 14:15



23
Есть ли возможность использовать амплитуду эффекта в качестве переменной скрипта?

nepewka  Offline  Сообщение №1000 написано: 21 апреля 2014, 15:30 | Отредактировано: nepewka - 21 апреля 2014, 15:37



255
кстати, что нужно сделать чтобы маркер пулял по таргету, который двигается?
Допустим положили мы его под своими ногами, а задача стоит чтобы он пульнул в нпс.

В onEffectStart - понятно, он определит наш akTarget и будет по нему кастовать.
А если эвент onSpellCast? Надо написать ему в цели GetTargetActor?

====================

И ещё вопросик. Просто подскажи как правильно мне сделать)
После складывания общей магнитуды от int numEffects = akSpell.GetNumEffects()  в float magnitude = akSpell.GetNthEffectMagnitude(index)
Мы получили 300 магнитуды.
Цель - разделить 300 на 3 части по 100, так чтобы не разом в 300 урон наносился, а 3 раза по 100 (Упустим ту часть где высчитываем новый урон в SetNthEffectMagnitude и кастуем новый спелл в 20% от общей магнитуды. Этого щас нет)

>>>

int numEffects = akSpell.GetNumEffects() ; получили все эффекты заклинания
int index = 0
While index < numEffects
float magnitude = akSpell.GetNthEffectMagnitude(index) ; получили 300 магнитуды со всех эффектов
aamagnitude [index]= magnitude ; сохранили дефолтный урон

While magnitude > 100 ; делим урон.
; не знаю можно ли сделать так, чтобы спелл наносил дамаг 3 раза по 100, срабатывая при этом 1 раз.(???) Поэтому сделаю 3 спелла по 100 урона
magnitude = magnitude - 100
if magnitude = 100
endWhile
endif
akSpell.SetNthEffectMagnitude(index, magnitude)  ; akSpell наносит 100 урона
index += 1
endWhile

; кастуем. Эх, ещё бы я мог заставить его считать за меня, так чтобы он кастовал akSpell по 100 урона столько раз, сколько надо до полного деления, было бы идеально!
akSpell.cast()
akSpell.cast()
akSpell.cast()

While index < numEffects
akSpell.SetNthEffectMagnitude(index, aamagnitude[index]) ; вернули дефолт
index += 1
endWhile

... Что не так?

AleksTirex  Offline  Сообщение №1001 написано: 21 апреля 2014, 16:20


Архимаг


371
Цитата nepewka

В onEffectStart - понятно, он определит наш akTarget и будет по нему кастовать.  А если эвент onSpellCast? Надо написать ему в цели GetTargetActor?



facepalm
Прочитай мой пост на предыдущей странице про "События"/эвенты. Ты внимательно причитай и постарайся понять, что такое "Событие".
Событию ничего не надо прописывать, а это ещё и невозможно.

nepewka  Offline  Сообщение №1002 написано: 21 апреля 2014, 16:45 | Отредактировано: nepewka - 21 апреля 2014, 16:57



255
Цитата AleksTirex

Прочитай мой пост на предыдущей странице про "События"/эвенты. Ты внимательно причитай и постарайся понять, что такое "Событие". Событию ничего не надо прописывать, а это ещё и невозможно.


Прочитал) Впринципе стало понятней.  :)
но по прежнему не понятно, как задать цель каста маркеру, если маркер лежит к примеру под нашему ногами, а кастануть ему надо в нпц.

"Маркер кастует на цель, а цель выбирает не он, а ты сам, и прописываешь эту цель в команду каста"

То есть и akTarget, и GetTargetActor подойдут? Главное чтобы в игре наш прицел был наведен на нпс?

p.s отдельное спасибо за ошибки. Бьюсь головой, даётся тяжело, но понимать это нужно

AleksTirex  Offline  Сообщение №1003 написано: 21 апреля 2014, 17:11


Архимаг


371
Цитата nepewka

То есть и akTarget, и GetTargetActor подойдут? Главное чтобы в игре наш прицел был наведен на нпс?



Причём тут прицел?
akTarget и GetTargetActor - они относятся только к маг.эффекту, который сработал/запустился на НПС. И ему абсолютно пофиг,куда ГГ или НПС направил прицел.
 
akTarget - это цель эффекта, а не ГГ/НПС. Т.е. на ком именно сработал данный эффект, это референс НПС, на котором висит этот эффект.
GetTargetActor() - это 100% тоже самое (!).
 
*******************
А вот боевую цель НПС (но не ГГ), на которого этот НПС нападает, можно узнать через akActor.GetCombatTarget(). Маркер - это статик, а не актёр, он не умеет думать и выбирать цели, поэтому надо заранее определить цель - референс актёра, в кого он будет стрелять.

nepewka  Offline  Сообщение №1004 написано: 21 апреля 2014, 17:36



255
AleksTirex, отлично!
Finally, как на примере нашего скрипта сделать так, чтобы маркер пальнул в нпц?

Обьясняю:
мы ставим маркер под ногами нпц, с Utility.Wait(0.3) нпц не успевает никуда убежать, поэтому получает от маркера фаерболл в лицо, НО если поставить скажем Utility.Wait(10.0) перед кастом спелла от маркера, нпц успевает недалеко уйти от места где появился наш маркер. Спустя 10 секунд фаерболл взрывается в месте появления маркера, но ни в коем случае не летит в место, где сейчас находится нпс

AleksTirex  Offline  Сообщение №1005 написано: 21 апреля 2014, 17:36


Архимаг


371
nepewka, примерно так:
 



 
Вот только зачем надо разбивать одно заклинание на несколько частей? Смысла в этом нет никакого.

nepewka  Offline  Сообщение №1006 написано: 21 апреля 2014, 17:49 | Отредактировано: nepewka - 21 апреля 2014, 17:54



255
Цитата AleksTirex

Вот только зачем надо разбивать одно заклинание на несколько частей? Смысла в этом нет никакого


Согласен. Единственный смысл в знаниях. Хочу подхватить как можно больше знаний с твоего кода unsure

а ещё когда ты пишешь какие нибудь обьяснения после ; всё даётся намного легче!

Кстати, вопрос немного не по теме. Какой у тебя профиль по созданию модов?
Не думал ли сделать что то типо SkyRe, с новыми перками/заклинаниями?

AleksTirex  Offline  Сообщение №1007 написано: 21 апреля 2014, 18:22


Архимаг


371
Цитата nepewka

Согласен. Единственный смысл в знаниях. Хочу подхватить как можно больше знаний с твоего кода

 

Для этого лучше всего - пишешь и делаешь что-то в СК, и идёшь смотреть в игру на результат. Потом поменял/переделал - и опять провеять. Главное - запоминай, что ты делаешь и какой от этого результат. Так всему и научишься.
 
***********
***********

[offtop]Я по "специализации" квестовик, мелкими модами я не занимаюсь - не интересно. Мне интереснее большое и сложное, с максимумом наворотов, нелинейности, уникальности и прочего. (те мелкие моды на MG - исключение, они сделаны исключительно по просьбе)
Глобальные изменения геймплея... а зачем? Добавить к дефолтным багам ещё и свои? Перекрутить настройки и циферки в перках и настройках - много ума не надо, это не интересно. А вот создать что-то совершенно новое, чего раньше не было, так это намного интереснее, на мой взгляд.

сергей007788  Offline  Сообщение №1008 написано: 21 апреля 2014, 18:25



76
Подскажите пожалуйста,
SetPlayerTeammate(true, true)

Как работает Эта команда, и что именно включают, 1 -True 2 - True

nepewka  Offline  Сообщение №1009 написано: 21 апреля 2014, 18:41



255
AleksTirex, а что с?
Цитата nepewka

Finally, как на примере нашего скрипта сделать так, чтобы маркер пальнул в нпц? Обьясняю:
мы ставим маркер под ногами нпц, с Utility.Wait(0.3) нпц не успевает никуда убежать, поэтому получает от маркера фаерболл в лицо, НО если поставить скажем Utility.Wait(10.0) перед кастом спелла от маркера, нпц успевает недалеко уйти от места где появился наш маркер. Спустя 10 секунд фаерболл взрывается в месте появления маркера, но ни в коем случае не летит в место, где сейчас находится нпс


AleksTirex  Offline  Сообщение №1010 написано: 21 апреля 2014, 18:55


Архимаг


371
nepewka, а ты пробуй разные варианты. Тебе надо знать точный референс цели на момент каста. Поэтому попробуй взять этот референс непосредственно в момент каста: akSpell.Cast(akMarker, GetTargetActor())
 
***********
сергей007788http://www.creationkit.com/SetPlayerTeammate_-_Actor 
Первый true - включает режим "компаньона", т.е. вслед за ГГ спрятаться/присесть, вынуть оружие, показать инвентарь, носить одежду из своего инвентаря и т.д.
Второй true - включить статус командного актёра, т.е. он будет числится как командный актёр, типа компаньона и/или призванного НПС (в условиях эффектов, скриптах и прочем есть такие проверки).

LordVadim  Offline  Сообщение №1011 написано: 21 апреля 2014, 18:57



139
AleksTirex, ещё раз спасибо!!!
С OnHit() все получилось.
Кстати, OnHit() срабатывает только на первом призраке, остальных Projectile пролетает насквозь не вызывая события OnHit(), что мне, в принципе, и было нужно.

nepewka  Offline  Сообщение №1012 написано: 21 апреля 2014, 19:42



255
AleksTirex, получилось с gettargetactor. Спасибо!

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

AleksTirex  Offline  Сообщение №1013 написано: 21 апреля 2014, 20:51


Архимаг


371
Цитата nepewka

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



Почему не даст работать? Работать не будет только то, что внутри этой проверки:
 
Event ...()
  if bDone == false
    bDone = true
    ...
    ...
    bDone = false

  endif
  if akActor. ...() == ...
    ...Disable()
  endif
  iNext += 1

endEvent
 
Event ...другой_эвент()
  if akSpell...
    ...Enable()
  endif
  iNext += 10
endEvent

 
Не работает только то, что красное, т.е. то, что отделено жёлтым. Всё зелёное будет работать.
Пока переменная bDone не станет "правильной", до тех пор всё внутри этой проверки работать не будет, т.к. не выполняется условие проверки. На остальные части скрипта это никак не скажется.
 
*************
В скрипте под спойлером есть ошибка:
magnitude = magnitude / iNumCast - ошибка
magnitude = magnitude / iNumCastTMP - правильно

nepewka  Offline  Сообщение №1014 написано: 22 апреля 2014, 01:50 | Отредактировано: nepewka - 22 апреля 2014, 01:54



255
Цитата AleksTirex

В скрипте под спойлером есть ошибка: magnitude = magnitude / iNumCast - ошибка
magnitude = magnitude / iNumCastTMP - правильно


Спасибо, поправил!

===========

Можно ли как нибудь при повторении одного и того же события MGEF как то ограничить появление маркеров?
Я очень хочу, чтобы после 1 моего каста в игровом мире появилось 3 маркера, но я не хочу чтобы они появлялись после каждого моего каста и делали повторые касты до окончания эффекта (Utility.Wait(60.0)).
Кастанул спелл с 2 рук - получил 6 маркеров,  кастанул 6 спеллов в промежутке 2-3 секунд - получил 18 маркеров. Красным выделил то,  повторения каких команд я хочу избежать.

bool bDone

Event OnEffectStart(Actor akTarget, Actor akCaster)
Actor akVictim = GetTargetActor()
if bDone == false
bDone = true
ObjectReference akMarker = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker2 = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker3 = akTarget.PlaceAtMe(XMarker)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker, akVictim)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker2, akVictim)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker3, akVictim)

akMarker.DisableNoWait()
akMarker.Delete()
akMarker2.DisableNoWait()
akMarker2.Delete()
akMarker3.DisableNoWait()
akMarker3.Delete()
Utility.Wait(60.0)
bDone = false
endif
endEvent

LordVadim  Offline  Сообщение №1015 написано: 22 апреля 2014, 06:36



139
Цитата nepewka

Можно ли как нибудь при повторении одного и того же события MGEF как то ограничить появление маркеров?


nepewka, Есть такая вещь, как глобальные переменные (GlobalVariable). Значения присвоенные им сохраняются вне зависимости от скриптов.

Установить значение можно через функцию .SetValueInt()

Получить значение - .GetValueInt()

Сделай переменную в СК и присвой ей значение 0.
В скрипте проверяй значение, если оно равно 0 - делай маркеры и присвой значение 1.
Пока опять не изменишь значение на 0 - маркеры появляться не будут.

nepewka  Offline  Сообщение №1016 написано: 22 апреля 2014, 12:53 | Отредактировано: nepewka - 22 апреля 2014, 12:54



255
LordVadim, Спасибо за совет!!! Помогло

GlobalVariable Property AAAbegemot auto
Static Property XMarker auto
Spell Property AAAptaxa auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
float begemot = AAAbegemot.GetValue()
Actor akVictim = GetTargetActor()
if begemot == 0.0
ObjectReference akMarker = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker2 = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker3 = akTarget.PlaceAtMe(XMarker)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker, akVictim)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker2, akVictim)
Utility.Wait(1.0)
AAAptaxa.Cast(akMarker3, akVictim)
akMarker.DisableNoWait()
akMarker.Delete()
akMarker2.DisableNoWait()
akMarker2.Delete()
akMarker3.DisableNoWait()
akMarker3.Delete()
AAAbegemot.SetValue(1.0)
Utility.Wait(180.0)
AAAbegemot.SetValue(0.0)
endif
endEvent

=========

Кстати, что значит оператор -= ??
Всё никак не пойму. Типа присвоенное число уменьшающиеся на 1?

LordVadim  Offline  Сообщение №1017 написано: 22 апреля 2014, 13:33



139
Цитата nepewka

Кстати, что значит оператор -= ?? Всё никак не пойму. Типа присвоенное число уменьшающиеся на 1?


akTemp  -= 1   ;- akTemp уменьшится на 1
akTemp += 5   ;- akTemp увеличится на 5

Так понятно?  :)

nepewka  Offline  Сообщение №1018 написано: 22 апреля 2014, 14:34 | Отредактировано: nepewka - 22 апреля 2014, 14:35



255
Цитата LordVadim

Так понятно?


Да!

Но теперь возникла проблема в финальной части создания скрипта.

Вообщем суть:

Идея - При попадании заклинанием Fireball, на помощь к akCaster приходят 3 невидимых духа предков (Маркеры), которые с интервалом раз в 5 секунд на протяжении 20 секунд произносят свои заклинания.
Через 20 секунд они пропадают и в течении следующих 180 секунд, покуда наша GlobalVariable == 1, вызывать снова мы их не можем.
Не работает цикл заклинаний While. При чем до этой версии скрипта он у меня работал, но там был хаос и не удавалось заполучить контроль над ним (было слишком много заклинаний от маркеров).

Посмотрите пожалуйста, что не так?

GlobalVariable Property AAAbegemot auto
Static Property XMarker auto
Spell Property AAAptaxa auto

Event OnEffectStart(Actor akTarget, Actor akCaster)

float begemot = AAAbegemot.GetValue()
Actor akVictim = GetTargetActor()

if begemot == 0.0

ObjectReference akMarker = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker2 = akTarget.PlaceAtMe(XMarker)
ObjectReference akMarker3 = akTarget.PlaceAtMe(XMarker)
AAAbegemot.SetValue(1.0)
While begemot == 1
Utility.Wait(5.0)
AAAptaxa.Cast(akMarker, akVictim)
AAAptaxa.Cast(akMarker2, akVictim)
AAAptaxa.Cast(akMarker3, akVictim)
endWhile
Utility.Wait(20.0)
akMarker.DisableNoWait()
akMarker.Delete()
akMarker2.DisableNoWait()
akMarker2.Delete()
akMarker3.DisableNoWait()
akMarker3.Delete()
Utility.Wait(180.0)
AAAbegemot.SetValue(0.0)

endif

endevent

AleksTirex  Offline  Сообщение №1019 написано: 22 апреля 2014, 16:12


Архимаг


371
nepewka, ты подпиши все свои команды, что каждая конкретно делает, тогда тебе станет ясно, где ошибка.
While - это цикл, он выполняется, пока верна проверка условия, в твоём случае - бесконечность, он никогда не закончится. И более того, он даже не начнётся, ведь твой "бегемот" всегда равен нулю, а в условиях он должен быть == 1.
Все команды в скрипте исполняются по очереди сверху вниз, и только один раз, если нет команды повтора/цикла, а в цикле... читай выше.
 
И учти, событие старта маг.эффекта в скрипте может быть только одно (!), второго события в данном скрипте возникнуть не может по определению, т.к. не бывает два начала или два конца у одной вещи (слон не в счёт).

nepewka  Offline  Сообщение №1020 написано: 22 апреля 2014, 17:47 | Отредактировано: nepewka - 22 апреля 2014, 18:21



255
Цитата AleksTirex

если нет команды повтора

можно поподробнее, что за команда на повтор? Может быть с ней у меня получится...

Добавлено (22 Апреля 2014, 21:47)
---------------------------------------------
Можно посчитать необходимое кол-во кастов iNumCasts, как ты вчера писал и задать цикл

While iNumCasts > 0
iNumCasts -= 1
endwhile

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





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