Модератор форума: 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? Пиши не в ЛС, а в эту тему.
MemoriaVetusta  Offline  Сообщение №931 написано: 10 апреля 2014, 19:48



173
nepewka, зачем тебе перк? Можно решить через MGEF (надеюсь, для тебя это не слишком примитивно):

Эффект добавить в огненный шар в конец списка, магнитуду и продолжительность добавить по вкусу.



Nothing is...
nepewka  Offline  Сообщение №932 написано: 10 апреля 2014, 19:55



255
С уязвимостью уже разобрался, поэтому примитивно  closedeyes

А вот Mod Incoming Spell Magnitude через перк - разнообразие и класс!

MemoriaVetusta  Offline  Сообщение №933 написано: 10 апреля 2014, 20:03



173
nepewka, не работает выдача перков, тебе уже двое сказали. Тебе важен результат или... что?

ЗЫ: Придумаешь, как выдать перки НПС через эффект, напиши об этом книгу. А я куплю.

Nothing is...
nepewka  Offline  Сообщение №934 написано: 11 апреля 2014, 08:20



255
да пожалуй вы правы, действительно не работает.

Может кто сказать за что отвечает функция RegisterForSingleUpdate ?

Что делает и зачем её используют?

serdj_st  Offline  Сообщение №935 написано: 12 апреля 2014, 03:31



23
Здравствуйте!
Подскажите пожалуйста как оформить события поднятия/опускания оружия (не экипировки)

anton  Offline  Сообщение №936 написано: 12 апреля 2014, 12:01



362
Вопросик есть: "Idle Marker" работает на ГГ ?
(а то я его кинул в СК на землю, загрузился в свою локацию и встал на то место, где лежит этот маркер, но ГГ не стал исполнять заданную маркером анимацию)

И ещё, где можно почитать про карту высот, используемую при полётах ?
(хочется разобраться как сделать летающего рядом с ГГ НПС или животное ...)

Цитата serdj_st

события поднятия/опускания оружия


его можно поймать функцией "isWeaponOut"

Мой Блог
serdj_st  Offline  Сообщение №937 написано: 12 апреля 2014, 15:28



23
Цитата anton

его можно поймать функцией "isWeaponOut"

"isWeaponOut" - функция условия, creation kit

а надобно провернуть через Papirus 
Нужно событие для поднятия/опускания оружия (желательно без SKSE)

AleksTirex  Offline  Сообщение №938 написано: 12 апреля 2014, 15:44


Архимаг


371
anton, "Idle Marker" на ГГ не работает, если не отобрать управление и не дать АИ (выполнять пакеты). ГГ по дефолту что-либо активирует только "мышкой".
 
"карта высот", а зачем? Она никак не поможет заставить летать актёров. Но есть вариант: делаешь дракона, а он может летать, и назначаешь ему свой скин (ты в Максе умеешь работать, поэтому сможешь сделать такое). Можно даже в процессе игры менять скины, тем самым можно "подменять" любого актёра на своего дракошу с заменой скина, типа это сам тот актёр полетел. Конечно, можно скриптами заставить "летать/левитировать", но это совсем не то.
 
**********************************

serdj_st, можно с SKSE применить событие OnActorAction : http://www.creationkit.com/OnActorAction_-_Form 
или без SKSE - OnAnimationEvent : http://www.creationkit.com/OnAnimationEvent_-_Form 
 
Unequip_Out - убрать оружие,
Weapequip_Out - вынуть оружие,
Magic_Equip_Out - экипировать магию,
Magic_UnEquip_Out - убрать магию.

*************************************
 
nepewka, RegisterForSingleUpdate - регистрация события OnUpdate() : http://www.creationkit.com/OnUpdate_-_Form 
 

nepewka  Offline  Сообщение №939 написано: 12 апреля 2014, 16:18



255
AlexTirex, вопрос может быть немного не по теме, но вдруг знаешь.

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

То есть сейчас все зачарования работают так сказать onEquip, а можно ли сделать так чтобы было onAcquireItem?

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


Архимаг


371
nepewka, можно: OnItemAdded, и далее проверка итема и добавление/применение на ГГ аналогов зачарования. Но это 100% чит (!), т.к. можно будет применить все зачарования из инвентаря, хоть сотню, хоть тысячу. Тогда проще TGM...

nepewka  Offline  Сообщение №941 написано: 12 апреля 2014, 16:52 | Отредактировано: nepewka - 12 апреля 2014, 16:58



255
AleksTirex, мне не для игры, а так для рабочего интереса  unsure

OnItemAdded это что? Эвент в скрипте, как я понимаю

Если эвент в скрипте, то что в нем нужно написать, чтобы зачарование заработало именно при добавлении итема?

Добавлено (12 Апреля 2014, 20:38)
---------------------------------------------
add:

насчет читерности, можно будет MGEF зачарования добавить кейворд, при котором итемы с подобным эффектом будут диспелиться ;) Чтобы избежать стака эффектов

Добавлено (12 Апреля 2014, 20:52)
---------------------------------------------
add:

Создаю квест с автостартом, референс игрока

xxx extends ReferenceAlias

OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)

....??

А дальше что, как заставить зачарование работать при получении итема?

anton  Offline  Сообщение №942 написано: 13 апреля 2014, 07:05



362
AleksTirex, я попробовал сменить расу ГГ на "дракона". Но при этом дракон смог только ходить по земле (притом только вперёд/назад). Заставить его полетать у меня не получилось.

Я изучил скрипты мода "Flyable Dragon Races 3_0_2 BURNING SKIES Full Version". В нём как раз используется подмена расы, но полёт реализован всё равно через скрипты. Все анимации запускаются вручную, в зависимости от нажатой кнопки. А движение происходит с помощью TranslateTo() к заданному маркеру, или подставляется под ноги фэйковая плоскость.

Выходит простой подменой расы не получить возможности полетать ... ?

Мой Блог
AleksTirex  Offline  Сообщение №943 написано: 13 апреля 2014, 12:04


Архимаг


371
anton, чтобы дракон мог летать, у него в пакете должна быть процедура Orbit, вот эта процедура и заставляет лететь дракона. (это типа Travel/Sandbox, но только для полёта)
 
Конечно, управлять "куда и как" должен лететь дракон нельзя, как в Sandbox нельзя указать "как и куда" должен двигаться/ходить НПС. Но можно динамически менять TargetLocation - центр полёта, тем самым как бы направляя дракона (через алиас, а его всегда можно сменит/изменить).

Добавлено (13 Апреля 2014, 16:04)
---------------------------------------------
***************************
 
У меня просьба ко всем - есть у кого сохранки: перед освобождением дракона в Драконьем пределе, и перед квестом соратников, где надо идти в Древний каирн и там соратник превращается в оборотня.
 
Сойдут любые расы и задействованные моды. Если у кго есть такие сохранки - сбросьте мне, пожалуйста.


anton  Offline  Сообщение №944 написано: 13 апреля 2014, 13:13



362
AleksTirex, держи пару сейвов перед поимкой дракона в Пределе <CLICK>
Про каирн и соратника не помню когда такое было, попробую найти...

Цитата AleksTirex

в пакете должна быть процедура Orbit


другими словами для ГГ это не подойдёт, но вот для НПС можно попробовать ?

Мой Блог
AleksTirex  Offline  Сообщение №945 написано: 13 апреля 2014, 13:34


Архимаг


371
anton, СПАСИБО!
 
В Древний каирн ведёт Фракас за обломком секиры, там ГГ попадает за решётку и видит сцену, как Фракас превращается в оборотня и всех "Серебрянноруких" кусает. Вот мне надо сохранка до этого похода, чтобы проверить правильно ли мой компаньон работает в этом квесте, ведь там квест соратников подменяет компаньона на Фракаса (хоть мой компаньон и не использует дефолтный квест компаньонов, то терпеть не может конкурентов, типа ревнует).
 
*********
ГГ тоже может пользоваться пакетами, поэтому можно сделать как с НПС, так и с ГГ.

anton  Offline  Сообщение №946 написано: 13 апреля 2014, 14:39 | Отредактировано: anton - 13 апреля 2014, 15:33



362
AleksTirex, кажется я нашёл то, что нужно: <CLICK>
(эти сейвы всё таки сохранились в архивах, на дугом винте :) )

Цитата AleksTirex

ГГ тоже может пользоваться пакетами


с пакетами ни разу не игрался, даже не знаю чего начинать спрашивать :D ,
пойду разбираться что там и как...

.....................

* Итак, выходит чтобы запустить пакет надо его добавить НПС (или ГГ):
Если НПС изначально известен, то можно это сделать в СК для актёра в закладке "AI packages".
Если неизвестен или это ГГ, то как ?
(ни в "Actor" ни в "Package" нету таких функций)

* Далее, надо запустить пакет в заданное время:
Делаем скрипт на вещь, при одевании которой раса ГГ меняется на Дракона.
Далее делаем проверку на нажатие нужной кнопки, если нажата, то включаем пакет "Orbit".
Как мы его включаем ?
(ни в "Actor" ни в "Package" нету таких функций)
Просто запустить "SetPlayerAIDriven()" и пакет начнёт выполнятся ?

Мой Блог
AleksTirex  Offline  Сообщение №947 написано: 13 апреля 2014, 16:23


Архимаг


371
Цитата anton

Просто запустить "SetPlayerAIDriven()" и пакет начнёт выполнятся ?



Не совсем. После этой команды назначаешь ГГ в свой алиас своего квеста (который к этому времени уже запущен) - AliasPlayer.ForceRefTo(Game.GetPlayer)
 
В этом алиасе есть окно для пакетов, в него в СК добавляешь свой пакет. Когда на алиас назначится НПС/ГГ, то заработает этот пакет на этом НПС/ГГ.
Сам же пакет делаешь собственностью этого квеста, тогда в параметре "цель" можно будет использовать алиас из этого квеста. Этот алиас так же назначается такой же командой, но только маркер, который и будет целью пакета (он создаётся у ГГ и дальше просто передвигается). Этот маркер можешь двигать как хочешь, и в теории (!) дракон должен следовать за этим маркером.
Управлять положением маркера при отсутствии управления персонажем просто - OnKeyUp / OnKeyDown, и дальше ты сам знаешь как.
 
По окончании "одраконивания" просто очищаешь алиас AliasPlayer.Clear(), удаляешь этот маркер и очищаешь его алиас, возвращаешь ГГ в своё состояние SetPlayerAIDriven(false), и меняешь расу.
 
***********
Как себя поведёт процедура Orbit на изменение координат цели я не знаю, но все основные процедуры адекватно на это реагируют.
 
****************
****************
anton, спасибо за сейвы!!! :)

anton  Offline  Сообщение №948 написано: 13 апреля 2014, 18:05



362
AleksTirex, попробовал, но всё что сделал дракон так это только развернулся вдоль оси У и потерял управление. (при отключении эффекта - управление возвращалось)

Может я чего то не понял ? Глянь пожалуйста мои настройки:



ПС: рад помочь ! :)

Мой Блог
AleksTirex  Offline  Сообщение №949 написано: 13 апреля 2014, 20:15


Архимаг


371
anton, если алиас назначаемый, то необходима галочка Optional, а также пустая позиция SpecificReference (но не уникальный актёр).

Я обычно создаю маркеры через PlaceAtMe(), потом назначаю его в алиас как и НПС/ГГ (см. выше).
 
Пакет правильно.
 
**************
В скрипте: ГГ назначен правильно, маркер не очень, т.к. не понятно, зачем назначать movablestatic, да ещё и который находится чёрт знает где, здесь лучше использовать XMarker (создаёшь и назначаешь на алиас точно так же, как и с ГГ).
Если movablestatic нужен для чего-то, то пусть будет (и имей в виду, что подвижный movablestatic не транслируется).

Добавлено (14 Апреля 2014, 00:15)
---------------------------------------------
anton, и ещё, нельзя делать генерируемые/создаваемые алиасы, если они привязаны к назначаемым алиасам. Квест не запустится, ведь объект, у которого или в котором должен сгенерироваться новый объект/алиас не существует на момент старта квеста, и он из-за этого не может создаться, и алиас, соответственно, не может заполнится.


anton  Offline  Сообщение №950 написано: 14 апреля 2014, 20:17



362
AleksTirex, исправил, но всё равно ничего не добился, кроме того, что управление вообще перестало возвращаться назад к ГГ :(
(в качестве цели у меня в форм-листе именно Хмаркер и стоит)

Добавил вывод сообщений на экран о состоянии алиасов, пакета и квеста. То по ним получается, что всё работает.
_Anton_QuestForFly.IsActive() = TRUE
_Anton_QuestForFly.IsRunning() = TRUE
_Anton_QuestForFly.GetStage() = 20 (так и надо)
_Anton_ReferenceAlias_PlayerForFly.GetActorReference() != None
_Anton_ReferenceAlias_MarkerToFly.GetReference() != None
Player.GetCurrentPackage() = _Anton_PackageOrbit

Т.е. квест запускается, его состояния меняются, цели правильно выводятся на экран. Оба референса заполняются и на ГГ появляется заданный пакет.
Но после SetPlayerAIDriven() ничего не происходит ( функция "Player.EvaluatePackage()" тоже не помогает)
А после "SetPlayerAIDriven(False)" управление больше не возвращается к ГГ, и со временем включается дкфолтная камера, вращающаяся вокруг ГГ и это состояние не сбивается ни нажатием на кнопки ни движениями мышки.

Чего то явно не хватает, но чего - понятия не имею. Пакет ведь на ГГ, так почему он не работает ?

Добавлено (15 Апреля 2014, 00:17)
---------------------------------------------
Провёл ещё один опыт. Сделал целью не ГГ а заданного НПС.
НПС телепортировался к ГГ, ему менялась раса на дракона, после чего он взлетал и начинал курсировать вокруг заданной точки.
Причём если двигать маркер в процессе полёта - ничего не меняется. Управлять таким образом не выходит.
И когда НПС в полёте, нельзя взять над ним управление консольной командой "ТС".
Камера хоть и цепляется к НПС-Дракону, но ни мышка ни кнопки на движение не влияют.
А если выполнить "ТС" до взлёта, то НПС-Драконом можно ходить, но он уже не взлетит, пока не вернуть ему управление, выполнив эту же команду ещё раз.
Вот такие дела :(


Мой Блог
nepewka  Offline  Сообщение №951 написано: 14 апреля 2014, 21:44 | Отредактировано: nepewka - 14 апреля 2014, 22:05



255
блин ,AleksTirex, почему ты мне раньше не линковал ссылки на вот такие посты http://tesall.ru/topic/6978-voprosy-po-modostroeniyu/?p=324219 ?

Это же лучше любого учебника...

Aksyonov  Offline  Сообщение №952 написано: 14 апреля 2014, 23:29



937
Цитата nepewka

блин ,AleksTirex, почему ты мне раньше не линковал ссылки на вот такие посты


Сторонняя ссылка на другой! сайт вы чего? пишите в лс такое  smile2 админы бум бум, народ всем привет кстати у меня тут вопрос где то слышал что одновременно компаньона и невесту в игре скайрим сделать нельзя так ли это ? если можно подскажите пожалуйста как!

MemoriaVetusta  Offline  Сообщение №953 написано: 15 апреля 2014, 11:20



173
Aksyonov, один НПС одновременно может являться и супругом, и компаньоном (см. Лидия).

Nothing is...
Revil  Offline  Сообщение №954 написано: 16 апреля 2014, 10:25


Evil Eye


Цитата Aksyonov

если можно подскажите пожалуйста как!

Создаешь обычного компаньона по татуриалу от кальяна, что есть в шапке темы. И добавляешь его во фракцию PotentialMarriageFaction.

LordVadim  Offline  Сообщение №955 написано: 17 апреля 2014, 17:26 | Отредактировано: LordVadim - 17 апреля 2014, 17:30



139
AleksTirex, приветствую!
Можно как то сделать, чтобы дистанционное заклинание срабатывало на НПС у которого установлено свойство Ghost?
Или как то отслеживать его попадание в НПС?

сергей007788  Offline  Сообщение №956 написано: 18 апреля 2014, 07:33 | Отредактировано: сергей007788 - 18 апреля 2014, 07:34



76
Подскажите пожалуйста, как регистрировать время, секунда или даже меньше, если это возможно?
RegisterForSingleUpdateGameTime - получается только игровой час.
Заранее благодарен.

LordVadim  Offline  Сообщение №957 написано: 18 апреля 2014, 11:49



139
Цитата сергей007788

Подскажите пожалуйста, как регистрировать время, секунда или даже меньше, если это возможно? RegisterForSingleUpdateGameTime - получается только игровой час. Заранее благодарен.


RegisterForSingleUpdateGameTime(0.00027) ;- Одна игровая секунда.
RegisterForSingleUpdate(0.1) ;- Одна десятая реальной секунды.

AleksTirex  Offline  Сообщение №958 написано: 18 апреля 2014, 12:39 | Отредактировано: AleksTirex - 18 апреля 2014, 12:45


Архимаг


371
Цитата LordVadim

AleksTirex, приветствую!  Можно как то сделать, чтобы дистанционное заклинание срабатывало на НПС у которого установлено свойство Ghost?  Или как то отслеживать его попадание в НПС?



Можно использовать возвратный принцип заклинания.

Делается алиас ГГ в своём квесте (или по другому вешается скрипт на ГГ), на него вешается скрипт.
Но сперва надо сделать свой Explosion. Он должен быть "невидимым", т.е. без визуализации, и с нужным радиусом дкйствия, чтобы радиус был не меньше предполагаемого срабатывания/расстояния от ГГ до цели, например 4000-9000.
В своём маг.эффекте заклинания против призраков добавляется этот Explosion, делается площадь (Area) срабатывания. Или в Projecticle этого маг.эффекта (делается свой Projecticle) добавляется тот свой созданный Explosion. Подойдёт любой вариант.

Explosion Property myExplosion auto  ; свой сделанный Explosion

Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
  if akSource as Explosion == myExplosion
    ObjectReference closestExplosion = Game.FindClosestReferenceOfTypeFromRef(akSource, Game.GetPlayer(), 1500.0)
    if closestExplosion
      Actor akActor = Game.FindClosestActorFromRef(closestExplosion, 50.0)
      if akActor.IsGhost()
       ; akActor - ближайший актёр*призрак к месту попадания снаряда
      endif
    endif
  endif
endEvent

**********************************
1500.0 - радиус обнаружения взрыва, т.е. максимальное расстояние от ГГ до цели, оно равно (<=) радиусу/размеру Explosion.
50.0 - радиус поиска ближайшего актёра от центра взрыва, настраивается по желанию.
***********************************

Принцип работы: при касте заклинания на цель Projecticle сработает/врежится в НПС, даже если тот Ghost, произойдёт взрыв и этот взрыв отработает на ГГ (событие OnHit()). Этим событием определим место взрыва, и найдём ближайшего актёра в точке взрыва. На поиск актёра не повлияют ни его состояние, ни какие другие факторы. Далее... уже то, что придумает автор что именно делать с этим найденным актёром.

nepewka  Offline  Сообщение №959 написано: 18 апреля 2014, 13:57 | Отредактировано: nepewka - 18 апреля 2014, 14:01



255
AleksTirex, нашел способ как можно использовать эвент onSpellCast в activemagiceffect

Создаем формлист, добавляем туда необходимые спеллы, при касте которых собственно и сработает данный эвент
Для этого создаем пассивную способность с Effect Archetype Script

FormList Property aaaFormlist Auto
Spell Property Fireball Auto

Event onSpellCast(Form akSpell)
if aaaFormlist.hasForm(akSpell)
Utility.wait(1.0)
Fireball.cast(getTargetActor(), None)
endif
EndEvent

; Но беспокоит меня если честно другое! А именно невозможность динамичного добавления перка таргет НПЦ. Даже и не знаю, есть ли какой то выход в ситуации или обход?

Вот думаю попробовать в магическом эффекте
event onEffectStart

akActor.additem Anyitem

endevent

Где Anyitem - итем, к которому прицеплен другой скрипт

Perk Property NashPerk Auto

event OnItemAdded

akActor.addperk(NashPerk)

endevent

Как думаешь, поможет?

LordVadim  Offline  Сообщение №960 написано: 18 апреля 2014, 15:01



139
Цитата AleksTirex

При касте заклинания на цель Projecticle сработает/врежится в НПС, даже если тот Ghost.


AleksTirex,  Projecticle пролетает призрака насквозь и летит далее не срабатывая. Может надо какие то опции в Projecticle или в Explosion отметить? 
Если направить на землю возле ног НПС - срабатывает и OnHit() отрабатывается.

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





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