• Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Модератор форума: ApeX  
Форум » Fallout 4 » Мастерская » Вопросы по моддингу Fallout 4 (Задаем свои вопросы по редактированию игры)

Вопросы по моддингу Fallout 4
Basil44  Offline  Сообщение №91 написано: 26 февраля 2024, 22:54



464
Цитата blinkmoth

Может есть какие материалы-руководства по управлению поведением не игровыми персонажами?


Fallout 4 Creation Kit Tutorial

включаем субтитры с переводом, и изучаем.


████████████ - сотри монеткой, чтобы получить пароль от этого аккаунта
blinkmoth  Offline  Сообщение №92 написано: 27 февраля 2024, 10:38



13
Спасибо! Попробую разобраться.

ImKabachok  Offline  Сообщение №93 написано: 26 июля 2024, 17:50 | Отредактировано: ImKabachok - 26 июля 2024, 17:53



19
Кто разбирается в тонкостях скриптов помогите.

Я создал ActorValue и хочу менять его через скрипты внутри квеста во время диалогов с НПС. 

Если я создам скрипт внутри конкретной фразы НПС с объявлением этого ActorValue в Properties, то функция SetValue корректно работает как надо (пример скрипта akSpeaker.SetValue( SAR_Dial_Type_1, 120 ) ), но я с ума сойду заниматься объявлением в каждой отдельной фразе.

Хочу сделать функцию в общем для квеста скрипте с модификацией ActorValue в ней, а ее уже вызывать в нужных фразах НПС через код фразы kmyQuest.SetDialType1( akSpeaker, 120 ). Естественно для kmyQuest. я указываю скрипт квеста.

Сама функция внутри скрипта квеста выглядит так:


ActorValue Property SAR_Dial_Type_1 Auto

Function SetDialType1( Actor akSpeaker, int count)

                  akSpeaker.SetValue(SAR_Dial_Type_1, count)

EndFunction


И в таком виде она не срабатывает. Подозреваю, что нужно что-то добавить, но не могу понять что. Сделать ActorValue с параметром Hardcoded игра не позволяет.


Multigone  Offline  Сообщение №94 написано: 26 июля 2024, 19:27 | Отредактировано: Multigone - 26 июля 2024, 20:00



832
ImKabachok, что именно не срабатывает? Папирус не компилирует? Компилирует, но ничего не происходит? Property SAR_Dial_Type_1 в квесте точно заполнено? Тестовое сообщение, добавленное в эту функцию, показывается?

Попробуй так:
GetOwningQuest().SetDialType1(akSpeaker, 120)
(GetOwningQuest() as InsertMyCustomQuestScriptNameHere).SetDialType1(akSpeaker, 120)


ImKabachok  Offline  Сообщение №95 написано: 28 июля 2024, 04:30 | Отредактировано: ImKabachok - 28 июля 2024, 04:47



19
Цитата Multigone

ImKabachok, что именно не срабатывает? Папирус не компилирует? Компилирует, но ничего не происходит? Property SAR_Dial_Type_1 в квесте точно заполнено? Тестовое сообщение, добавленное в эту функцию, показывается?

Попробуй так:
GetOwningQuest().SetDialType1(akSpeaker, 120)
(GetOwningQuest() as InsertMyCustomQuestScriptNameHere).SetDialType1(akSpeaker, 120)


Папирус компилирует, property заполнено, тестовое сообщение через debug.notification внутри функции срабатывает.

Добавил к квесту новый скрипт, его функции вообще не срабатывают, даже debug.notification, хотя код такой же и в kmyQuest ссылка на новый скрипт.

Тогда сделал новый тестовый мод, в котором прописал тот же самый код, и он работает!

Видимо, проблема конкретно в моей версии Creation Kit. Из-за внутренней ошибки в крупном моде могут не срабатывать некоторые функции, если их с самого начала не использовать.

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

П.С. это точно проблема моего редактора, я раньше замечал подобное, когда у меня также не срабатывал скрипт на добавление предметов ammo конкретному akSpeaker также через общий для квеста скрипт. Когда начал мод заново, то проблема испарилась.


Multigone  Offline  Сообщение №96 написано: 28 июля 2024, 08:20 | Отредактировано: Multigone - 28 июля 2024, 08:21



832
ImKabachok, попробуй проверить, что именно передается в эту функцию: 
Debug.Notification(akSpeaker.GetName() + " " + (SAR_Dial_Type_1 != none) as string)

ImKabachok  Offline  Сообщение №97 написано: 29 июля 2024, 07:27



19
Multigone, прописал такой скрипт внутри фразы от НПС:

debug.notification("SAR TEST actor 1")

akSpeaker.SetValue( SAR_Dial_Type_1, 40 )

Debug.Notification(akSpeaker.GetName() + " " + (SAR_Dial_Type_1 != none) as string)

debug.notification("SAR TEST actor 2")

kmyQuest.SetDialType3( akSpeaker, 60 )

Debug.Notification(akSpeaker.GetName() + " " + (SAR_Dial_Type_3 != none) as string)


Выбрал еще незатронутого разговорами НПС, у которого оба Actor value пустые. После разговора вылезли сообщения.

"SAR TEST actor 1"

" TRUE" - имени персонажа не видно, но наличие пробела в начале заметно

"SAR TEST actor 2"

На этом все, даже FALSE не выдало.


Multigone  Offline  Сообщение №98 написано: 29 июля 2024, 09:19



832
ImKabachok, в Скайриме, если скриптом попытаться выдать два Notification с одним и тем же текстом (либо после расчета аргументов Notification окажется, что тексты одинаковы), то будет показано только одно. Если мне не изменяет память. Я даже запилил функцию в свой набор утилит:

String FUNCTION sEve(Int N = 3) Global ; Набор из N цифр для одинаковых одновременных уведомлений: Notification("N" + sEve() + ": Сообщение уникально c шансом 99,9%.").
    IF N > 0
        String S
        WHILE N
            S += Utility.RandomInt(0, 9)
            N -= 1
        ENDWHILE
        RETURN S
    ENDIF
ENDFUNCTION

... правда, ни разу ей не воспользовался. Думаю, в Ф4 эта особенность осталась. Так что не факт, что последнее уведомление не отправляется.

Попробуй заменить akSpeaker.GetName() на akSpeaker != none, может, там и нет никакого говорящего.



ImKabachok  Offline  Сообщение №99 написано: 29 июля 2024, 13:08



19
Multigone, написал такой скрипт внутри фразы:

debug.notification("SAR TEST actor 1")

akSpeaker.SetValue( SAR_Dial_Type_1, 40 )

debug.notification("SAR Dial Type 1 = "+akSpeaker.GetValue( SAR_Dial_Type_1 ) )

Debug.Notification(akSpeaker != none + " " + (SAR_Dial_Type_1 != none) as string)


Вылезают сообщения:

"SAR TEST actor 1"

"SAR Dial Type 1 = 40.000000

" TRUE"

Действительно, кажется, что спикера нет, но Actor Value ему все же присваивается.


Multigone  Offline  Сообщение №100 написано: 29 июля 2024, 14:00



832
ImKabachok, эм, тестировать аргументы надо в функции скрипта квеста; к akSpeaker != none надо кастовать стринг (akSpeaker != none) as string (это я упустил) (вроде как все базовые типы переменных автоматически переводятся из одного типа в другой, но лучше указывать явно); а вообще, все должно работать, не понимаю, почему у тебя не работает. Только пользоваться не kmyQuest, а GetOwningQuest (kmyQuest вроде как для стадий квеста, по крайней мере, об этом говорится на вики Ская, про Ф4 не в курсе, может, там для любых составляющих квеста). 

Ванильные квесты Ская в большинстве случаев для вызова не глобальных функций из диалогов используют GetOwningQuest. Этим можно пользоваться, чтобы, например, по цепочке запустить функцию из вообще стороннего квеста или референса любой другой формы, не заполняя ее Property в каждом диалоге.

ImKabachok  Offline  Сообщение №101 написано: 29 июля 2024, 15:28



19
Multigone, так я и говорю, что у меня замечены были проблемы в редакторе. В свое время долго в ступоре был, когда некоторые функции не срабатывали. При этом эти же функции срабатывают, если новый мод создать. В общем, я просто поставил версию поновее, надеюсь, больше подобного не будет, а чтобы уже существующий мод не переделывать, обойдусь костылями.

А за помощь спасибо)


Форум » Fallout 4 » Мастерская » Вопросы по моддингу Fallout 4 (Задаем свои вопросы по редактированию игры)
  • Страница 4 из 4
  • «
  • 1
  • 2
  • 3
  • 4
Поиск:





Ответ на жалобу смотрите в разделе жалоб