Я создал 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
MultigoneOffline
Сообщение №94
написано: 26 июля 2024, 19:27
| Отредактировано: Multigone - 26 июля 2024, 20:00
ImKabachok, что именно не срабатывает? Папирус не компилирует? Компилирует, но ничего не происходит? Property SAR_Dial_Type_1 в квесте точно заполнено? Тестовое сообщение, добавленное в эту функцию, показывается?
Попробуй так:
GetOwningQuest().SetDialType1(akSpeaker, 120)
(GetOwningQuest() as InsertMyCustomQuestScriptNameHere).SetDialType1(akSpeaker, 120)
Изменение репутации для пользователя ImKabachok
ImKabachokOffline
Сообщение №95
написано: 28 июля 2024, 04:30
| Отредактировано: ImKabachok - 28 июля 2024, 04:47
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
MultigoneOffline
Сообщение №96
написано: 28 июля 2024, 08:20
| Отредактировано: Multigone - 28 июля 2024, 08:21
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, эм, тестировать аргументы надо в функции скрипта квеста; к akSpeaker != none надо кастовать стринг (akSpeaker != none) as string (это я упустил) (вроде как все базовые типы переменных автоматически переводятся из одного типа в другой, но лучше указывать явно); а вообще, все должно работать, не понимаю, почему у тебя не работает. Только пользоваться не kmyQuest, а GetOwningQuest (kmyQuest вроде как для стадий квеста, по крайней мере, об этом говорится на вики Ская, про Ф4 не в курсе, может, там для любых составляющих квеста).
Ванильные квесты Ская в большинстве случаев для вызова не глобальных функций из диалогов используют GetOwningQuest. Этим можно пользоваться, чтобы, например, по цепочке запустить функцию из вообще стороннего квеста или референса любой другой формы, не заполняя ее Property в каждом диалоге.
Multigone, так я и говорю, что у меня замечены были проблемы в редакторе. В свое время долго в ступоре был, когда некоторые функции не срабатывали. При этом эти же функции срабатывают, если новый мод создать. В общем, я просто поставил версию поновее, надеюсь, больше подобного не будет, а чтобы уже существующий мод не переделывать, обойдусь костылями.
А за помощь спасибо)
Форум » Fallout 4 » Мастерская » Вопросы по моддингу Fallout 4 (Задаем свои вопросы по редактированию игры)