AnvilBay Forum
Мастерская TES => Обсуждение программ => Программы для работы со скриптами => Тема начата: UNREAL от 12 Февраля 2012, 02:34
-
Вот интересно можно в Папирусе так же выбирать нужного РЕФактера скриптом,
перебором или как? И заносить выбранных в квестовые списки (Всегда в памяти игры в какой бы локации игрок не находился)...
Кто-нибудь разобрался уже ?
-
(http://jpegshare.net/thumbs/f7/4d/f74d4739bc0ca77b72bb9b3485ff4f57.jpg) (http://jpegshare.net/f7/4d/f74d4739bc0ca77b72bb9b3485ff4f57.jpg.html)
Не получается с перемнными ничего ( по статье ) Смотреть внизу консоли.
Должно быть:
--- Papyrus ---------------------
HelloWorldScript:
Script state = ""
count = 0
Вот скрипт:
Scriptname HelloWorldScript extends ObjectReference
{It's my first script.}
Event OnActivate(ObjectReference AkActionRef)
int count
count = count+1
Debug.MessageBox("Hello, world!")
endEvent
-
А что не получается то?
А, понял. У тебя скрипта нету на камне.
Вон, нижняя надпись сообщения "Не присоединен скрипт"
-
Странно, он вроде бы есть и работает при активации камня. Или под присоединении скрипта другое подразумевается? там в общем он должен показать переменные она вроде задана, но в игре не показывает.
-
Сорь, не знаю как присоединен, но я тебе просто перевел последнюю строчку в консоли:
Вот эту: "No papirus script attach" - не присоединен скрипт
Проверь ещё раз стек папирус для этого камня.
-
В Reference объекта в вкладке Script скрипт есть. И написан он вроде правильно ( по этому (http://wiki.anvilbay.ru/index.php/Bethesda_Tutorial_Papyrus_Variables_and_Conditionals) туториалу ).
UPD.Всем спасибо понял в чем дело. Не туда записал переменную
-
Как раз буду учиться на своем новом доме. Спасибо.
-
В Reference объекта в вкладке Script скрипт есть. И написан он вроде правильно ( по этому (http://wiki.anvilbay.ru/index.php/Bethesda_Tutorial_Papyrus_Variables_and_Conditionals) туториалу ).
UPD.Всем спасибо понял в чем дело. Не туда записал переменную
А! Точно!
У тя получилось что переменная объявлена в событии.
Event OnActivate(ObjectReference AkActionRef)
int count
-
Ага. Кстати я так понял, что переменной скрипта можно задать любое значение до события или чего-то другого?
Просто например до события написать:
int count
count = 10
?
И еще. У каждого скрипта свои переменные? И переменные из других скриптов можно вытащить в другой?
-
х.з. ка тут, но в обловских до события только объявлялись переменные. Задавались уже только в блоках.
[hide]
ScriptName TkTransportSummonScript
Ref TkTransport
.....
Begin ScriptEffectFinish
Set TkTransport to bcDecoratorAssistantRef17
[/hide]
-
И еще. У каждого скрипта свои переменные? И переменные из других скриптов можно вытащить в другой?
Используйте глобальные переменные (Miscelanous - Global), чтобы использовать их в разных скриптах. И да, не забудьте прописать глобальную переменную в пропертиесы.
Например
Это прописать после названия скрипта
GlobalVariable Property "названиепеременнойбезкавычек" Auto
РВ, по ссылке на Вики то же самое, что в туторе от IgorLutiy?
Да, это перевод одной и тойже статьи.
-
Рызор, как понял, уже разобрался что к чему тут.
Можешь для темных объяснить ЧТО это и ЗАЧЕМ это?
GlobalVariable Property "названиепеременнойбезкавычек" Auto
Я пытался в переводе промта разобраться, но нифига не понял.
-
Рызор, как понял, уже разобрался что к чему тут.
Можешь для темных объяснить ЧТО это и ЗАЧЕМ это?
GlobalVariable Property "названиепеременнойбезкавычек" Auto
Я пытался в переводе промта разобраться, но нифига не понял.
Для того, чтобы использовать глобальную переменную, нужно ее прописать этой строчкой. Иначе скрипт ее не увидит.
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
-
Для того, чтобы использовать глобальную переменную, нужно ее прописать этой строчкой. Иначе скрипт ее не увидит.
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
Нет, я не про то. Что для использования переменной её надо объявить это понятно.
Для этого пишем GlobalVariable Property "названиепеременнойбезкавычек" Auto
Мне непонятны вот это: Property и Auto
Зачем это?
В обле просто писали для объявления тип переменной и её название. То есть вот так примерно:
ref "имяпеременнойбезкавычек"
А тут очередные танцы афедроном, блин.
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
Это они крута придумали, мля, риальна простой путь - вместо того чтобы в скрипте по месту прописать строчку - тыкать в десяток окон, проматывать пару списков. Интересно какой... это придумал, и чем он руководствовался
-
х.з. ка тут, но в обловских до события только объявлялись переменные. Задавались уже только в блоках.
[hide]
ScriptName TkTransportSummonScript
Ref TkTransport
.....
Begin ScriptEffectFinish
Set TkTransport to bcDecoratorAssistantRef17
[/hide]
Объявлять можно было и в исполнительном блоке (ОБСЕ), главное до использования
==============
Кстати , а для рефов есть глобальные переменные? Или только числа,
Или кто-нить делал уже псевдоквест с ними, можно ли через глоб-квест переменные, обращаться
к этим рефам из любого скрипта, как это было в Обливионе?
-
Нет, я не про то. Что для использования переменной её надо объявить это понятно.
Для этого пишем GlobalVariable Property "названиепеременнойбезкавычек" Auto
Мне непонятны вот это: Property и Auto
Зачем это?
В обле просто писали для объявления тип переменной и её название. То есть вот так примерно:
ref "имяпеременнойбезкавычек"
А тут очередные танцы афедроном, блин.
Это они крута придумали, мля, риальна простой путь - вместо того чтобы в скрипте по месту прописать строчку - тыкать в десяток окон, проматывать пару списков. Интересно какой... это придумал, и чем он руководствовался
Это синтаксис такой. Так надо.
Таким образом прописываются внешние переменные, рефы и прочие. Внутренние переменные описываются типа
int count и т.п.
И да, постарайтесь забыть про обливион, когда скриптуете скайрим.
-
Рызор Спасип. Непонятно, но ясно.
Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!!
* Scriptname HelloWorldScript extends ObjectReference: а тут и само название скрипта, который расширяет наш скрипт. В данном случае используется скрипт под названием "ObjectReference"
Расширение скриптов
Практически все скрипты, которые вы напишете, нужно будет "расширять" другим скриптом. Когда вы расширяете скрипт, вы как-бы говорите, "Мой скрипт в общем такой же, как и тот скрипт, но я добавил в него дополнительные вещи.
Ахринеть! То есть начинать надо с досконального изучения всех " Form Hidden" скриптов?!! Мля, это уже за гранью добра и зла просто!
Не-ееет, беседковцы точно... сказал бы, да забанят ведь. Короче без знания аглицкого тут труба. Вот уроды, а.
-
Это напоминает мне модули например в том же паскале.
Где что бы работать с цветом, координатами и тд нужно было добавить строку:
uses crt;
Не обязательно изучать все, главное знать то, что понадобится именно тебе.
-
Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!!
Вообще то это называется наследование, пришло из ООП и очень удобная штука.
Практически все скрипты, которые вы напишете, нужно будет "расширять" другим скриптом.
Скрипты, которые вы пишете РАСШИРЯЮТ другой, уже существующий скрипт. Это означает что все свойства и функции скрипта, который мы наследуем (после ключевого слова extends) будут доступны и в нашей функции.
-
Молчаливый Бе
Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!! - это относилось к вот этому
"Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной."
___
Я не спорю, что наследование удобная штука, но есть одно мааахонькое условие - когда знаешь тот самый "уже существующий скрипт" и "все свойства и функции скрипта".
Если вы знаете английский, вы разберетесь конечно, там в конце концов есть пояснения в скрипте, и дальше методом тыка в туторы... в общем можно.
Мне же, лично, остаётся только по переведенным туторам создавать "Хилло ворд" и радоваться. Ну и ждать пока года через два появится детальный разбор этих самых "уже существующих" основных.
______
Хотя можно ведь и не пользоваться наследованием, писать своё с нуля, но один фиг... короче чем дальше в лес, тем больше ну его нафиг.
-
А что, без наследования можно было взять и все написать, без знания функций?
-
А что, без наследования можно было взять и все написать, без знания функций?
Нет, но дело в том, что в обле эти функции можно было разобрать сравнивая два, три, четыре скрипта.
Здесь же вот тебе ссылка на тот же ObjectReference (самая частая, насколько я вижу), и без знания что в этом самом ObjectReference разбирать скрипт бессмысленно!
А разобрать его без знания английского я, лично, не смогу.
Пример из облы
ScriptName HelloWorld
Begin OnActivate
Message "Hello World!", 10
End
Просто, понятно: Активация - сообщение.
Пример скайрима
Scriptname HelloWorldScript extends ObjectReference
{This is my very first script!}
Event OnActivate(ObjectReference akActionRef)
Debug.MessageBox("Hello, World!")
endEvent
Вот положа лапу на сердце, НА ХРЕНА ТУТ extends ObjectReference ?! Вот сижу и гадаю, что такого тут наследуется.
-
1 - как отслеживать повышение того или иного навыка? чтобы при повышении навыка совершалось какое то действие.
2 - можно ли сделать, чтобы игра с самого начала отслеживала, например, количество использования того или иного заклинания? в принципе, количество использования, как я понимаю, можно засунуть в глобальную переменную, а вот как лучше сделать это?
-
@ТемныйКот:
Ну я так понимаю скрипт "HelloWorldScript" получает доступ к событию "OnActivate" и ему подобным, которое есть в глобальном скрипте "ObjectReference", а мы потом описываем это событие как нам надо.
-
@ТемныйКот:
Ну я так понимаю скрипт "HelloWorldScript" получает доступ к событию "OnActivate" и ему подобным, которое есть в глобальном скрипте "ObjectReference", а мы потом описываем это событие как нам надо.
Во-оот! Первая мысля была такая же. Но, вот что есть в ObjectReference
Event OnActivate(ObjectReference akActionRef)
EndEvent
Для сравнения строка в HelloWorldScript
Event OnActivate(ObjectReference akActionRef)
Debug.MessageBox("Hello, World!")
endEvent
Вопрос: Ну, и зачем это дублирование?
Правда в пояснениях может быть объяснение ЗАЧЕМ, но увы, они на английском.
И так везде, куда не ткнись.
****
Идем дальше, стираем вообще эту строчку extends ObjectReference, то есть вот что получаем
Scriptname TkNewscript
{Первая проба}
Event OnActivate(ObjectReference akActionRef)
Debug.MessageBox("Открываем комод в который раз!")
endEvent
Итог, все работает и без неё
(http://jpegshare.net/thumbs/8c/84/8c84e2527b2aa6ab682ffd046d0052bb.jpg) (http://jpegshare.net/8c/84/8c84e2527b2aa6ab682ffd046d0052bb.jpg.html)
Здорово, правда?
А самое замечательное, что эта строка в скрипт прописывается "по умолчанию" при создании скрипта. Ве-се-ло.
-
То что без той строчки работает - это точно странно !
В туториале пишут, что эта строка показывает связь нашего скрипта со скриптами движка, которые написала Бесезда.
И если мы хотим взаимодействовать со встроенными переменными и методами(функциями) обьектов игры, то надо указать с каким типом обьекта мы работаем. Как то так.
-
Вопрос такой
(ObjectReference akActionRef)
Вот эти штуки - объекты синтаксиса, или их можно дальше уже использовать ,
т.е. не объявлять дополнительные ссылки на объекты (то что активировали и то кто активировал)
к примеру:
по какому -то условию akActionRef получает плюшку...
-
UNREAL Вот тут в четвертом туторе беседки написано
Instead, we'll ensure that the resurrection only occurs when the triggerbox sends the activation. We'll do this by creating another property - an Object Reference this time - which we'll assign to our trigger.
We'll compare this new property to "akActionRef", the parameter supplied by the OnActivate() event. This parameter is a sort of special variable, usable only within this onActivate event, which Papyrus automatically assigns to the reference responsible for the activation.
Промто-перевевод
Вместо этого, мы будем гарантировать, что воскресение происходит только при triggerbox посылает активации. Мы сделаем это, создав еще одно свойство - ссылка на объект, на этот раз - что мы назначим на наш спуск.
Мы сравним это новое свойство "akActionRef", параметр поставляется OnActivate () событие. Этот параметр является своего рода специальная переменная, пригодный для использования только в этом onActivate событие, которое папирус автоматически присваивает ссылку ответственным за активацию.
Скрипт из тутора
scriptName LokirsDraugrResurrection extends Actor
{This Script lives on the dead minion draugr in Lokir's Tomb. It handles their resurrection}
Spell property reanimateSpell Auto ; this is the special self-resurrection spell to use
objectReference property myTrigger auto; This is the reference we are waiting on to send an activate
Event OnActivate(ObjectReference akActionRef)
; I've been activated - see if was my trigger
if (akActionRef == myTrigger)
; Cast a Reanimate spell on the Draugr
reanimateSpell.Cast(Self, Self)
EndIf
EndEvent
-
Спасибо , я так и подумал...
Токо непонятно нафига так...Впрочем, это наверное гарантия от вылетов, которые были,
например с ссылкой на реф, который хранится несколько(или один) фреймов в памяти.
-
UNREAL, возможно. Хотя как то это...
Ну да шут их знает. Подождем адекватного перевода всей статьи, может понятней будет.
Мне вот этот скрипт ObjectReference покоя не даёт. Нафига на него ссылка, если точь в точь события описываются в скрипте "потомке"?
То есть получается дублирование. Нафига это нужно, непонятно. К тому же чем дальше в лес...
Тут scriptName LokirsDraugrResurrection extends Actor
А событие тоже Event OnActivate(ObjectReference akActionRef)
как и в скрипте HelloWorldScript.
-
может кто объяснить этот скрипт?
;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment
;NEXT FRAGMENT INDEX 1
Scriptname TIF__000E4D6A Extends TopicInfo Hidden
;BEGIN FRAGMENT Fragment_0
Function Fragment_0(ObjectReference akSpeakerRef)
Actor akSpeaker = akSpeakerRef as Actor
;BEGIN CODE
getowningquest().setstage(200)
;END CODE
EndFunction
;END FRAGMENT
;END FRAGMENT CODE - Do not edit anything between this and the begin comment
этот скрипт привязан к диалогу с Аврузой Сарети (AvrusaSarethi), а именно - к топику "NN01AvrusaCompleteBranchTopic01"
если принести ей 30 [span style='color:#000000;background:#000000']алых корней нирна[/span], то завершается квест про эти самые корни. так вот, я не могу понять, где же указывается в скрипте этот квест...
или все наоборот, в квесте указывается этот скрипт?
-
Вот положа лапу на сердце, НА ХРЕНА ТУТ extends ObjectReference ?! Вот сижу и гадаю, что такого тут наследуется.
То что без той строчки работает - это точно странно !
В туториале пишут, что эта строка показывает связь нашего скрипта со скриптами движка, которые написала Бесезда.
Объясню про наследование.
Пример с 'hello world' отлично работает без наследования ObjectReference, потому что никаких действий с активатором мы не совершаем.
А если нам понадобится написать нечто существенное? Вот тогда нам нужно наследовать ObjectReference (или другой базовый скрипт), потому что функции, которые мы можем совершить с объектом определены именно в нем. Притом игра уже знает с каким объектом ей нужно работать, мы не передаем никаких идентификаторов. В том же ObjectReference определены все события, которая игра может передать вашему объекту, и которые вы можете обработать.
Теперь это так, потому что Papyrus объектно-ориентированный язык (и это, на самом деле, удобно).
Обалдуй
В скрипте есть getowningquest().setstage(200). Вот getowningquest() и возвращает Квест, который относится к топику NN01AvrusaCompleteBranchTopic01.
-
...
А если нам понадобится написать нечто существенное? Вот тогда нам нужно наследовать ObjectReference (или другой базовый скрипт)...
Вот и интересно, как определить какой из "базовых скриптов" должен наследоваться?
-
NAVYgator, ну... находишь все базовые скрипты, разбираешь их досконально, чтобы знать ЧТО там лежит, и вперёд!
-
Еще раз, читайте документацию. Там ясно написано - почти каждому типу объектов в игре есть соответствующий скриптовый объект. Нужен скрипт для книги? Наследуй book. Нужен для доспехов - armor.
-
Объясню про наследование.
Пример с 'hello world' отлично работает без наследования ObjectReference, потому что никаких действий с активатором мы не совершаем.
А если нам понадобится написать нечто существенное? Вот тогда нам нужно наследовать ObjectReference (или другой базовый скрипт), потому что функции, которые мы можем совершить с объектом определены именно в нем.
Все равно он долго в памяти не хранится и подходит к инструкции за один цикл,
если обращение из квеста? Т.е. все равно его придется делать персистентным и обращатся через этот указатель, другими словами на один раз оно не надо, а много раз из других скриптов нужно делать другим путем...
-
Молчаливый Бе
Да? Пожалуйста - скрипт висит на мече, добавляет перк, наследует... угадайте... правильно Scriptname SilverSwordScript extends ObjectReference
Кстати, знаете как выглядит скрипт Ammo?
Приведу его полностью:
Scriptname Ammo extends Form Hidden
Без балды, очень содержательный скрипт. Все описывает.
А почему сразу нельзя к Form?
-
Да? Пожалуйста - скрипт висит на мече, добавляет перк, наследует... угадайте... правильно Scriptname SilverSwordScript extends ObjectReference
Можешь убрать extends ObjectReference и ничего не изменится, потому что определенных в ObjectReference функций скрипт не использует.
ObjectReference используется на большинстве объектов, так как в основном мы и оперируем референсами объектов и логично наследовать именно его.
если обращение из квеста?
Обращаясь из скрипта, который висит на квесте, да вообще откуда угодно, ты получаешь тот же ObjectReference со всеми его функциями и свойствами.
Вы для интересу не копались в скриптах? Вот вам пример:
1. берем стандарный скрипт actor который мы получаем обращаесь к любому актору, в том числе и игроку.
2. Дописываем туда следующее
string Function makeMeHappy()
return "You Are Happy"
endFunction
3. Пишем тестовый скрипт как в туториале hello world только со следующим содержанием.
Event OnActivate(ObjectReference akActionRef)
Debug.MessageBox(Game.GetPlayer().makeMeHappy())
endEvent
4. Вешаем его на активатор и тестим в игре. Получим сообщение с текстом "You are happy".
Наталкивает на раздумья зачем нужны эти скриптовые объекты, и почему иногда встречаются такие пустые скрипты как ammo или weapon?
-
Вы для интересу не копались в скриптах? Вот вам пример:
Для интересу копались. Что возвращает к
Я не спорю, что наследование удобная штука, но есть одно мааахонькое условие - когда знаешь тот самый "уже существующий скрипт" и "все свойства и функции скрипта".
Если вы знаете английский, вы разберетесь конечно,..
Вот мне сейчас понадобилось добавить шейдер к вещи. Просто чтобы она лежала и светилась.
Итог... нашел скрипт EffectShader, там функции описаны, судя по виду то что надо.
Обрадовался, дай-ка думаю, посмотрю как тут сделано... запустил поиск в этой папке скриптов файлов с словами extends EffectShader...
Нету таких файлов! Как хочешь, так и понимай. То ли на этот скрипт EffectShader ссылаются через три пустышки, то ли просто нет в игре ссылающихся на него скриптов вообще, а скрипт EffectShader лежит типа на всякий случай, типа "вот тебе неизвестный модер наш подарок".
з.ы. Песец. Простейшую строчку
Begin ScriptEffectStart;
PlayMagicShaderVisuals, effectReanimate, 10; проигрываем шейдер
end
Не могу написать. А когда то казалось, что в обле скрипты сложные
-
Хреновая новость (может она уже была)
теперь нельзя из скрипта выбирать (например конкретного актера или вещь по постоянному ИД рендерного окна ) , а надо из списка КС...
http://rumor.ru/wiki/Skyrim_CK%3AИдентифик...в_языке_Papyrus (http://rumor.ru/wiki/Skyrim_CK%3AИдентификаторы_EditorID_в_языке_Papyrus)
Теперь даже не могу представить как создать списки нужных актеров в игре,
по действию скрипта и сделать с ними что-то (например заставить играть анимацию выбранных актеров)
-
UNREAL, можно. Только через задний проход.
В Property скрипта выбираешь переменную типа ObjectReference для каждого актера.
Потом в скрипте уже обращаешься именно к этой переменной. Примерно так:
Scriptname ActorsScript extends ObjectReference
ObjectReference Property Actor01 Auto
ObjectReference Property Actor02 Auto
гемороя масса канешн, но работает. Я счас сундуки так забивал 5 штук. Реально зае.... локи загружать с этими сундуками. Потому что значения переменных в самом скрипте прописать низзя. Млять, эта разрабы хорошо придумали. Грамотно.
Единственно плюс, что один скрипт получается. Но как позабиваешь на каждый сундук переменные... так уже и ну его нафиг, лучше бы уж несколько скриптов написал, в пятеро быстрее было бы.
з.ы. подумал счас... можно было и прописать вроде, тогда как раз пять скриптов получилось бы. В общем разбираться надо.
-
Такая проблема
Написал скрипт, повесил его на меч (Form ID)
Скрипт в игре не работает, но по showvars отображается
[hide]
Scriptname Arcania_script_WeapBonus_Imperial extends ObjectReference
Perk Property AddedPerk auto
Event OnEquipped(Actor akActor)
Debug.MessageBox("TEST MESSAGE")
akActor.AddPerk(AddedPerk)
EndEvent
Event OnUnEquipped(Actor akActor)
akActor.RemovePerk(AddedPerk)
EndEvent
[/hide]
Так вот, одеваю в инвентаре меч - ничего не происходит. Даже тестовое сообщение не выводит.
-
ничего не происходит. Даже тестовое сообщение не выводит.
Вот сравнение твоего Event и Event из рабочего скрипта другого мода
[hide]
Scriptname Arcania_script_WeapBonus_Imperial extends ObjectReference
Perk Property AddedPerk auto
Event OnEquipped(Actor akActor)
Debug.MessageBox("TEST MESSAGE")
akActor.AddPerk(AddedPerk)
EndEvent
Perk Property DA11Cannibalism Auto
Event OnEquipped(Actor akActor)
If akActor == Game.GetPlayer()
Game.GetPlayer().AddPerk(DA11Cannibalism )
EndIf
EndEvent
[/hide]
-
Хм... вот мой, рабочий
Scriptname TkRingFriflyScript extends ObjectReference
Perk Property TkRingPerk Auto
Event OnEquipped(Actor akActor)
akActor.AddPerk(TkRingPerk)
EndEvent
Event OnUnEquipped(Actor akActor)
akActor.RemovePerk(TkRingPerk)
EndEvent
Дело походу не в скрипте, а в перке.
з.ы. Хотя стоп... тогда бы мессага появлялась.
-
Честно говоря, не вижу принципиальной разницы. Просто прикручена проверка того, что актер - игрок. Интересно другое - по событию OnActivate - все работает. В общем, непонятно :(
Хм... вот мой, рабочий
Дело походу не в скрипте, а в перке.
з.ы. Хотя стоп... тогда бы мессага появлялась.
Да, вот для этого я ее и прикрутил.
UPD.
Проблема решилась на удивление тупо.
Если выкинуть предмет из инвентаря, а затем подобрать - все работает безупречно.
Честно говоря, это не радует - нигде не описанный косяк. А сколько их еще впереди...
-
Erik, м-да... было бы смешно... не будь это так грустно.
Народ, плиз, кто квесты юзал, как сделать квест, что бы сразу при входе в игру запускался скрипт
if (TkMg.SetStage(200))
Debug.Trace("Side quest successfully set to stage 200!")
endIf
-
Попытался сделать скрипт по тутору, при создании нового скрипта выдает такую ошибку.
(http://jpegshare.net/thumbs/cf/ee/cfee6ea53454d13097686f5528accc1c.jpg) (http://jpegshare.net/cf/ee/cfee6ea53454d13097686f5528accc1c.jpg.html)
-
Попытался сделать скрипт по тутору, при создании нового скрипта выдает такую ошибку.
(http://jpegshare.net/thumbs/cf/ee/cfee6ea53454d13097686f5528accc1c.jpg) (http://jpegshare.net/cf/ee/cfee6ea53454d13097686f5528accc1c.jpg.html)
Где лежит папка со стимом?
Возможно просто тупо нет прав на создание новых файлов. Система защищает.
Попробуй запустить редактор от лица администратора (С екзешника, что в корне папки скайрима) и снова создать новый скрипт. Если ошибки не выдаст, то точно прав на создание не было.
-
не помогло. Видно не судьба делать плагины)
-
Народ, нашел тут в туторе Skyrim_CK: События (http://rumor.ru/wiki/Skyrim_CK:%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F), если верить ему, то GameMode в Папирусе работает?
Просто нигде в других туториалах это не отражено. Если кто разобрался, скиньте ссыль как сделать чтобы функция Исполнялась в каждом фрейме, когда игра не находится в меню
-
Честно говоря, нигде в официальной вики не нашел ни того списка событий, который дан на страничке румора ни упоминания о событии gameMode (и его использования).
Насколько я понял, можно добавить игроку квест, на котором будет скрипт.
В скрипте в событии onInit (http://www.creationkit.com/OnInit) вызывается функция RegisterForUpdate (http://www.creationkit.com/RegisterForUpdate_(Papyrus))(число_секунд) например, чтоб каждые 5 секунд проверялось.
В событии onUpdate (http://www.creationkit.com/OnUpdate_(Papyrus)) выполняется нужный код.
-
Молчаливый Бе, собственно и я о том же. Хотя описания событий кроме GameMode и MenuMode вроде корректны.
Вот только описания замены GameMode (Исполняется в каждом фрейме, когда игра не находится в меню), вообще нигде нет. А ведь как то это реализовано в папирусе.
-
Постом выше написал вариант.
З.ы. Не в обиду руморцам, но уже несколько раз замечал там некорректный перевод, который вводит в заблуждение.
-
Постом выше написал вариант.
З.ы. Не в обиду руморцам, но уже несколько раз замечал там некорректный перевод, который вводит в заблуждение.
Сорь, не заметил что пост обновлен. Спасибо, попробую.
Сейчас повнимательней посмотрел статью румора, там некоторых событий не хватает(того же OnInit, OnUpdate), а учитывая ещё и некорректность описания GameMode (для проверки запустил в папке скриптов поиск файлов по GameMode, ни одного совпадения), доверие она вызывать перестала.
Жаль, ничего подобного я на русском не видел, а хорошая шпаргалка была бы.
Надеюсь модераторы румор поправят.
-
З.ы. Не в обиду руморцам, но уже несколько раз замечал там некорректный перевод, который вводит в заблуждение.
Не в обиду неруморовцам - наша ВИКИ открытая, любой желающий может зарегистрироваться и исправить то, что нужно. Беда правда в том, что говорят многие, а суть да дело... Это я в общем, не в чью-то конкретно сторону.
Ошибки и неточности будут всегда, так устроен человек. И чем больше он производит материала, тем выше риск таких ошибок. Мне в моих туторах неоднократно указывали на неточности, которые я исправлял и у себя на сайте и на ВИКИ.
Надеюсь модераторы румор поправят.
Обязательно поправят.
-
Думаю, очень пригодится тем, кто всерьез занялся изучением Papyrus
Visual Papyrus Reference (http://skyrim.nexusmods.com/downloads/file.php?id=13430)
P.S. - за ссылку говорим спасибо NAVYgator (http://forum.anvilbay.ru/index.php?showuser=1584)
-
Преуспел ли кто-нибудь в написании скриптов? Интересует простейший скрипт на enable/disable объекта в зависимости от времени суток и при нажатии на кнопку.
Проблема:
Создал скрипт, который висит на активаторе. При активации одна модель исчезает, другая появляется. Скрипт работал.
Понадобилось сделать аналгоичный скрипт, но относящийся к другим референсам. Создал новый скрипт, скопипастил туда содержание первого, заменил названия ссылок и прочее, убрал мессаджбоксы.
При активации нового активатора пропадает сам активатор.
Но этого мало. Первый скрипт перестал работать и тоже приводит к исчезновению активатора вместо нужного референса.
-
Не подскажете скрипт для мгновенного перемещения определенного NPC к игроку (через заклинание)?
-
Скриптос вот.
Scriptname aaaRazzeScriptosd extends activemagiceffect
{Ололо, трололо}
ObjectReference Property ololosh Auto
Event OnEffectFinish(Actor target, Actor caster)
ololosh.moveto(game.GetPlayer())
endEvent
Не забыть в пропертиесах указать на нужного нпц или маркер или прочее.
(http://i.imgur.com/qZZmMl.png) (http://imgur.com/qZZmM)
Маджикэффекты и спелл примерно такие должны быть
(http://i.imgur.com/IvEHGl.png) (http://imgur.com/IvEHG)
(http://i.imgur.com/huOLal.png) (http://imgur.com/huOLa)
-
Спасибо огромное, работает))
-
Скриптос вот.
Scriptname aaaRazzeScriptosd extends activemagiceffect
{Ололо, трололо}
ObjectReference Property ololosh Auto
Event OnEffectFinish(Actor target, Actor caster)
ololosh.moveto(game.GetPlayer())
endEvent
А как выбрать любого нпс в одном конце карты, потом игрок перемещается
в другой конец карты и вызвать спеллом того , что выбрал?
Другими словами, чтобы скрипт запомнил нужного нпс и по заклу перемещал его к игроку.
-
Пока еще не разобрался с хранением переменных.
Если хранить переменную с референсом в скрипте заклинания - то время его хранения всего-лишь один фрейм.
Пытался хранить переменные в скриптах, что привязаны к квестам, но пока еще полностью не разобрался в этом. Жаль, что нельзя просто тупо создать глобальную переменную для референсов
-
В общем такой вопрос, как можно реализовать смену какого-нибудь (к примеру) статика, после определенного события? Что-то похожее на штурмы городов, где город преобразуется после оного?
Например: есть у нас дом, после активации красной кнопки модель дома подменяется на руины?
-
Скрипт на все объекты. Через disable и enable. Как-то так, но это скрипты, так что я не могу помочь подробнее.
-
Лучше всего создать например маркер и к нему привязать удаляемые предметы через Enable Parent (В свойствах объекта)
Также делать и для создаваемых объектов. А потом задисаблить или заенаблить нужные маркеры. Вместе с ними включатся\удаляется все прикрепленные к ним объекты.
Для примера - посмотрите "Дом теплых ветров" в вайтране, там увидите несколько хМаркеров. С белой пометкой - эти удаляются при покупке апгрейда. С черной пометкой - те появляются после покупки апгрейда и т.п.
-
может кто подсказать как сделать что бы референс появлялся при определённой стадии квеста ? пытался посмотреть как сделано в квестах гильдии воров , но так и не нашёл нужных скриптов всё так запутанно по сравнению с облой ((
-
может кто подсказать как сделать что бы референс появлялся при определённой стадии квеста ? пытался посмотреть как сделано в квестах гильдии воров , но так и не нашёл нужных скриптов всё так запутанно по сравнению с облой ((
Смотря какой реф, если актер-уник, надо указать его в алиасах квеста,
и потом из скрипта - по условию (переменные или стадии квеста )
мув то-один раз конечно, можно и пакетом , но так не факт , что придет, с проблемой навмешей, особенно для кустомных локаций:
http://www.creationkit.com/ObjectReference.MoveTo_(Papyrus) (http://www.creationkit.com/ObjectReference.MoveTo_(Papyrus))
Также надо позаботиться об условии его пакета(опять же стадия квеста например), чтобы он не свалил в дефолтную локацию.
========
Если же какой-то рандомный актер , переместить его тоже возможно, но встает проблема его исполняемых пакетов,
с этим я еще не разбирался, да и не зачем это, может нарушить игру,
если конечно Вы не делаете мод по типу SG, хотя я считаю , что они там маются дурью, анимации для SG все равно нет.
-
а если реф это предмет статик ? (допустим статуя) какой тогда метод проще применять?
-
Такой же, только выбрать свою статую в окне,
в скрипте, ее перед отсылкой отключить, после мувто, включить, иначе ее коллизия останется
в прошлой локации.
-
спасибо ))
-
братцы помогите! делаю небольшой мод, застрял на скрипте телепортации, который вешается на зелье: два этапа 1) затемняется экран 2) в момент когда экран черный происходит телепортация. Второй этап почему-то не работает, после затемнения игрок остается на месте
[hide]
Scriptname tel2 extends activemagiceffect
ObjectReference Property teleportmarker auto
Event OnInit()
Utility.Wait(3)
game.FadeOutGame(true, True, 2, 6)
RegisterForSingleUpdate(8)
EndEvent
Event OnUpdate()
game.GetPlayer().MoveTo(teleportmarker)
EndEvent[/hide]
-
братцы помогите! делаю небольшой мод, застрял на скрипте телепортации, который вешается на зелье: два этапа 1) затемняется экран 2) в момент когда экран черный происходит телепортация. Второй этап почему-то не работает, после затемнения игрок остается на месте
[hide]
Scriptname tel2 extends activemagiceffect
ObjectReference Property teleportmarker auto
Event OnInit()
Utility.Wait(3)
game.FadeOutGame(true, True, 2, 6)
RegisterForSingleUpdate(8)
EndEvent
Event OnUpdate()
game.GetPlayer().MoveTo(teleportmarker)
EndEvent[/hide]
В проперти скрипта указали, что за именно реф?
А вообще , все действия перемещений в игровом мире лучше делать из квестового скрипта,
в маг. эффектах же указывать квест-скрипту (глоб.переменными например) что делать.
-
В проперти скрипта указали, что за именно реф?
А вообще , все действия перемещений в игровом мире лучше делать из квестового скрипта,
в маг. эффектах же указывать квест-скрипту (глоб.переменными например) что делать.
проперти указал. Если телепортацию и затемнение поместить в один ивент OnInit то все работает, но затемнение тогда не успевает отработать свои 10 секунд. Т.е. получается какой-то конфликт ивентов. То же самое если вешать скрипт на амулет уже не как магическим эффектом а просто скриптом.
-
Как добавляют скрипты на Главного Героя ?
На вещь, понятно - нашёл её в редакторе, открыл Свойства, закладку "скрипты", и добавил.
А как на ГГ добавляют чего то не понял пока.
-
Через квестовый скрипт или скрипт эффекта заклинания
-
Я извиняюсь, но ничего не понял как ето делается. А можно поделиться рабочим примером ? (по нему мне будет проще разобраться...)
Вот например: как добавить себе заклинание при старте игры ? (не чтением книги - а чтобы сразу появилось, ну типа команды Player.AddSpell XXXX)
...
Всё, сам разобрался ! Вот кстати ссылочка полезная, благодаря которой у меня всё получилось КЛИК
-
Ещё один глупый вопрос возник: Как получить ИМЯ персонажа ?
Например есть у меня НПС присвоенный переменной: "Actor RandomNPC"
Как вывести его Имя на экран командой "Debug.Notification()" ?
-
Создаем новый квест, цепляем ему скрипт, в проперти указываем штуку, кот.надо дать (спелл, железку)
Scriptname Eisennewscript extends Quest
;================================================================
Event onInit() ; This event will run once, when the script is initialized
utility.wait(2)
Actor PlayerActor = Game.GetPlayer()
PlayerActor.Additem(zArmorWEisenCuirass, 1)
PlayerActor.AddSpell (trahtibidoh); ну или спелл
endEvent
;================================================================
Armor Property zArmorWEisenCuirass Auto
SPELL Property trahtibidoh Auto
==
==
==
Про имя не знаю, а зачем имя , вы повесьте на него как.виз.эффект , если для теста, т.е. что то с ним происходит, что надо и он начинает светиться.
-
А ведь и правда можно спец эффект прилепить, а я как то на Имени зациклился, спасибо !
(хотя ради спортивного интереса всё таки интересно узнать, как получить Имя НПС)
-
Ещё один глупый вопрос возник: Как получить ИМЯ персонажа ?
Смотря что именно надо, имя актёра (Вася, Петя и т.д.) или что за актёр запомнен в этой переменной RandomNPC?
1. Если "что за актёр RandomNPC", то это вот так: Debug.Notification("Актёр FormID:" + RandomNPC), тогда высветится FormID актёра и скрипт/квест (в зависимости что за переменная RandomNPC: актёр или алиас)
2. Если надо конкретно имя актёра, то здесь лучше пользоваться message, а не Notification. Это делается так:
а. Нужен свой квест, в нём создаётся в разделе Quest Aliases алиас, например AliasRandomNPC с галочкой Optional и с позицией Specific Reference, больше ничего там не надо заполнять.
б. Создаётся message в одноимённом разделе КК, например MessageName, в котором указываете в Owner Quest ваш квест, и в графе Message Text прописываете следущее: Имя актёра <Alias=AliasRandomNPC>
в. Для вывода этого сообщения в нужном скрипте надо прописать так:
AliasRandomNPC.ForceRefTo(RandomNPC)
MessageName.Show()
Utility.Wait(0.2)
AliasRandomNPC.Clear()
Тогда на экране высветится сообщение типа: Имя актёра Вася
Хоть и вместо одной команды Debug.Notification() будет 4 команды, но результат того стоит.
-
Это как раз то, что мне было нужно ! Спасибо ! (я бы сам никогда не додумался до такой реализации :-X)
Побежал проверять ....
-
Здравствуйте. Есть парочка вопросов, связанных с папирусом:
- как построить скрипт, который будет выполняться исключительно в режиме меню (если блоков GameMode и MenuMode больше не существует)? Использование MenuMode как функции условий не помогает.
- как задать значение переменной, находящейся в другом скрипте? Раньше это можно было сделать например так Set QuestID.Var to Integer, а как это делается в папирусе?
-
Нарисовалась проблема: при попытке добавить новый скрипт конструктор вылетает.
Вопрос: как лечить?
-
люди! есть кто живой в блоге??? есть вопросы!!!
имеем скрипе с переменной b, ее нужно прочитать другим скриптом! я задолбался лазить по нету ища эту информацию! помогите... как правильно прописать ее во втором скрипте?
пишу в первом скрипте
int property b auto