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

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

Опубликовано (изменено)
Во время самостоятельных поисков ответа на собственный вопрос, я обнаружил глобальную переменную DLC2MiraakDragonSouls. По идее, она отвечает за кол-во душ, что находятся у Мирака (этот вывод основан на названии), но вот относятся они к финальной битве с ним или к непосредственному поглощению душ - я не знаю.
Для того, чтобы проверить это, я решил провести тестовый забег (т.е. создать персонажа и пройти DLC, попутно, в нужных ситуациях, "запрашивая" значение переменной). Так как узнать значение переменной через консоль мне лень (а в добавок я не вполне понял, как это сделать), то мною было принято решение создать мини мод, где я бы посредством применения заклинания вызывал окошко (Message), где было бы отображено значение DLC2MiraakDragonSouls (попутно, попытаться познакомиться и разобраться с месседжами).
Трудности возникли с самим "выведением окошка с переменной": я создал объект Message; создал эффект, куда привязал скрипт aaaaMiraakDSscript и написал код:
Спойлер
Scriptname aaaaMiraakDSscript extends activemagiceffect
GlobalVariable Property DLC2MiraakDragonSouls Auto
Message Property DSMiraakMessage Auto

DSMiraakMessage.Show(DLC2MiraakDragonSouls.Getvalue())
Ес-но я задал предварительно значения переменных:
Спойлер
У DLC2MiraakDragonSouls в Property задано значение "ванильной переменной" DLC2MiraakDragonSouls
У DSMiraakMessage задано значение моего месседжа:
b96baf65001fd861b70fe3c2fa823c16.jpg
Однако, при компиляции, мне CK выдаёт ошибку:
Спойлер
Starting 1 compile threads for 1 files...
Compiling "aaaaMiraakDSscript"...
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\aaaaMiraakDSscript.psc(5,15): no viable alternative at input '.'
No output generated for aaaaMiraakDSscript, compilation failed.

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

Вопрос - что я делаю не так или кто может мне расписать, как правильно "привязывать" переменные к месседжу?

P.s
I. файл исходника и файл мода (ссылки ведут на гугл диск)
II. Сообщение и проч. пытался сделать, основываясь на этом уроке
III. прошу проявить терпение, если вопрос показался вам тупым/идиотским/лёгким
Изменено пользователем mr Jygalag
  • Ответов 840
  • Создана
  • Последний ответ

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

Опубликовано
01.03.2018 07:28:07, mr Jygalag сказал(-а):

Так как узнать значение переменной через консоль мне лень (а в добавок я не вполне понял, как это сделать)

Команда для этого: show variablename.
 

01.03.2018 07:28:07, mr Jygalag сказал(-а):

DSMiraakMessage.Show(DLC2MiraakDragonSouls.Getvalue())

Думаю/предполагаю, что Message.Show может показывать конкретную переменную, а не функцию, берущую значение переменной.
Задай переменную типа float, ей присвой значение глобалки DLC2MiraakDragonSouls, и попробуй показывать именно эту переменную.

 

UPD: а ещё в твоём скрипте (если это он весь) нет ивента, в маг. эффекте он должен быть OnEffectStart.

Опубликовано
01.03.2018 08:43:33, Vitalyudin сказал(-а):

Команда для этого: show variablename.

Спасибо большое, сохраню на всякий случай

Думаю/предполагаю, что Message.Show может показывать конкретную переменную, а не функцию, берущую значение переменной.
Задай переменную типа float, ей присвой значение глобалки DLC2MiraakDragonSouls, и попробуй показывать именно эту переменную.
 
UPD: а ещё в твоём скрипте (если это он весь) нет ивента, в маг. эффекте он должен быть OnEffectStart.

Как только добавил конструкцию с OnEffectStart всё заработало. Благодарю за быстрый и информативный ответ
Опубликовано

Доброго времени суток. 
Кто-нибудь может подсказать Event который вызывается, когда игрок убивает моба (любого). 

Опубликовано (изменено)
04.03.2018 13:13:44, =D= сказал(-а):

Доброго времени суток. 
Кто-нибудь может подсказать Event который вызывается, когда игрок убивает моба (любого). 

OnDeath (если скрипт прицеплен к актеру).

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

Perks for Blood поищи на этом сайте, там в комментах есть мой архив, в котором как раз через квестовую систему это все отслеживается.

Ну и сам мод на это тоже направлен - убиваешь чуваков, получаешь перки.

Изменено пользователем Azazellz
  • Нравится 1
Опубликовано

Вопрос - почему при компиляции моего скрипта, с назначенными значениями, куда надо, мне выдаёт CK ошибку? По идее, если я ничего не забыл, скрипт должен работать

Cам скрипт:
Scriptname DSMiraak extends Scene 

GlobalVariable Property DSMiraakCount  Auto

float Property DSM = DSMiraakCount.Getvalue()
DSM+=1
DSMcount.SetValue(DSM)

Код ошибки:
Starting 1 compile threads for 1 files...

Compiling "DSMiraak"...
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\DSMiraak.psc(5,21): no viable alternative at input 'DSMiraakCount'
No output generated for DSMiraak, compilation failed.

 

Batch compile of 1 files finished. 0 succeeded, 1 failed.

Failed on DSMiraak

Примечания к переменным и их значениям:
DSMiraakCount присвоено значение глобальной переменной DSMiraakCount, у которой изначальное значение "0" и тип - Short

DSM через Property задано значение "0". По идее, это не важно, но я настроил её, на всякий случай.

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

Весь код, который выполняет какие-то действия, должен находиться в функциях или событиях.

Scriptname DSMiraak extends Scene 

GlobalVariable Property DSMiraakCount  Auto
float Property DSM Auto

Function DoSmth()
    DSM = DSMiraakCount.Getvalue()
    DSM+=1
    DSMcount.SetValue(DSM)
EndFunction

Всё провисло и болтается.

Опубликовано
11.03.2018 15:45:47, YourBunnyWrote сказал(-а):

 

Весь код, который выполняет какие-то действия, должен находиться в функциях или событиях.

Scriptname DSMiraak extends Scene 

GlobalVariable Property DSMiraakCount  Auto
float Property DSM Auto

Function DoSmth()
    DSM = DSMiraakCount.Getvalue()
    DSM+=1
    DSMcount.SetValue(DSM)
EndFunction

Благодарю, осталось только понять, как присобачить присоединить этот скрипт к нужной мне сцене...

Опубликовано
11.03.2018 17:57:23, mr Jygalag сказал(-а):

Благодарю, осталось только понять, как присобачить присоединить этот скрипт к нужной мне сцене...

Легко. Например, можно повесить этот скрипт не на сцену, а на сам квест:

Scriptname DSMiraak extends Quest

GlobalVariable Property DSMiraakCount  Auto

Function CountSoulsMiraak()
  Int DSM = (DSMiraakCount.GetValue() as Int)
  DSM += 1
  DSMiraakCount.SetValue(DSM)
EndFunction

В папирус-фрагменте сцены в поле kmyQuest выбрать DSMiraak, а в само поле вписать вызов функции:

kmyQuest.CountSoulsMiraak()
Опубликовано
12.03.2018 18:33:30, werr сказал(-а):

Легко. Например, можно повесить этот скрипт не на сцену, а на сам квест:

Scriptname DSMiraak extends Quest

GlobalVariable Property DSMiraakCount  Auto

Function CountSoulsMiraak()
  Int DSM = (DSMiraakCount.GetValue() as Int)
  DSM += 1
  DSMiraakCount.SetValue(DSM)
EndFunction
В папирус-фрагменте сцены в поле kmyQuest выбрать DSMiraak, а в само поле вписать вызов функции:
kmyQuest.CountSoulsMiraak()

Благодарю, конечно за помощь, но я либо туплю, либо не то открываю, но поле kmyQuest в упор не вижу...
LThZAeO.png.webp.png
Опубликовано
12.03.2018 19:06:48, mr Jygalag сказал(-а):

Благодарю, конечно за помощь, но я либо туплю, либо не то открываю, но поле kmyQuest в упор не вижу...
 

Божечки, Скайримский СК такой... задержанный. Давненько я уже не открывал его, года три. То, что я описал, относится к редактору под Фолл.

 

В таком случае, достаточно просто этот кусок в поле папирус фрагмента вписать.

  Int DSM = (DSMiraakCount.GetValue() as Int)
  DSM += 1
  DSMiraakCount.SetValue(DSM)

 

ну или вовсе облениться и выдать нечто такое:

  DSMiraakCount.SetValue(DSMiraakCount.GetValue()  + 1)
Опубликовано (изменено)
02.03.2018 09:08:55, werr сказал(-а):

У тебя название сцены и скрипта совпадают. В этом ошибка.

 

Спасибо за ответ. К сожалению не могу проверить.

 

Так как Papyrus сошел с ума. При попытке компиляции любого скрипта windows вырубает его и вылазит такая ошибка.

 

Спойлер
ЌҐ®Ўа Ў®в ­­®Ґ ЁбЄ«о祭ЁҐ: System.NotSupportedException: Љг«мвга  "ru" - нв® ­Ґ©ва «м­ п Єг«мвга . Ћ­  ­Ґ ¬®¦Ґв ЁбЇ®«м§®ў вмбп ЇаЁ д®а¬ вЁа®ў ­ЁЁ Ё а §Ў®аҐ Ё Ї®н⮬㠭Ґ ¬®¦Ґв Ўлвм ­ §­ зҐ­  ⥪г饩 Єг«мвга®© ¤«п нв®Ј® Ї®в®Є .

   ў System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture)
   ў System.Globalization.CultureInfo.get_NumberFormat()
   ў System.Int32.ToString(String format, IFormatProvider provider)
   ў System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
   ў System.String.Format(IFormatProvider provider, String format, Object[] args)
   ў System.IO.TextWriter.Write(String format, Object arg0, Object arg1)
   ў System.IO.TextWriter.SyncTextWriter.Write(String format, Object arg0, Object arg1)
   ў System.Console.Write(String format, Object arg0, Object arg1)

   ў PapyrusCompiler.Program.Main(String[] args)

Изменено пользователем Oxbow
Опубликовано
12.03.2018 19:55:31, werr сказал(-а):

В таком случае, достаточно просто этот кусок в поле папирус фрагмента вписать.

  Int DSM = (DSMiraakCount.GetValue() as Int)
  DSM += 1
  DSMiraakCount.SetValue(DSM)
 
ну или вовсе облениться и выдать нечто такое:
 
  DSMiraakCount.SetValue(DSMiraakCount.GetValue()  + 1)

Сначала ничего не сработало, но потом, когда я назначил переменные через проперти в папирус фрагменте, всё "заработало" (компиляция кода ни к чему не приводит, а так как лога с ошибками нет, то надо проверять "на практике", действительно ли всё "пашет"). В любом случае, премного благодарен за помощь.
Опубликовано
12.03.2018 19:55:31, werr сказал(-а):

DSMiraakCount.SetValue(DSMiraakCount.GetValue()  + 1)

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

Попробую провести ещё пару тестов, во время которых попробую переставить скрипт в различные фазы (а не в финальную сцену). Возможно, приду к какому-нибудь результату. Если не получится, то переставлю скрипт в одну из стадий квеста, а если и это не сработает, то:

а) пойду искать инф-цию о том, как подсчитывать кол-во проигранных сцен

б) изучать код скриптов, изначально привязанных к квесту, дабы вписать новый фрагмент в изначальный скрипт

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

В поиске ответа на то, как подсчитать кол-во "Краж" Мираком душ (т.е кол-во проигранных сцен из квеста DLC2SoulSteal из DLC Dragonborn) я решил изменить скрипт, привязанный к квесту "краж" - DLC2SoulStealScript. Цель проста - добавить в "финальный" фрагмет скрипта bp DLC мою часть кода, т.е заставить скрипт дополнения "поработать на меня". Однако, когда я отредактировал через Notepad++ этот скрипт, добавив незначительные изменения, то при компиляции этого скрипта через CK мне выдало ошибку:

Сама ошибка
Starting 1 compile threads for 1 files...
Compiling "DLC2SoulStealScript"...
<unknown>(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\DLC2SoulStealScript.psc(1,0): Unknown user flag conditional
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\DLC2SoulStealScript.psc(31,5): Unknown user flag conditional
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\DLC2SoulStealScript.psc(32,5): Unknown user flag conditional


No output generated for DLC2SoulStealScript.psc, compilation failed.
Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on DLC2SoulStealScript.psc

А вот новые части кода, что я добавил в скрипт DLC2SoulStealScript:
новые части кода
В самом начале, после поля Properties:
;-- New Properties ----------------------------------
GlobalVariable Property DSMiraakCount  Auto

Далее после поля Variables:

;-- New Variable ------------------------------------
float Property DSM Auto

И новый фрагмент в функции FinishStealingSoul (функция представлена тут в полном виде, после моих изменений):

function FinishStealingSoul()
    debug.Trace(self as String + "FinishStealingSoul()", 0)
    DLC2SoulStealMsg.show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000)
    ;new fragment
    DSM = DSMiraakCount.Getvalue()
    DSM+=1
    DSMcount.SetValue(DSM)
endFunction


Почему скрипт не сработал - понятия не имею. Но вот в чём загвоздка - после того, как я второй раз декомпилировал скрипт DLC2SoulStealScript.pex с помощью утилиты гн-на Кербера в DLC2SoulStealScript.psc (для того, чтобы получить "чистый" скрипт DLC2SoulStealScript.psc), то я также попробовал компилировать этот скрипт с помощью CK. Угадайте что? Правильно, CK выдал ошибку:
код ошибки
Starting 1 compile threads for 1 files...
Compiling "DLC2SoulStealScript"...
<unknown>(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(8,0): Unknown user flag conditional
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(35,5): Unknown user flag conditional
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(36,5): Unknown user flag conditional
No output generated for DLC2SoulStealScript.psc, compilation failed.

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



Одним словом - что за фигня тут происходит?

P.s: ссылка на скачивание отредактированного скрипта - тык; ссылка на оригинальный, т.е. не отредактированный мной сприт (в формате .psc), который я получил из dlc2soulstealscript.pex посредством Papyrus Assembler GUI - тык; ссылка на этот же скрипт, но в формате .pex (именно его я и извлёк из Dragonborn.bsa) - тык Изменено пользователем mr Jygalag
Опубликовано (изменено)
20.03.2018 19:00:43, YourBunnyWrote сказал(-а):

Ответ был на предыдущей странице http://tesall.ru/topic/17490-voprosy-po-skriptam/?p=1412757

Разместил TESV_Papyrus_Flags.flg там, где надо (по пути ...Skyrim\Data\Scripts\Source) - теперь же CK ругается на другие вещи:
Код ошибки:
Starting 1 compile threads for 1 files...
Compiling "dlc2soulstealscript"...
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(140,0): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(140,1): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(140,3): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(140,4): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,0): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,1): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,2): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,3): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,4): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(141,5): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,0): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,1): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,2): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,3): no viable alternative at character 'я'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,4): no viable alternative at character 'ў'
C:\Program Files (x86)\Steam\steamapps\common\skyrim\Data\Scripts\Source\dlc2soulstealscript.psc(142,5): no viable alternative at character 'я'
No output generated for dlc2soulstealscript.psc, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on dlc2soulstealscript.psc
Проверил строчки 140, 141 и 142 - никаких символов таких и в помине нет:
 
    DSM = DSMiraakCount.Getvalue()
    DSM+=1
    DSMcount.SetValue(DSM)
Изменено пользователем mr Jygalag
Опубликовано
Там какие-то посторонние символы. Возьми оригинальный файл и отредактируй ещё раз в каком-то нормальном редакторе (Notepad++, Sublime Text).

Всё провисло и болтается.

Опубликовано
21.03.2018 20:13:08, YourBunnyWrote сказал(-а):

Там какие-то посторонние символы. Возьми оригинальный файл и отредактируй ещё раз в каком-то нормальном редакторе (Notepad++, Sublime Text).

Пррблема как раз в том, что:
а) я пользовался Notepad++ для редактирования скрипта
б) доступа к оригинальному скрипту (в расширении .psc) у меня нет, так как файла scripts.rar (где, насколько помню, находятся исходники оригинальных скриптов) я у себя не нашёл, а сколько раз не тыкал в Стиме на "Проверить целостность кэша" - ноль эффекта. Поэтому, единственный способ для меня был самый длинный: достать из Dragonborn.bsa скрипт в формате .pex, затем его декомпилировать в "читабельный" формат .psc
Опубликовано
21.03.2018 21:03:33, mr Jygalag сказал(-а):

единственный способ для меня был самый длинный: достать из Dragonborn.bsa скрипт в формате .pex, затем его декомпилировать в "читабельный" формат .psc

Добытый исходник компилируется без твоих правок? Если да, то просто отредактируй его ещё раз, не копируй, а руками набери.

Всё провисло и болтается.

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

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

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

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

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

Войти

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

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