Под этим солнцем и небом мы тепло приветствуем Вас, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Бухта 2.0. Тёплая. Ламповая. Твоя.

Автор Тема: [Skyrim] Особенности скриптинга  (Прочитано 27484 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UNREAL

  • *
  • Сообщений: 813
[Skyrim] Особенности скриптинга
« : 12 Февраля 2012, 02:34 »
0
Вот интересно можно в Папирусе так же выбирать нужного РЕФактера скриптом,

перебором или как? И заносить выбранных в квестовые списки (Всегда в памяти игры в какой бы локации игрок не находился)...
Кто-нибудь разобрался уже ?

Оффлайн Mevi

  • *
  • Сообщений: 203
[Skyrim] Особенности скриптинга
« Ответ #1 : 12 Февраля 2012, 13:30 »
0

Не получается с перемнными ничего ( по статье ) Смотреть внизу консоли.
Должно быть:
--- 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

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #2 : 12 Февраля 2012, 13:37 »
0
А что не получается то?
А, понял. У тебя скрипта нету на камне.

Вон, нижняя надпись сообщения "Не присоединен скрипт"
« Последнее редактирование: 12 Февраля 2012, 13:40 от ТемныйКот »

Оффлайн Mevi

  • *
  • Сообщений: 203
[Skyrim] Особенности скриптинга
« Ответ #3 : 12 Февраля 2012, 13:42 »
0
Странно, он вроде бы есть и работает при активации камня. Или под присоединении скрипта другое подразумевается? там в общем он должен показать переменные она вроде задана, но в игре не показывает.
« Последнее редактирование: 12 Февраля 2012, 13:43 от Mevi »

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #4 : 12 Февраля 2012, 13:45 »
0
Сорь, не знаю как присоединен, но я тебе просто перевел последнюю строчку в консоли:
Вот эту: "No papirus script attach" - не присоединен скрипт
Проверь ещё раз стек папирус для этого камня.

Оффлайн Mevi

  • *
  • Сообщений: 203
[Skyrim] Особенности скриптинга
« Ответ #5 : 12 Февраля 2012, 13:49 »
0
В Reference объекта в вкладке Script скрипт есть. И написан он вроде правильно ( по этому туториалу ).
UPD.Всем спасибо понял в чем дело. Не туда записал переменную
« Последнее редактирование: 12 Февраля 2012, 13:56 от Mevi »

Оффлайн Kido Hari

  • *
  • Сообщений: 787
  • Пол: Мужской
  • Ничто не истина
[Skyrim] Особенности скриптинга
« Ответ #6 : 12 Февраля 2012, 14:00 »
0
Как раз буду учиться на своем новом доме. Спасибо.

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #7 : 12 Февраля 2012, 14:02 »
0
Цитата: Mevi
В Reference объекта в вкладке Script скрипт есть. И написан он вроде правильно ( по этому туториалу ).
UPD.Всем спасибо понял в чем дело. Не туда записал переменную
А! Точно!
У тя получилось что переменная объявлена в событии.
Event OnActivate(ObjectReference AkActionRef)
int count


Оффлайн Mevi

  • *
  • Сообщений: 203
[Skyrim] Особенности скриптинга
« Ответ #8 : 12 Февраля 2012, 14:06 »
0
Ага. Кстати я так понял, что переменной скрипта можно задать любое значение до события или чего-то другого?
Просто например до события написать:
int count
   count = 10
?
И еще. У каждого скрипта свои переменные? И переменные из других скриптов можно вытащить в другой?
« Последнее редактирование: 12 Февраля 2012, 14:09 от Mevi »

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #9 : 12 Февраля 2012, 14:12 »
0
х.з. ка тут, но в обловских до события только объявлялись переменные. Задавались уже только в блоках.

[hide]
   
ScriptName TkTransportSummonScript
Ref TkTransport
.....

Begin ScriptEffectFinish
Set TkTransport to bcDecoratorAssistantRef17
[/hide]

Оффлайн Рызоп

  • *
  • Сообщений: 1435
  • Пол: Мужской
  • Не ешь, подумой
[Skyrim] Особенности скриптинга
« Ответ #10 : 12 Февраля 2012, 14:28 »
0
Цитата: Mevi
И еще. У каждого скрипта свои переменные? И переменные из других скриптов можно вытащить в другой?
Используйте глобальные переменные (Miscelanous - Global), чтобы использовать их в разных скриптах. И да, не забудьте прописать глобальную переменную в пропертиесы.
Например
Это прописать после названия скрипта
GlobalVariable Property "названиепеременнойбезкавычек"  Auto
Цитировать
РВ, по ссылке на Вики то же самое, что в туторе от IgorLutiy?
Да, это перевод одной и тойже статьи.
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие Отличительный знак "Пчела" - за трудолюбие, чуткость и отзывчивость

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #11 : 12 Февраля 2012, 14:36 »
0
Рызор, как понял, уже разобрался что к чему тут.
Можешь для темных объяснить ЧТО это и ЗАЧЕМ это?
GlobalVariable Property "названиепеременнойбезкавычек"  Auto
Я пытался в переводе промта разобраться, но нифига не понял.

Оффлайн Рызоп

  • *
  • Сообщений: 1435
  • Пол: Мужской
  • Не ешь, подумой
[Skyrim] Особенности скриптинга
« Ответ #12 : 12 Февраля 2012, 14:41 »
0
Цитата: ТемныйКот
Рызор, как понял, уже разобрался что к чему тут.
Можешь для темных объяснить ЧТО это и ЗАЧЕМ это?
GlobalVariable Property "названиепеременнойбезкавычек"  Auto
Я пытался в переводе промта разобраться, но нифига не понял.
Для того, чтобы использовать глобальную переменную, нужно ее прописать этой строчкой. Иначе скрипт ее не увидит.
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
« Последнее редактирование: 12 Февраля 2012, 14:46 от Рызор »
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие Отличительный знак "Пчела" - за трудолюбие, чуткость и отзывчивость

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #13 : 12 Февраля 2012, 14:56 »
0
Цитата: Рызор
Для того, чтобы использовать глобальную переменную, нужно ее прописать этой строчкой. Иначе скрипт ее не увидит.
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
Нет, я не про то. Что для использования переменной её надо объявить это понятно.
Для этого пишем GlobalVariable Property "названиепеременнойбезкавычек" Auto

Мне непонятны вот это: Property и Auto
Зачем это?

 В обле просто писали для объявления тип переменной и её название. То есть вот так примерно:
ref "имяпеременнойбезкавычек"

А тут очередные танцы афедроном, блин.
Цитировать
Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной.
Это они крута придумали, мля, риальна простой путь - вместо того чтобы в скрипте по месту прописать строчку - тыкать в десяток окон, проматывать пару списков. Интересно какой... это придумал, и чем он руководствовался
« Последнее редактирование: 12 Февраля 2012, 14:59 от ТемныйКот »

Оффлайн UNREAL

  • *
  • Сообщений: 813
[Skyrim] Особенности скриптинга
« Ответ #14 : 12 Февраля 2012, 14:57 »
0
Цитата: ТемныйКот
х.з. ка тут, но в обловских до события только объявлялись переменные. Задавались уже только в блоках.

[hide]
   
ScriptName TkTransportSummonScript
Ref TkTransport
.....

Begin ScriptEffectFinish
Set TkTransport to bcDecoratorAssistantRef17
[/hide]
Объявлять можно было и в исполнительном блоке (ОБСЕ), главное до использования
==============

Кстати , а для рефов есть глобальные переменные? Или только числа,

Или кто-нить делал уже псевдоквест с ними, можно ли через глоб-квест переменные, обращаться
к этим рефам из любого скрипта, как это было в Обливионе?

Оффлайн Рызоп

  • *
  • Сообщений: 1435
  • Пол: Мужской
  • Не ешь, подумой
[Skyrim] Особенности скриптинга
« Ответ #15 : 12 Февраля 2012, 15:27 »
0
Цитата: ТемныйКот
Нет, я не про то. Что для использования переменной её надо объявить это понятно.
Для этого пишем GlobalVariable Property "названиепеременнойбезкавычек" Auto

Мне непонятны вот это: Property и Auto
Зачем это?

 В обле просто писали для объявления тип переменной и её название. То есть вот так примерно:
ref "имяпеременнойбезкавычек"

А тут очередные танцы афедроном, блин.

Это они крута придумали, мля, риальна простой путь - вместо того чтобы в скрипте по месту прописать строчку - тыкать в десяток окон, проматывать пару списков. Интересно какой... это придумал, и чем он руководствовался
Это синтаксис такой. Так надо.
Таким образом прописываются внешние переменные, рефы и прочие. Внутренние переменные описываются типа
int count и т.п.
И да, постарайтесь забыть про обливион, когда скриптуете скайрим.
« Последнее редактирование: 12 Февраля 2012, 15:35 от Рызор »
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие Отличительный знак "Пчела" - за трудолюбие, чуткость и отзывчивость

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #16 : 12 Февраля 2012, 16:00 »
0
Рызор Спасип. Непонятно, но ясно.

Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!!

    * Scriptname HelloWorldScript extends ObjectReference: а тут и само название скрипта, который расширяет наш скрипт. В данном случае используется скрипт под названием "ObjectReference"
Расширение скриптов
Практически все скрипты, которые вы напишете, нужно будет "расширять" другим скриптом. Когда вы расширяете скрипт, вы как-бы говорите, "Мой скрипт в общем такой же, как и тот скрипт, но я добавил в него дополнительные вещи.

Ахринеть! То есть начинать надо с досконального изучения всех " Form Hidden" скриптов?!! Мля, это уже за гранью добра и зла просто!
Не-ееет, беседковцы точно... сказал бы, да забанят ведь. Короче без знания аглицкого тут труба. Вот уроды, а.
« Последнее редактирование: 12 Февраля 2012, 16:04 от ТемныйКот »

Оффлайн Mevi

  • *
  • Сообщений: 203
[Skyrim] Особенности скриптинга
« Ответ #17 : 12 Февраля 2012, 16:47 »
0
Это напоминает мне модули например в том же паскале.
Где что бы работать с цветом, координатами и тд нужно было добавить строку:
uses crt;
Не обязательно изучать все, главное знать то, что понадобится именно тебе.

Оффлайн Молчаливый Бе

  • *
  • Сообщений: 411
[Skyrim] Особенности скриптинга
« Ответ #18 : 12 Февраля 2012, 16:52 »
0
Цитировать
Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!!
Вообще то это называется наследование, пришло из ООП и очень удобная штука.

Цитировать
Практически все скрипты, которые вы напишете, нужно будет "расширять" другим скриптом.
Скрипты, которые вы пишете РАСШИРЯЮТ другой, уже существующий скрипт. Это означает что все свойства и функции скрипта, который мы наследуем (после ключевого слова extends) будут доступны и в нашей функции.
« Последнее редактирование: 12 Февраля 2012, 17:00 от Молчаливый Бе »
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #19 : 12 Февраля 2012, 17:20 »
0
Молчаливый Бе
Маттть! Ну почему? почему?!!! эта беседка норовит все сделать через одно место?! Ведь чем проще тем удобней!!! - это относилось к вот этому
"Можно не прописывать вручную, а выделить скрипт и нажать на Edit properties. Там нажать на add, выбрать тип - GlobalVariable и написать название нужной переменной."
___
Я не спорю, что наследование удобная штука, но есть одно мааахонькое условие - когда знаешь тот самый "уже существующий скрипт" и "все свойства и функции скрипта".
Если вы знаете английский, вы разберетесь конечно, там в конце концов есть пояснения в скрипте, и дальше методом тыка в туторы... в общем можно.

Мне же, лично, остаётся только по переведенным туторам создавать "Хилло ворд" и радоваться. Ну и ждать пока года через два появится детальный разбор этих самых "уже существующих" основных.
______
Хотя можно ведь и не пользоваться наследованием, писать своё с нуля, но один фиг... короче чем дальше в лес, тем больше ну его нафиг.
« Последнее редактирование: 12 Февраля 2012, 17:29 от ТемныйКот »

Оффлайн Молчаливый Бе

  • *
  • Сообщений: 411
[Skyrim] Особенности скриптинга
« Ответ #20 : 12 Февраля 2012, 17:31 »
0
А что, без наследования можно было взять и все написать, без знания функций?
Награды За неоценимую помощь по переводу форума на новый движок и техническое содействие

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #21 : 12 Февраля 2012, 18:09 »
0
Цитата: Молчаливый Бе
А что, без наследования можно было взять и все написать, без знания функций?
Нет, но дело в том, что в обле эти функции можно было разобрать сравнивая два, три, четыре скрипта.

Здесь же вот тебе ссылка на тот же 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  ?! Вот сижу и гадаю, что такого тут наследуется.
« Последнее редактирование: 12 Февраля 2012, 18:15 от ТемныйКот »

Оффлайн Обалдуй

  • *
  • Сообщений: 2122
  • Пол: Мужской
  • Граф Куст
[Skyrim] Особенности скриптинга
« Ответ #22 : 12 Февраля 2012, 18:46 »
0
1 - как отслеживать повышение того или иного навыка? чтобы при повышении навыка совершалось какое то действие.
2 - можно ли сделать, чтобы игра с самого начала отслеживала, например, количество использования того или иного заклинания? в принципе, количество использования, как я понимаю, можно засунуть в глобальную переменную, а вот как лучше сделать это?
« Последнее редактирование: 12 Февраля 2012, 18:48 от Обалдуй »

Оффлайн Anton

  • *
  • Сообщений: 158
  • Пол: Мужской
  • Экспериментатор
[Skyrim] Особенности скриптинга
« Ответ #23 : 12 Февраля 2012, 18:50 »
0
@ТемныйКот:
Ну я так понимаю скрипт "HelloWorldScript" получает доступ к событию "OnActivate" и ему подобным, которое есть в глобальном скрипте "ObjectReference", а мы потом описываем это событие как нам надо.
« Последнее редактирование: 12 Февраля 2012, 18:51 от Anton »

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #24 : 12 Февраля 2012, 19:41 »
0
Цитата: Anton
@ТемныйКот:
Ну я так понимаю скрипт "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

Итог, все работает и без неё

Здорово, правда?
А самое замечательное, что эта строка в скрипт прописывается "по умолчанию" при создании скрипта. Ве-се-ло.
« Последнее редактирование: 12 Февраля 2012, 20:07 от ТемныйКот »

Оффлайн Anton

  • *
  • Сообщений: 158
  • Пол: Мужской
  • Экспериментатор
[Skyrim] Особенности скриптинга
« Ответ #25 : 12 Февраля 2012, 21:54 »
0
То что без той строчки работает - это точно странно !

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

Оффлайн UNREAL

  • *
  • Сообщений: 813
[Skyrim] Особенности скриптинга
« Ответ #26 : 12 Февраля 2012, 21:59 »
0
Вопрос такой

(ObjectReference akActionRef)

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

к примеру:

по какому -то условию akActionRef получает плюшку...
« Последнее редактирование: 12 Февраля 2012, 21:59 от UNREAL »

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #27 : 12 Февраля 2012, 22:28 »
0
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
« Последнее редактирование: 12 Февраля 2012, 22:30 от ТемныйКот »

Оффлайн UNREAL

  • *
  • Сообщений: 813
[Skyrim] Особенности скриптинга
« Ответ #28 : 13 Февраля 2012, 00:08 »
0
Спасибо , я так и подумал...

Токо непонятно нафига так...Впрочем, это наверное гарантия от вылетов, которые были,
например с ссылкой на реф, который хранится несколько(или один) фреймов в памяти.

Оффлайн ТемныйКот

  • *
  • Сообщений: 410
[Skyrim] Особенности скриптинга
« Ответ #29 : 13 Февраля 2012, 00:25 »
0
UNREAL, возможно. Хотя как то это...
Ну да шут их знает. Подождем адекватного перевода всей статьи, может понятней будет.

Мне вот этот скрипт ObjectReference покоя не даёт. Нафига на него ссылка, если точь в точь события описываются в скрипте "потомке"?
То есть получается дублирование. Нафига это нужно, непонятно. К тому же чем дальше в лес...
Тут scriptName LokirsDraugrResurrection extends Actor
А событие тоже Event OnActivate(ObjectReference akActionRef)
как и в скрипте HelloWorldScript.