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

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

Опубликовано
04.02.2021 23:40:06, Azazellz сказал(-а):

Так он может на другое ругается.

Скрипт целиком давай, посмотрим, что там к чему.

Да вот, собственно, и весь упрощенный уже скрипт XD

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

Scriptname BLlevelScrInit extends Quest  

GlobalVariable property BLlevel auto
BLlevel.SetValueInt(1) 

В более сложном варианте вот: 

Scriptname BLlevelScrInit extends Quest  

GlobalVariable property BLlevel auto

int BLlevVar = BLlevel.GetValueInt()
BLlevel.SetValueInt(BLlevVar + 100)

Но тут сразу три ошибки:

no viable alternative at input 'BLlevel'
required (...)+ loop did not match anything at input '.'
Unknown user flag BLleve

 

Кстати, странно, ошибка со знаком равно куда-то пропала, хотя вроде ничего не изменилось.

  • Ответов 840
  • Создана
  • Последний ответ

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

Опубликовано
03.02.2021 12:32:13, Herbert d'Godzor сказал(-а):

Здравствуйте. Мне очень нужна помощь.  Дело в том, что я уже долгое время пытаюсь сделать особое призываемое существо для TESV:Skyrim. Оно должно напоминать Пепельного Стража из Dragonborn, но не внешне, а поведением. Оно должно не следовать за героем, а оставаться на той позиции на которой его призвали. Я сделал все что мог и это существо остается на своей позиции и не переходит в другие локации за героем, но вот при быстром перемещении в открытом мире (если оно было призвано в мире Tamriel) оно все равно оказывается рядом с героем. Я уже понял, что тут нужен скрипт, но беда в том, что я не умею их писать. В связи с этим, у меня два вопроса: первый - можно ли без скриптов как то сделать так, что существо не будет следовать вместе с игроком при быстром перемещении и второй - если все же нужен скрипт то не могли бы вы сказать, какой именно и куда его нужно ставить?

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

Очень прошу, ответьте и на мой вопрос.

Опубликовано
05.02.2021 07:13:34, Кайо сказал(-а):
Кстати, странно, ошибка со знаком равно куда-то пропала, хотя вроде ничего не изменилось.

Долго думал, почему у меня тоже нифига не компилируется.

Потом допер.

 

Код в "серьезных" скриптах не может быть выброшен "просто так".

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

А у тебя этого нет.

 

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

 

Вот так это заработает

Scriptname BLlevelScrInit extends Quest 

GlobalVariable property BLlevel auto

Function PlusLevel (int n)
int BLlevVar = BLlevel.GetValueInt()
BLlevel.SetValueInt(BLlevVar + n)
EndFunction

Потом можно будет вызывать эту функцию из диалогов, указывая нужное число n.

 

Но вообще, это излишне, так как в диалогах это должно работать и без всяких заморочек.

GlobalVariable BLlevel
int n = BLlevel.GetValueInt()
BLlevel.SetValueInt(n + 100)

Вот в таком виде.

 

 

 

05.02.2021 11:31:57, Herbert d'Godzor сказал(-а):
Очень прошу, ответьте и на мой вопрос.

Врядли это скриптами делается. На ИИ вообще сложно ими влиять, особенно на "базовый".

 

Разбери сам призыв стража, посмотри, как он устроен. Я туда не лазил никогда, так что ничего сказать не могу.

Если оригинальный страж за игроком не следует - возможно, там не простой призыв, а скриптовая комбинация. Т.е. оно не призывает моба, как обычно, а спавнит его в указанную точку.

А может и что-то более сложное, комбинированное.

Опубликовано (изменено)
05.02.2021 12:10:53, Azazellz сказал(-а):

Врядли это скриптами делается. На ИИ вообще сложно ими влиять, особенно на "базовый".

 

Разбери сам призыв стража, посмотри, как он устроен. Я туда не лазил никогда, так что ничего сказать не могу.

Если оригинальный страж за игроком не следует - возможно, там не простой призыв, а скриптовая комбинация. Т.е. оно не призывает моба, как обычно, а спавнит его в указанную точку.

А может и что-то более сложное, комбинированное.

Я разобрал. Поэтому я и прошу помощи. Там по сути три заклинания. Одно из них - скрипт. Там страж призывается на руну. И это скрипт. Поэтому я и ищу везде где могу как это сделать. Вы, наверное, правы что это скриптовая комбинация, но секрет ее я так и не понял. Поэтому и прошу помочь.

Изменено пользователем Herbert d'Godzor
Опубликовано
05.02.2021 12:59:22, Herbert d'Godzor сказал(-а):

Я разобрал. Поэтому я и прошу помощи. Там по сути три заклинания. Одно из них - скрипт. Там страж призывается на руну. И это скрипт. Поэтому я и ищу везде где могу как это сделать. Вы, наверное, правы что это скриптовая комбинация, но секрет ее я так и не понял. Поэтому и прошу помочь.

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

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

А может оно оба раза маркер ставит, просто разных стражей призывает.

 

Я так думаю, что эту систему можно переделать, просто в проперти скрипта.изменив существо, которое призывается на маркер.

Чтоб проперти ДЛЦшных скриптов смотреть и править, надо исходники скриптов перенести из папки Data\Scripts\Source\ИМЯ_ДЛЦ\ в просто Data\Scripts\Source\

 

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

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

 

 

Я так думаю, что эту систему можно переделать, просто в проперти скрипта.изменив существо, которое призывается на маркер.

Чтоб проперти ДЛЦшных скриптов смотреть и править, надо исходники скриптов перенести из папки Data\Scripts\Source\ИМЯ_ДЛЦ\ в просто Data\Scripts\Source\

Так дело в том, что мод завязан на "Dawngurd" а не на "Dragonborn". И я совсем не разбираюсь в скриптах, так что и понятия не имею как сделать то, что вы мне предлагаете. Я вычленил скрипты связанные с пепельным стражем, но не могу ничего в них понять. Мне стыдно, но что делать... Поэтому я и обратился за помощью.

Опубликовано
05.02.2021 12:10:53, Azazellz сказал(-а):
Вот в таком виде.

Ох, спасибо вам за такое участие, что даже сами проверяли, но... Увы... Очень обрадовалась, что всё скомпилировалось в диалоге, очень огорчилась, что в игре оно совсем не работает. Проверяла, пробегаясь по диалогу и проверяя глобальную переменную через консоль - у неё остаётся стартовое значение (я не ставила галочки у Constant, честное чайничное). Сделала ещё один скрипт в квесте, скопировав тот текст для создания функции (только название поменяла), всё скомпилировалось, но, когда ввожу в диалоговом окне PlusLevel(100), прога торжественно сообщает, что функция не существует... Даже перезапускала дважды, мало ли. На всякий случай сменила стартовое значение переменной на -2, ибо не знала, не может ли оно ноль за булевый тип принимать. Тоже бес толку.

Опубликовано
05.02.2021 15:15:01, Кайо сказал(-а):

Очень обрадовалась, что всё скомпилировалось в диалоге, очень огорчилась, что в игре оно совсем не работает.

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

05.02.2021 15:15:01, Кайо сказал(-а):

но, когда ввожу в диалоговом окне PlusLevel(100), прога торжественно сообщает, что функция не существует

Вызов внешней функции, не из текущего скрипта, происходит несколько иначе.
 

05.02.2021 14:19:25, Herbert d'Godzor сказал(-а):

Так дело в том, что мод завязан на "Dawngurd" а не на "Dragonborn". И я совсем не разбираюсь в скриптах, так что и понятия не имею как сделать то, что вы мне предлагаете. Я вычленил скрипты связанные с пепельным стражем, но не могу ничего в них понять. Мне стыдно, но что делать... Поэтому я и обратился за помощью.

Ну тогда тебе сюда.
Но лучше начать с самого начала.
Если у тебя нет знания основ - советы тебе ничем не помогут.

Опубликовано
05.02.2021 15:50:45, Azazellz сказал(-а):
Глобальная переменная то так же называется, как в скрипте?

Да, глобальная переменная BLlevel, она равна -2 сейчас. Код в точности скопирован, только название локальной переменной усложнила, хотя, если она локальная, то можно также спокойно использовать n? Или то таки для примера?

GlobalVariable BLlevel
int BLlevar = BLlevel.GetValueInt()
BLlevel.SetValueInt(BLlevar + 100)

Более простой вариант тоже не ругается, но и тоже не работает

GlobalVariable BLlevel
BLlevel.SetValueInt(1)

С вызовом функции явно косячу ещё сильнее, чем можно закосячить с этим, компилятор ругается почти на всё, а она, полагаю, тоже не сработает, если не пашет этот вариант?

Опубликовано
05.02.2021 18:05:50, Кайо сказал(-а):
а она, полагаю, тоже не сработает, если не пашет этот вариант?

Да вот хз.

Возможно, что глобалы нельзя "на лету" назначать. Только с проперти. Но тут я не уверен.

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

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

Ну и еще, есть команда Mod. Работает проще, чем связка Get\Set.

Опубликовано
05.02.2021 16:08:48, Herbert d'Godzor сказал(-а):
Спасибо. А на русском нет?

Первые три части из четырех на русском есть:

Папирус. Туториал 1. Привет, мир!

Папирус. Туториал 2. Переменные и условия

Папирус. Туториал 3. Введение в свойства и функции

Мир друзьям - смерть врагам!

Мой новый сайт-блог: https://igorlutiy.pp.ua - как некое подведение итогов моей жизни в интернете

Мой профиль на Самиздате: http://samlib.ru/l/ljutyj_i/

Опубликовано
06.02.2021 02:09:43, Azazellz сказал(-а):

Да вот хз.

Возможно, что глобалы нельзя "на лету" назначать. Только с проперти. Но тут я не уверен.

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

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

Ну и еще, есть команда Mod. Работает проще, чем связка Get\Set.

Увы, похоже, гиблое это дело. Что компилируется, то не работает, на что есть надежда, что заработает как-то иначе - не компилируется. Mod компилируется в том числе в строке диалоговых скриптов, но тоже не работает. Кайо пробовала переименовывать, править скрипт вручную, уже скомпилированный (почему-то не добавляет проперти, кстати, пишет, уже есть такая, хотя прям как проперти - объявления в скрипте нет, и в списке свойств тоже отсутствует), пробовала добавлять свойство в список через интерфейс (черти-что, выбираю тип глобальной переменной - все равно запрашивает конкретное значение, я не понимаю, оно же из глобальных должно брать?). Пробовала всовывать в функцию прямо в этом скрипте (из другого так и не поняла, как вызывать) и сразу следом её вызвать, тоже говорит, что не существует, пробовала тот же финт повторить не в скрипте, а в диаложном окошке для фрагмента - делает вид, что не видит endFunction, напишите, говорит, а оно вот оно, написано. Такая уже каша в голове, не могу полностью вспомнить, что уже пробовала и в каких именно окнах... Дебаг-уведомления и прочее я в скрипт вообще не представляю как добавить, тупо проверяю значение переменной в консоли, и всё. Наверное, придется отказаться от всей этой затеи. Мой уровень в скриптинге откровенно нулевой, а попытки в этом разобраться терпят фиаско. Признаться, я вообще взялась за эту штуку лишь потому что наивно полагала, что конкретно этот механизм должен быть максимально прост, это же, мол, просто переменная. Ага... как же... XD

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

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

Спасибо, но когда я скачиваю, антивирус ругается. Впрочем я разобрался и без этого. Но у меня теперь новый вопрос: как правильно поставить функцию SetAlpha, чтобы NPC медленно исчезал? А то в руководстве непонятно и как я не пробовал, скрипт не компилируется. Пишут:

SetAlpha is not a function or does not exist

 

. Очень прошу ответить.

Изменено пользователем Herbert d'Godzor
Опубликовано (изменено)
09.02.2021 04:09:44, Azazellz сказал(-а):

 

https://www.creationkit.com/index.php?title=SetAlpha_-_Actor

В синтаксисе где-то ошибаешься, скорее всего.

Пример правильно написания с сылки выше:

Ghost.SetAlpha(0.9, true)

ХЗ, СК все равно выдает: 

SetAlpha is not a function or does not exist

Хотя я скопировал прямо отсюда.

Изменено пользователем Herbert d'Godzor
Опубликовано
09.02.2021 09:36:48, Herbert d'Godzor сказал(-а):
Хотя я скопировал прямо отсюда.

"Просто скопировать" - мало.

Нужно еще понимать, как она применяется.

Вот скажет этот Ghost из примера выше - он у тебя где-нибудь определен?

Опубликовано (изменено)
09.02.2021 11:47:31, Azazellz сказал(-а):

"Просто скопировать" - мало.

Нужно еще понимать, как она применяется.

Вот скажет этот Ghost из примера выше - он у тебя где-нибудь определен?

У меня вот так: 

self.SetAlpha(0.1)

Я делаю призрака который после смерти должен исчезать постепенно, а не мгновенно. В общем, это долгая история.

Изменено пользователем Herbert d'Godzor
Опубликовано
09.02.2021 11:53:30, Herbert d'Godzor сказал(-а):
У меня вот так: 

Если на маг.эффекте это висит - попробуй с ивента взять akTarget вместо self.

Ну или указать, что self тут - actor, а не что-то еще.

Ибо вроде как оно только на actor работает, на просто референсы не прокатит.

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

Я тут поспрашивал на другом форуме и выяснилось, что SetAlpha  это вообще скрипт из SKSE. А мне бы очень не хотелось бы использовать его в своем моде. Я сделал призываемое без привязки к игроку существо которое не следует за ним, а охраняет территорию призыва. Даже удалось сделать чтобы оно исчезало после смерти. Но оно исчезает очень некрасиво - просто падает и труп мгновенно исчезает. А все "классические" призванные существа исчезают хоть и быстро, но постепенно. Вот я и хочу узнать - можно ли сделать это без SKSE? Ведь в оригинальной игре и Dragonborn  это как-то сделали.

Опубликовано
08.02.2021 17:59:08, Herbert d'Godzor сказал(-а):
Спасибо, но когда я скачиваю, антивирус ругается.

Выкиньте антивирус. Без шуток. Там архив с текстовым файлом

 

 

09.02.2021 16:35:00, Herbert d'Godzor сказал(-а):
Я тут поспрашивал на другом форуме и выяснилось, что SetAlpha  это вообще скрипт из SKSE

Вас обманули. Из SKSE другая функция с аналогичным названием SetAlpha - ColorComponent

Мир друзьям - смерть врагам!

Мой новый сайт-блог: https://igorlutiy.pp.ua - как некое подведение итогов моей жизни в интернете

Мой профиль на Самиздате: http://samlib.ru/l/ljutyj_i/

Опубликовано
09.02.2021 16:35:00, Herbert d'Godzor сказал(-а):
Вот я и хочу узнать - можно ли сделать это без SKSE? Ведь в оригинальной игре и Dragonborn  это как-то сделали.

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

Зачем изобретать велосипед?

 

Я так думаю, там к этим существам прикреплен скрипт, который срабатывает в момент смерти существа, и работать он будет на чем угодно.

 

И да, как выше заметили - функция ванильная. Используется в скриптах призраков, в маг. эффектах зелья призрачного вида, где-то еще...

В СКСЕ другая.

Опубликовано
09.02.2021 21:35:06, Azazellz сказал(-а):

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

Зачем изобретать велосипед?

 

Я так думаю, там к этим существам прикреплен скрипт, который срабатывает в момент смерти существа, и работать он будет на чем угодно.

 

И да, как выше заметили - функция ванильная. Используется в скриптах призраков, в маг. эффектах зелья призрачного вида, где-то еще...

В СКСЕ другая.

Как я уже говорил - когда я ставлю SetAlpha, скрипт не компилируется.

Опубликовано
10.02.2021 08:33:26, Herbert d'Godzor сказал(-а):

Как я уже говорил - когда я ставлю SetAlpha, скрипт не компилируется.

Значит, что-то не так ставишь.

Скрипт целиком давай.

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

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

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

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

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

Войти

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

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