Модератор форума: 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  Сообщение №241 написано: 20 мая 2013, 16:39 | Отредактировано: AleksTirex - 20 мая 2013, 16:46


Архимаг


371
PaukSama, akCaster == Game.GetPlayer() ведь так? Ведь нет больше никого, кроме ГГ, сам говорил. ;)
А так же, зачем добавлять спелл и сразу же его удалять? А не проще ли тогда так:
if (Utility.RandomInt() <= 50)
 Utility.Wait(480)
 akCaster.AddSpell (Dis)
 endif

Но, дело хозяйское.

**************
Иsкатель, сделай своих призраков с одним пакетом Trevell на маркер (DragonMarker). В пакете поставь условие, например "стадия квеста". Как только ты заходишь в триг.зону там срабатывает скрипт и переключает стадию квеста, пакеты начинают работать и дракон летит на маркер. При отсутствии активного пакета драконы летают.

На самом драконе вешаешь простой скрипт:

Actor Property Dragon  Auto  ; дракон, который должен оживать вместо этого призрака
ImpactDataSet Property FXDragonLandingImpactSet Auto ; нажать кнопочку Auto-Fill, само заполнится
EffectShader Property EffSh  Auto  ; подобрать желаемый эффект

auto state StatDefaulf
Event OnPackageEnd(Package akOldPackage)
PlayImpactEffect(FXDragonLandingImpactSet, "NPC Pelvis", 0, 0, -1, 512)
KnockAreaEffect(1, 2*getLength())
EffSh.Play(self, 4)
utility.wait(3.5)
Dragon.Resurrect()
utility.wait(0.3)
self.Disable()
gotoState("StatDone")
endif
endEvent
endState

state StatDone
;
endState

PaukSama  Offline  Сообщение №242 написано: 20 мая 2013, 16:55


Прячущий свое сердце


AleksTirex, не проще. Тк получится что следущая бутылка ломку не уберет на время действия, а если и уберет то с шансом 50. Тут у меня уже все просчитано. Так что нет идей как избавиться от Utility.Wait?

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №243 написано: 20 мая 2013, 17:39


Архимаг


371
Цитата PaukSama

Хочу оставить так как есть, только чтобы конец эффекта добавлял Dis при условии что в начале эффекта он был удален.


 
Через переменную.

if Game.GetPlayer().HasSpell(Dis)
akCaster.RemoveSpell (Dis)
bDone = true
Utility.Wait(480)
akCaster.AddSpell (Dis)
endif

 event onEffectFinish
if bDone == true
akCaster.AddSpell (Dis)
enfif

PaukSama  Offline  Сообщение №244 написано: 20 мая 2013, 20:04


Прячущий свое сердце


AleksTirex, о благодарю. То что надо. 75 процентов скрипта написано осталось разбавить его рандомами на доп эффекты и прочими нежданчиками. С этим справлюсь сам. Заодно и знаю теперь как работает переменная.

Добавлено (21.05.2013, 00:04)
---------------------------------------------
так все скрипт скомпилировал, но остался еще один небольшой вопрос о чем я забыл. Хотелось бы еще сделать так чтобы пока скрипт не закончился... ну в общем пока действие эффекта не кончилось принятие еще одной бутылки, то есть повтор эффекта вел к смерти персонажа. Ну смерть то прописать дело не хитрое, а вот условие повтора хотелось бы подсказку получить.


Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №245 написано: 20 мая 2013, 21:35 | Отредактировано: AleksTirex - 20 мая 2013, 22:07


Архимаг


371
Цитата PaukSama

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



Event onEffectStart(....)
if aaaaGlobal.getValue() == 1
ГГ.Kill()
return
endif
aaaaGlobal.SetValue(1)
....
if Game.GetPlayer().HasSpell(Dis)
akCaster.RemoveSpell (Dis)
bDone = true
endif
endEvent

Event onEffectFinish(....)
if bDone == true
akCaster.AddSpell (Dis)
enfif
aaaaGlobal.SetValue(0)
endEvent

Но лучше сильная потеря здоровья, пусть тренирует школу Восстановления или зелья локает. ok А вот при приёме третьей бутылки - можно и закиллить, раз уж не понятно, что скуума - это яд, хоть и приятный. Тогда будет так:

Event onEffectStart(....)
if aaaaGlobal.getValue() == 1
ГГ.addSpell(потеря здоровья на 3-15 ед/сек в течении 3-4 мин.) или akSpellDamage.Cast(ГГ, ГГ)
elseif aaaaGlobal.getValue() >= 2
ГГ.Kill()
return
endif
aaaaGlobal.SetValue(aaaaGlobal.getValue() + 1)
....
if Game.GetPlayer().HasSpell(Dis)
akCaster.RemoveSpell (Dis)
bDone = true
endif
endEvent

Event onEffectFinish(....)
if bDone == true
akCaster.AddSpell (Dis)
enfif
aaaaGlobal.SetValue(aaaaGlobal.getValue() - 1)
endEvent

Как то так.

PaukSama  Offline  Сообщение №246 написано: 21 мая 2013, 03:38


Прячущий свое сердце


AleksTirex, да я бы и сам рад так сделать но есть две причины на первый вариант.
1. Скрипт идеально работает только пока он один. То есть повторение может...нет оно концепции не нарушит но очень некрасиво может добавить Dis по рандому. Хотя он по этому самому рандому должен появляться лишь раз в жизни. Потом только по возврату
2. В скайриме в отличие от той же облы действие идентичных зелий не складывается вместе. Сколько бы бутылок со скумой не выпил а положительные эффекты будут как от одной. Тупо нет смысла пить вторую нет пока не отпустило. Потому надо убивать гг.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №247 написано: 21 мая 2013, 10:37 | Отредактировано: AleksTirex - 21 мая 2013, 10:38


Архимаг


371
Конечно, дело хозяйское как делать, но твои опасения напрасны, всех этих нестыковок можно избежать.
1. "очень некрасиво может добавить Dis по рандому" - чтобы этого не было просто добавь в рендом условие, что на ГГ сейчас только один этот эффект, который добавился только что: if (Utility.RandomInt() <= 50) && aaaaGlobal.getValue() == 1

2. "Сколько бы бутылок со скумой не выпил а положительные эффекты будут как от одной" - вот для этого есть строка ГГ.addSpell(потеря здоровья...  Здесь можно добавить второй эффект, который наложится на первый, ведь это совсем другой эффект. Опьянение сделать ещё сильнее, упадок здоровья, "размыть экран" и т.д.
"дополнительные положительные эффекты..." - да точно так же добавь их таким вариантом.

3. "Скрипт идеально работает только пока он один" - для этого есть переменная aaaaGlobal.getValue(), ей можно ограничивать команды в тех местах, где таковые должны быть только одни (без повторов).

4. Реалистичность. Когда пипл начинает пить, то "одной" крайне редко ограничиваются, обязательно бегут за "второй". Так и в игре - обязательно выпьют вторую, дабы посмотреть на результат, а результат - килл, народ начнёт ругаться. Вот если после "второй" совсем опьянел и здоровье начало резко падать, то это намёк, что следующая бутылка будет последней в жизни.

В общем, хозяин-барин, но всё-таки подумай.

PaukSama  Offline  Сообщение №248 написано: 21 мая 2013, 11:16


Прячущий свое сердце


AleksTirex, да я никуда и не спешу. Буду пробовать разное, насчет пункта 1. Не так все просто я укажу что может быть эффект только один. Но ведь он добавляется и пропадает до финиша а за это время новое применение сможет добавить Dis чего мне крайне нежелательно.

Добавлено (21.05.2013, 15:16)
---------------------------------------------
так же насчет эффектов делать их слагаемыми я не хочу. Выпей бутылку водки и выпел вторую...кайфа больше то не словишь. Одинаково, да еще и стошнит. Так же и тут, предел удовольствия достигается одной дозой. Насчет людей. Один раз сдохнут, загрузятся и больше не будут передозов творить. С другой стороны я согласен что неплохо бы предел смерти сделать не 2 а 3. Но надо это чем то обусловить. Но только не эффектами. Смысл в принятии второй пока действует первая.


Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №249 написано: 21 мая 2013, 11:25 | Отредактировано: AleksTirex - 21 мая 2013, 11:51


Архимаг


371
Цитата AleksTirex

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



Так там же написано: добавляется сильная потеря здоровья, эффектов опьянения можно не добавлять, проблем с Dis тоже можно легко избежать.

Если это вторая бутылка (или третья), то кроме добавления "потери здоровья" и фиксации второй выпитой бутылки данный скрипт ничего не добавит, ни Dis, но опьянения, вообще ничего связанного с эффектом скуумы.

Event onEffectStart(....)
aaaaGlobal.SetValue(aaaaGlobal.getValue() + 1)
if aaaaGlobal.getValue() == 2
ГГ.addSpell(потеря здоровья на 3-15 ед/сек в течении 3-4 мин.) или akSpellDamage.Cast(ГГ, ГГ)
elseif aaaaGlobal.getValue() >= 3
ГГ.Kill()
return
else
....
if Game.GetPlayer().HasSpell(Dis)
akCaster.RemoveSpell (Dis)
bDone = true
endif
endif
endEvent

Event onEffectFinish(....)
if bDone == true
akCaster.AddSpell (Dis)
enfif
aaaaGlobal.SetValue(aaaaGlobal.getValue() - 1)
endEvent

Т.е. если один эффект уже есть на ГГ, то все команды эффекта скуумы игнорируются (и Dis тоже).

*****
Вместо "потери здоровья" можешь любую "мотивацию" туда воткнуть, хоть сообщение "Пить не хорошо", хоть ...

PaukSama  Offline  Сообщение №250 написано: 21 мая 2013, 13:04 | Отредактировано: PaukSama - 21 мая 2013, 13:12


Прячущий свое сердце


Цитата AleksTirex

что такое "он" и "финиш" чего именно.

он это Dis а финиш это эфект финиш финал скрипта.
closedeyes охх ну что поделаешь раз уж ты постарался и написал этот блок на дополнительные бутылки то не будем упрямиться так и сделаем. Может быть пусть тогда не повреждение здоровья а еще размытие экрана вторая будет докидывать. У меня сейчас эффект старт дает это размытие а эффект финиш убирает. Можно сделать чтобы от первой этого небыло оно все же мешает играть, особенно зависимому от скумы. А если есть желание посмотреть "мультик" то вторая бутылка. Щас буду собирать все в одно целое посмотрим что из этого выйдет.

Добавлено (21.05.2013, 17:04)
---------------------------------------------
Вот набросал такое. Но где то в нем ошибка типа mismatched input 'elseif' expecting ENDEVENT. Не могу понять вроде все верно, где я накосячил.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №251 написано: 21 мая 2013, 13:54


Архимаг


371
Вот здесь:

 

PaukSama  Offline  Сообщение №252 написано: 21 мая 2013, 13:57


Прячущий свое сердце


AleksTirex, эх так и знал что где то endif не там. Искал искал а от их количества глаза разбегаются. Вот еще что
if akTarget == game.GetPlayer() 
Utility.Wait(5) 
Pery.applyCrossFade(2.0) эта фигня работает на второй бутылке но ее может и не произойти если ее не выпить
но в конце эффекта происходит
if akTarget == game.GetPlayer() 
imageSpaceModifier.removeCrossFade(2.0) 
endif
без всяких условий на то что оно вообще до этого сработало. Но тут по факту я так понимаю происходит возврат к дефолтному экрану, и ничего страшного не произойдет если оно сработает, даже если экран не изменялся. На деле просто это действие не будет видимо в игре так ведь?

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №253 написано: 21 мая 2013, 14:11 | Отредактировано: AleksTirex - 21 мая 2013, 14:12


Архимаг


371
Это ты правильно заметил, и вовремя. ;) Дело в том, что removeCrossFade - глобальная функция, и я не уверен, что она не удалит эффект от другого скрипта, который присутствует на экране (это я не проверял). Поэтому желательно удалять именно твой эффект командой Pery.remove(), а так же добавлять лучше командой Pery.apply(1.0) . К тому же в варианте apply можно настроить желаемую амплитуду эффекта.

PaukSama  Offline  Сообщение №254 написано: 21 мая 2013, 14:36


Прячущий свое сердце


AleksTirex, да действительно. Я сейчас продумывал свой мод. Но не учитывал что на персонажа могут действовать и помимо скумы разные экраны, которые будут так же очищены этим скриптом. 
Pery.apply(1.0) как я понимаю 1.0 это время появления экрана. Ну то есть он не резко изменяется, а в течении секунды, плавно.
Pery.remove() удаляет свойство экрана но в данный момент резко и моментально?

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №255 написано: 21 мая 2013, 15:13


Архимаг


371
PaukSama, не-е, не так. Pery.apply(1.0) - это "применить Pery с амплитудой 1.0", эффект от которой можно сделать от почти невидимой до полного перебора. По умолчанию сила эффекта == 1, это как в настройках самого ImageSpaceModifier в СК.

Для анимированного старта и финиша + и статичного долговременного эффекта применяется связка из трёх эффектов: apply - PopTo - Remove
 
PeryStart.apply(1.0) ; применяется анимированный эффект ImageSpaceModifier
PeryStatic.PopTo(PeryStart, 1.0) ; эффект PeryStart заменяется статичным эффектом PeryStatic
PeryFinish.PopTo(PeryStatic, 1.0) ; эффект PeryStatic заменяется анимированным эффектом PeryFinish
PeryFinish.Remove() ; удаляется эффект PeryFinish
 
В твоём варианте это будет так:
 

 Доступно только для пользователейScriptname SkoomaDrug extends activemagiceffect

  imageSpaceModifier property Pery auto
  Idle property Start auto
  Idle property Stop auto
  Spell Property Dis Auto
  Bool Property bDone auto
  GlobalVariable Property aaaaGlobal auto

  

  event onEffectStart(actor akTarget, actor akCaster)
  Game.Getplayer().playidle(Stop)
  Utility.Wait(0.1)
  if Game.Getplayer().GetSitState() == 0
  Game.Getplayer().playidle(Start)
  endif

  aaaaGlobal.SetValue(aaaaGlobal.getValue() + 1)
  if aaaaGlobal.getValue() == 2
  if akTarget == game.GetPlayer()
  Utility.Wait(5)
  PeryStart.apply(1.0) ; первый анимированный эффект
 Utility.Wait(2) ; время анимации первого эффекта
 PeryStatic.PopTo(PeryStart, 1.0) ;второй статичный эффект
  endif 
  elseif aaaaGlobal.getValue() >= 3
  akCaster.Kill()
  return
  else

  if (Utility.RandomInt() <= 50)
  akCaster.AddSpell (Dis)
  endif

  if Game.GetPlayer().HasSpell(Dis)
  akCaster.RemoveSpell (Dis)
  bDone = true
  endif
  endif
  EndEvent

  

  event onEffectFinish(actor akTarget, actor akCaster)
  if akTarget == game.GetPlayer()
  PeryFinish.PopTo(PeryStatic, 1.0) ; анимированный эффект финиша
 Utility.Wait(2) ; время анимации последнего эффекта
  PeryFinish.Remove() ; удаляется последний эффект
  endif
  if bDone == true
  akCaster.AddSpell (Dis)
  endif
  aaaaGlobal.SetValue(aaaaGlobal.getValue() - 1)
  EndEvent

PaukSama  Offline  Сообщение №256 написано: 21 мая 2013, 15:38


Прячущий свое сердце


AleksTirex, судя по всему не совсем так. Надо 
PeryStart
PeryStatic
PeryFinish сделать свойствами наверное. А вообще для чего это? Вроде раньше ничего этого небыло, но плавность в появлении\исчезании присутствовала. Может это зависит от свойств самой анимации...

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №257 написано: 21 мая 2013, 16:04


Архимаг


371
Цитата PaukSama

AleksTirex, судя по всему не совсем так. Надо   PeryStart  PeryStatic  PeryFinish сделать свойствами наверное. А вообще для чего это? Вроде раньше ничего этого небыло, но плавность в появлении\исчезании присутствовала. Может это зависит от свойств самой анимации...



Естественно, это всё свойства, просто не стал дописывать в твой скрипт.
 
Это всё для того, чтобы было всё красиво и плавно. Практически все дефолтные эффекты именно так делаются, там, где нужна анимация эффекта. Например крик Замедление времени, эффект Берсека и т.д.
 
ImageSpaceModifier может быть как статичным, так и анимированным, это как его сделаешь в настройках.
 
Если не хочешь с этим заморачиваться, то просто imageSpaceModifier.removeCrossFade(2.0) смени на Pery.remove(), и у тебя будет всё как и раньше.

**********
"зависит от свойств самой анимации..." - не анимации, а ImageSpaceModifier

PaukSama  Offline  Сообщение №258 написано: 21 мая 2013, 16:27 | Отредактировано: PaukSama - 21 мая 2013, 16:45


Прячущий свое сердце


AleksTirex, просто я к тому что сами файлы анимации тоже имеют свои настройки. Некоторые анимки действуют бесконечно и их скриптом прерывать надо, а некоторые проигрываются и сами завершаются.Теперь осталось тестить. Заодно надо посмотреть набор стандартных анимаций. Где то там была такая что гг лежит на земле держась за живот, на предсмерную аниму бы хорошо смотрелось.
А заморачиваться то чего, долго ли три свойства создать... да я уже сделал.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №259 написано: 21 мая 2013, 16:49


Архимаг


371
PaukSama, мы наверное, не поняли друг друга. Всё, что я писал выше, относится только к ImageSpaceModifier и к анимации никакого отношения не имеет.
ImageSpaceModifier сама может быть статичной или анимированной/изменяющейся.
 
По поводу "гг лежит на земле держась за живот" не факт, что эта анимация будет работать через команду скрипта, надо проверять (хорошо если будет). Очень многие анимации не запускаются командой PlayIdle. Но если так произойдёт, то можно использовать фурнитуру-маркер Wounded02FloorMarker для этих целей, она точно работает.

PaukSama  Offline  Сообщение №260 написано: 21 мая 2013, 16:59


Прячущий свое сердце


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

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

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
AleksTirex  Offline  Сообщение №261 написано: 21 мая 2013, 17:37 | Отредактировано: AleksTirex - 21 мая 2013, 17:51


Архимаг


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

Смысл данного скрипта: при активации объекта ГГ добавляется один произвольный предмет из списка, если активатор не ГГ, то килл.

Чтобы добавить произвольный предмет из LeveledItem достаточно написать:

LeveledItem Property Litem  Auto
game.getPlayer().additem(Litem, 1)

Вот так:

Scriptname FormLevelScript extends ObjectReference
LeveledItem Property Litem  Auto
Event OnActivate(ObjectReference akActionRef)
If akActionRef == game.getplayer()
game.getPlayer().additem(Litem, 1)
elseif akActionRef
(akActionRef as actor).kill()
Endif
endevent

PaukSama  Offline  Сообщение №262 написано: 21 мая 2013, 18:17


Прячущий свое сердце


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


соответственно Item1 самый дорогой предмет который труднее всего получить, Item6 утешительный приз беспроигрышной лоттереи стопроцентный если ничего лучше не выпадет. Единственное что еще тут не дописал это удаление суммы денег при активации но теперь этот скрипт бесполезен.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
sansuli  Offline  Сообщение №263 написано: 27 мая 2013, 12:08 | Отредактировано: sansuli - 28 мая 2013, 07:40


The Red Sun


193
Бурный диалог  :D

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

И еще видел мод "Медитация", там у ГГ отключают управление, заставляют сесть и ускоряют время. Я знаю как отнимать управление и ускорять время, но не знаю как заставлять ГГ или НПС проигрывать анимацию, подскажите функцию?

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
AleksTirex  Offline  Сообщение №264 написано: 29 мая 2013, 11:36


Архимаг


371

как заставлять ГГ или НПС проигрывать анимацию, подскажите функцию?


akActor.PlayIdle(akIdle)
 
Но в данном случае получится лажа, а точнее - ничего не получится, т.к. в условиях анимации есть "если это кровать", а выполнить его с такими командами нельзя.
 
Если надо "положить" ГГ на кровать, то это делается через пакет Activate (ActivateSpecialFurniture).
Добавить временный пакет можно так: http://tiarum.com/wiki....%82_NPC
Подойдёт второй вариант.

sansuli  Offline  Сообщение №265 написано: 29 мая 2013, 16:09 | Отредактировано: sansuli - 29 мая 2013, 16:52


The Red Sun


193
Цитата AleksTirex

Сделай перк с типом Entry Point Activate и там галочка Run Immediately. Во вкладке Target поставь условия "кровать" IsCurrentFurnitureObj. В окне Papyrus Fragment напишешь свои команды на "сон".


И что будет делать этот перк? Можно подробнее я не врубился?

Вот я умею вычислять время, и вот я подхожу к кровати и у меня Int хранит XX часа (или любое другое количество часов) бодрствования, и мне надо спать ZZ (где ZZ = XX/2) часов, как мне это сделать? Можно скриптом поставить длительность сна? Как сделать так чтобы при активации кровати не появлялось окно выбора длительности сна?

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
mxac  Offline  Сообщение №266 написано: 29 мая 2013, 19:44



178
Ребят, подскажите, а как скрипт к заклинанию прикрутить? Гугл не признаётся =)


AleksTirex  Offline  Сообщение №267 написано: 29 мая 2013, 20:09


Архимаг


371

как скрипт к заклинанию прикрутить?

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

PaukSama  Offline  Сообщение №268 написано: 29 мая 2013, 20:12


Прячущий свое сердце


mxac, нужно его повесить на магик эффект который есть в заклинании. В Object Window в MagicEffect находишь эффект, лучше создать свой новый.

Отними у меня апельсин - и я тебя убью
Съешь мой апельсин - и я тебя убью
Подари мне апельсин - и... я тебя убью
Мне не нужен никто, лишь мой апельсин
А тот кто не пойман - не ассасин!
mxac  Offline  Сообщение №269 написано: 29 мая 2013, 20:27



178
Цитата AleksTirex

mxac, нужно его повесить на магик эффект который есть в заклинании. В Object Window в MagicEffect находишь эффект, лучше создать свой новый.

Пасиба! А ещё как нибудь можно(встретил спел в ктором Effect Archetype стоит Script, но в списке скриптов в самом эффекте пусто)?


sansuli  Offline  Сообщение №270 написано: 29 мая 2013, 20:46


The Red Sun


193
Цитата mxac

А ещё как нибудь можно(встретил спел в ктором Effect Archetype стоит Script, но в списке скриптов в самом эффекте пусто)?


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

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Поиск:





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