• Страница 38 из 38
  • «
  • 1
  • 2
  • 36
  • 37
  • 38
Форум » Записи участника [Multigone]

Результаты поиска
Multigone  Offline  Сообщение №1111 | Тема: Что слушаем? Продолжение написано: 19 мая 2024, 08:43



832

Multigone  Offline  Сообщение №1112 | Тема: Вопросы по скриптам Papyrus написано: 25 мая 2024, 12:58



832
Вальтэр

1) изменить названия состояний UnLock на Close и LockOn на Open;
2) в функции RegisterForSingleUpdateGameTimeAt регистрация должна происходить с немного увеличенным временем, т.е. не (GameTime - CurrentTime), а (GameTime - CurrentTime + 0.01);

Multigone  Offline  Сообщение №1113 | Тема: Вопросы по скриптам Papyrus написано: 24 июня 2024, 06:52 | Отредактировано: Multigone - 24 июня 2024, 07:00



832
Stea1ch, моды в СК обычно создаются, возможно, с последующими изменениями в TESVEdit. Если скрипты в .bsa, то при пересохранении .esp в СК может произойти потеря связей между ними (? уточнить). Восклицательные знаки случаются, когда СК не может получить данные моделей (они отсутствуют по указанным в формах путям). Слайдеры настройки внешности актера могут не использоваться игрой, а служить для экспорта меша и оттенка головы в папки FaceGen (Ctr+F4 на форме актера). Меш может быть отредактирован далее, ему назначены опред. текстуры и прочее.

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

Multigone  Offline  Сообщение №1114 | Тема: Вопросы по скриптам Papyrus написано: 26 июня 2024, 11:12



832
Скриптами можно управлять HeadPart (Actor, ActorBase), TextureSet (ActorBase, только для игрока (?)), Skin (ActorBase, Race), ColorForm (цвет пресетов доп. слоев текстур актера, используемых в Race).
Если я правильно понял, моделью головы из папки FaceGenData используется одна текстура для всех отметок (татуировки, макияж, грязь и т.д.). Думаю, здесь ничего нельзя сделать, т.е. чтобы произвольному актеру без подготовки заменить одну из его отметок.
С подготовкой актера и соотв. форм: можно заменить ему Skin, или HeadPart (голову).

Multigone  Offline  Сообщение №1115 | Тема: Вопросы по скриптам Papyrus написано: 26 июня 2024, 16:45 | Отредактировано: Multigone - 26 июня 2024, 17:04



832
Я имею в виду, что все ванильные актеры имеют данные о внешности в виде модели головы, находящейся в Meshes...FaceGenData, и одной (?) текстуры оттенка кожи / татуировок / макияжа / грязи, находящейся в Textures...FaceGenData. Эта текстура получается путем смешивания желаемых слоев при создании / экспорте данных актера.
Путь к текстуре указан внутри модели, поэтому, чтобы изменить текстуру, функция скрипта должна уметь оперировать с самой моделью. Насколько я знаю, таких функций в LE нет.
Игра позволяет назначать другие наборы текстур (TextureSet) для форм, имеющих World Model, но неясно, можно ли это сделать для актеров или их HeadParts (не в курсе, нужны тесты).
За это отвечают функции GetWorldModelNumTextureSets, GetWorldModelNthTextureSet, SetWorldModelNthTextureSet. Для ActorBase есть функция Get/SetFaceTextureSet, но неясно, можно ли использовать ее для кого-либо, кроме игрока.

Типичные ситуации применения:
Form Property xF Auto ; какая-то форма, например, актер (?), Armor (skin) или HeadPart
TextureSet Property xS Auto
Function MyFun()
    Int iN = xF.GetWorldModelNumTextureSets() ; число элементов у модели, которые могут иметь TextureSet (?)
    If iN >= 3 and xF.GetWorldModelNthTextureSet(2) != none ; порядок номеров элементов начинается с 0; например, проверяем, что число элементов не меньше 3, и что значение третьего элемента не пусто
        xF.SetWorldModelNthTextureSet(xS, 2) ; даем третьему элементу модели новое значение xS
        If xF as Actor and (xF as Actor).IsOnMount() == false ; например, проверяем, является ли форма актером, и не находится ли он верхом
            (xF as Actor).QueueNiNodeUpdate() ; обновляем модель ; DO NOT USE WHILE MOUNTED

Actor Property xA Auto
Function MyFun()
    ((Game.GetPlayer().GetBaseObject()) as ActorBase).SetFaceTextureSet(xS)
    ((xA.GetBaseObject()) as ActorBase).SetFaceTextureSet(xS)
    ; обновляем модели, убедившись, что актеры не верхом, в противном случае ждем, пока они спешатся, либо спешиваем их принудительно

Далее, сохранение не запоминает эти изменения, поэтому их нужно производить при каждой загрузке актера (?).

Multigone  Offline  Сообщение №1116 | Тема: Вопросы по скриптам Papyrus написано: 30 июня 2024, 15:28 | Отредактировано: Multigone - 30 июня 2024, 15:52



832
Stea1ch, объекты для вкл. и откл. определяются референс-алиасами - что в них хранится, тем скрипт и оперирует. Вместо алиасов, можно указать, к примеру, конкретные референсы. Также можно находить референсы вокруг игрока по определенным признакам, но это довольно ресурсоемкая функция.

ObjectReference Property MyObject Auto
Event...
 MyObject.Enable()

...
FormList Property MyFLBaseObjects Auto
Event...
 ObjectReference tempref = Game.FindRandomReferenceOfAnyTypeInListFromRef(MyFLBaseObjects, Game.GetPlayer(), 600.0)
 ; найти случайный подходящий референс из форм-листа с базовыми формами рядом с игроком в радиусе 600 юнитов
 If tempref
   tempref.Enable()
 EndIf

Multigone  Offline  Сообщение №1117 | Тема: Вопросы по скриптам Papyrus написано: 3 июля 2024, 10:42 | Отредактировано: Multigone - 3 июля 2024, 10:50



832
Stea1ch, это скрипт для управления составляющими формы с типом TextureSet. Функции позволяют узнать число слоев, используемых тем или иным TextureSet, и назначить слоям пути к другим текстурам. Изменения будут затрагивать всех пользователей этого TextureSet, и не запоминаются между игровыми сессиями. Слэши из путей либо такие же, как в винде, либо обратные (? уточнить). TextureSet'ы используются в том числе для HeadPart и Skin, и назначение TextureSet другой текстуры, по сути, почти эквивалентно замене HeadPart или Skin (таких же, но с другими текстурами).

Multigone  Offline  Сообщение №1118 | Тема: Вопросы по скриптам Papyrus написано: 3 июля 2024, 18:46 | Отредактировано: Multigone - 3 июля 2024, 18:53



832
Stea1ch, SetNthTexturePath(Int n, String texturePath), как и любая другая функция, примет аргументы только тех типов и в том порядке, в каком виде она объявлена в соответствующем исходнике скрипта .psc, иначе пользовательский скрипт не скомпилируется с ошибкой. Для конкретно этой функции первым аргументом должен быть int (целое число), вторым string (текст). Текстовая перем. берется в кавычки и может быть пустой, типа так:
""

Значение none может быть присвоено скриптовым переменным, оперирующим формами СК.
TextureSet MySet = none


Multigone  Offline  Сообщение №1119 | Тема: Что слушаем? Продолжение написано: 3 июля 2024, 20:31



832

Multigone  Offline  Сообщение №1120 | Тема: Вопросы по моддингу Fallout 4 написано: 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)


Multigone  Offline  Сообщение №1121 | Тема: Вопросы по моддингу Fallout 4 написано: 28 июля 2024, 08:20 | Отредактировано: Multigone - 28 июля 2024, 08:21



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

Multigone  Offline  Сообщение №1122 | Тема: Вопросы по моддингу Fallout 4 написано: 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, может, там и нет никакого говорящего.



Multigone  Offline  Сообщение №1123 | Тема: Вопросы по моддингу Fallout 4 написано: 29 июля 2024, 14:00



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

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

Multigone  Offline  Сообщение №1124 | Тема: Вопросы по скриптам Papyrus написано: 4 августа 2024, 07:13 | Отредактировано: Multigone - 4 августа 2024, 07:13



832

Multigone  Offline  Сообщение №1125 | Тема: Вопросы по скриптам Papyrus написано: 6 августа 2024, 13:04 | Отредактировано: Multigone - 6 августа 2024, 13:11



832
Stea1ch, можно узнать коорд. точки поверхности:

1) Бросить заклинание FF-Aim от Х-маркера вертикально вниз. Маркер должен находиться чуть ниже, чем летающая штуковина, чтобы снаряд не попал в ее хитбокс. У снаряда взрыв, у взрыва Placed Object, у которого скрипт, передающий собственные коорд. в основной скрипт, управляющий этим. Спавн-удаление всех этих объектов скриптами. Сложна. Зато можно узнать коорд. любого препятствия, ведь снаряды можно пулять в любом направлении.
2) Бросить Hazard с флагом Drop to ground, затем проверить его коорд. (сразу или, возможно, спустя краткое время).
3) Спавнить / передвинуть актера и узнать его коорд. Актер может быть крошечным и невидимым. Не обязательно, что он появится в указанной ему точке, возможно смещение на несколько или даже много метров, поэтому точность способа приблизительная. Зато есть и свои плюшки (проверка особых для маг. эффектов условий, которые нельзя узнать скриптом, напр., находится ли актер в воде).

Multigone  Offline  Сообщение №1126 | Тема: Нужно ли кому-то? написано: 12 сентября 2024, 09:45



832
Это немного не так работает. Опрос здесь вряд ли может показать действительное число людей, потенциально заинтересованных в подобном моде. А показать может число скачиваний за определенный промежуток времени - например, полгода-год. Поэтому, моим советом было бы выложить мод, не забыв про его описание. Несколько доп. часов, потраченных на разработку / релиз / полировку мода - это, как бы, в пределах очень маленькой погрешности (конечно, зависит от сложности мода, начальных знаний и т.д.).

Multigone  Offline  Сообщение №1127 | Тема: Что слушаем? Продолжение написано: 13 октября 2024, 11:19



832

Форум » Записи участника [Multigone]
  • Страница 38 из 38
  • «
  • 1
  • 2
  • 36
  • 37
  • 38
Поиск:





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