Перейти к содержанию

Рекомендуемые сообщения

Опубликовано
09.12.2017 21:22:41, mr Jygalag сказал(-а):

Вопрос - я не могу брать значение/тип призываемого существа, а затем передавать это значение в заклинание? Т.е я использую какое-нибудь заклинание изгнания, а тип изгнанного существа передаётся в призыва (изгоняю какого-нибудь дремора, а затем этого же дремора специальным заклинанием призываю; далее изгоняю огненного атронаха - и в место дремора вызываю уже огненного атронаха).
И ещё - кто разъяснит, как работает этот скрипт (не в плане, что делает в результате своего действия, а именно как он работает)?

Вот он:
Actor CloneTarget
Actor TargetEff
Event onEffectStart(Actor Target, Actor Caster)
TargetEff = Target
ObjectReference Clone = TargetEff.PlaceAtMe(TargetEff.GetActorBase(), 1, false, true)
CloneTarget = Clone as Actor
CloneTarget.Enable()
CloneTarget.StartCombat(CloneTarget)
RegisterForSingleUpdate(5)
EndEvent
Event onUpdate()
TargetEff.PushActorAway(CloneTarget, 10)
CloneTarget.Kill()
Utility.Wait(3)
CloneTarget.Disable()
CloneTarget.Delete()
EndEvent
Ну почему нет? Есть 2 способа: как я это делаю и более оптимальный с точки зрения ресурсов системы. Первый способ состоит в том, что ты создаешь квест с пустым элиасом типа ForcedReference (должен быть Optional и Allow Reserved). При касте изгнания (что бы это не значило, я хз в магии скайрима), ты проверяешь, что квест не запущен, а если запущен, то завершаешь его. Как только изгоняется твой нпс (target заклинания), ты запускаешь квест и подхватываешь этот таргет в элиас квеста. Затем в скрипт-фрагменте призыва вытягиваешь ActorBase из того элиаса и спаунишь копию актера.

Второй способ, более правильный с точки зрения программирования, состоит в том, что ты в своем скрипте призыва кастуешь скрипт изгнания на какой-нибудь скрипт-обьнкт (проперти твое) и проверяешь, что тот действительно скастовался, т.е. тот скрипт подхвачен из этого скрипта призыва. Затем просто можешь обратиться к изгнанию напрямую и запросить его проперти актера, которого и нужно спаунить в призыве.

Как-то так. А скрипт, что ты привел, — это детский лепет, он работает только сам с собой, с другими скриптами он не общается.


Update. Черт. CastAs() и GetPropertyValue(), как и класс script object похоже, добавили только в фоллауте. Тогда второй красивый вариант отпадает. Через квест. Все через квест.
  • Ответов 840
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано

Можно и без квестов обойтись - записывать "изгоняемых" в формлист с одной записью, например.

А потом из этого формлиста их брать как цель для призыва.

Опубликовано (изменено)
10.12.2017 11:37:15, werr сказал(-а):

Как-то так. А скрипт, что ты привел, он работает только сам с собой, с другими скриптами он не общается.

Я разобрался вроде... Правильно понимаю, что его (сам скрипт) надо вешать на магический эффект? Изменено пользователем mr Jygalag
Опубликовано
Вариант с формлистом тоже хорош. В общем-то, поскольку, как мы выяснили, напрямую запросить скрипт нельзя, тебе нужно просто хранить указатель на актера где-то, пока он либо не появится, либо не перестанет быть актуальным. А в какой валюте это делать - вопрос предпочтений. Единственное что, если берешься работать с Formlist, следи за индексами. Чтоб не было такого, что ты все время раздуваешь лист (его объем конечен) и путаешь, к какому элементу массива тебе обращаться. В общем, везде можно ошибиться, смотри внимательно.
  • Нравится 1
Опубликовано

Появился такой вопрос: как вызвать пользовательскую функцию из другого скрипта? 

Пример: есть скрипт "А", с функцией "fun". Как вызвать fun в скрипте "В"

Опубликовано (изменено)

Здравствуйте. И у меня  пара странных вопросов:

1. Что выполняется быстрее (либо оказывает наименьшую нагрузку на скриптовый движок):  цикл, перебирающий массив из N - элементов, или же N конструкции elseif, следующих друг за другом?  

2. Практический у всех игровых предметов есть ключевые слова. Допустим, мне нужно проверить два ключевых слова: "ArmorMaterialSteel" и "WeapMaterialSteel" - можно ли использовать маску чтобы вместо двух ключей написать один, типа "*Steel "?  

Изменено пользователем =D=
Опубликовано

1. Чего не знаю, того не знаю.

Знаю только, что game.getplayer выполняется медленнее, чем игрок, заданный через Property или напрямую в скрипте =)

2. Сомневаюсь.

  • Нравится 1
Опубликовано

Здравствуйте! И у меня снова вопрос: Есть ли в папирусе команда завершающая работу скрипта/функции? Что нибудь, на подобие break() или, хотя бы, goto()?

К примеру: Выполняется функция доходит, до условия, если условие истинно - сразу же завершает работу функции, если ложно - продолжает дальше свою работу. 

Опубликовано
21.12.2017 11:37:28, =D= сказал(-а):

Здравствуйте! И у меня снова вопрос: Есть ли в папирусе команда завершающая работу скрипта/функции? Что нибудь, на подобие break() или, хотя бы, goto()?

К примеру: Выполняется функция доходит, до условия, если условие истинно - сразу же завершает работу функции, если ложно - продолжает дальше свою работу. 

return

  • Нравится 1
  • 2 недели спустя...
Опубликовано
05.01.2018 10:14:56, lolxeycoc сказал(-а):

Когда я хочу создать новый скрипт пишет это, papyrus errors Unknown user flag Hidden No output generated for aateleport , compliation falied!

Да, все так. А в чем вопрос?

 

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

Опубликовано (изменено)

Вообще как-то можно. Через смену состояния анимации или еще как.

На самый крайний случай в стартовом квесте должна быть квестовая стадия отдельная для этого прописана - можно к ней "привязаться".

Изменено пользователем Azazellz
  • 1 месяц спустя...
Опубликовано
05.01.2018 10:14:56, lolxeycoc сказал(-а):

Когда я хочу создать новый скрипт пишет это, papyrus errors Unknown user flag Hidden No output generated for aateleport , compliation falied!

 

Та же проблема. Все обыскал, нигде не нашел этот "Hidden". Может я как-то не правильно что-то установил: Skyrim и Creation Kit из Steam, скрипт прописал по видео-туториалу gkalian (создание квеста часть 2).

Опубликовано
23.02.2018 08:22:39, YourBunnyWrote сказал(-а):

Код покажи.

 

Код на изменение стадии квеста в диалоге:

 

GetOwningQuest().SetObjectiveDisplayed(10)
GetOwningQuest().SetStage(10)

 

Ошибка:

 

Starting 1 compile threads for 1 files...
Compiling "TIF__01000D6D"...
<unknown>(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\TIF__01000D6D.psc(3,0): Unknown user flag Hidden
No output generated for TIF__01000D6D, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on TIF__01000D6D

Опубликовано
23.02.2018 10:43:17, werr сказал(-а):

Ну так компилятору нужен файл TESV_Papyrus_Flags.flg для работы. Он лежит в архиве с исходниками скриптов.

 

С ума сойти, как просто. Мне даже стыдно.

 

Спасибо.

Опубликовано (изменено)

Добрый день.

При попытке компиляции скрипта запуска сцены в диалоге:

AAAQuestOxbow01Scene.Start()

Выдает ошибку:

Спойлер

Starting 1 compile threads for 1 files...
Compiling "TIF__01004E9B"...
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\AAAQuestOxbow01Scene.psc(3,15): cannot name a variable or property the same as a known type or script
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\TIF__01004E9B.psc(9,21): Start is not a function or does not exist
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\TIF__01004E9B.psc(9,21): cannot call the member function Start alone or on a type, must call it on a variable
No output generated for TIF__01004E9B, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on TIF__01004E9B

Сцену делал по этому туториалу:

Изменено пользователем Oxbow

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

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

Создать аккаунт

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

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

Войти

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

Войти
×
×
  • Создать...