• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Мда... либо топик мертв - либо не осталось знатоков...
Накатал такой скрипт, призванный парализовать нежить, прикрутил к эффекту, работает, только вот нежить что на ногах почему-то не падает, а продолжает "бег на месте". Паралич срабатывает, но не так. Может какой еще эффект надо прикрутить чтобы нежить с ног валилась и лежала? Кто знает какой эффект прикрутить или какой создать и прикрутить?
Scriptname ForgottenSpellsParalyze extends ActiveMagicEffect
Explosion Property PowerSerpentStoneExplosion Auto
Keyword Property UndeadKeyword Auto
Spell Property MS08ParalysisAbility Auto
Event OnEffectStart(Actor Target, Actor Caster)
;if target is undead - add extra explosion and paralyze effect
if Target.HasKeyword(UndeadKeyword)
Target.PlaceAtMe(PowerSerpentStoneExplosion, 1, False, False)
Target.AddSpell(MS08ParalysisAbility)
endif
EndEvent
Методом научного тыка я понял, что Target.AddSpell(MS08ParalysisAbility) не выполняется. Переделал способность и эффект, отвязав от квеста MS08 (создал свои на основе ванильных), прописал все в скрипт - с нулевым результатом. Хотя из консоли если я кликаю по драугру или скелету и командой addspell добавляю мой созданный паралич - цель успешно падает лапками кверху. За основу взят скрипт огненного плаща Дж'зарго. ЧЯДНТ?
Народ, часом никто не делал скрипт на дверь? Как бы она должна открываться и закрываться к примеру утром и вечером, без рычага и триггера, только по времени. Нужно для ставней в домах.
1) изменить названия состояний UnLock на Close и LockOn на Open;
2) в функции RegisterForSingleUpdateGameTimeAt регистрация должна происходить с немного увеличенным временем, т.е. не (GameTime - CurrentTime), а (GameTime - CurrentTime + 0.01);
Нетривиальный вопрос: Имеется мод, где у некоторых NPC раскрашенные лица. Имеется в виду мод на детей TKAA. Как и чем был создан этот мод - не ясно, в описание четко указано что нельзя использовать CreationKit - все порушится к чертям. Хочу сделать команду "Иди умойся!" чтобы ребенок пошел к ближайшему умывальнику (это как раз не сложно) и умылся, соответственно нужен результат - лицо без краски. Посмотреть на непися в CreationKit не могу - они все восклицательные знаки. Так же в CK видимо не все отображается, вижу текстуры татуировок и раскраски в Tint, но у них у всех полная прозрачность стоит, не должны отображаться, но в игре еще как видны... собственно сабж: как отключить определенную текстуру скриптом? Ну или как реализовать затею? Есть идеи?
Человек человеку - волк, а зомби зомби - зомби.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3160
написано: 24 июня 2024, 06:52
| Отредактировано: Multigone - 24 июня 2024, 07:00
Stea1ch, моды в СК обычно создаются, возможно, с последующими изменениями в TESVEdit. Если скрипты в .bsa, то при пересохранении .esp в СК может произойти потеря связей между ними (? уточнить). Восклицательные знаки случаются, когда СК не может получить данные моделей (они отсутствуют по указанным в формах путям). Слайдеры настройки внешности актера могут не использоваться игрой, а служить для экспорта меша и оттенка головы в папки FaceGen (Ctr+F4 на форме актера). Меш может быть отредактирован далее, ему назначены опред. текстуры и прочее.
Я не разбирался с татуировками. Нужно знать, каким образом они размещаются на актере, и что отвечает за это. Проще всего раскурочить какой-нибудь мод, где в заявленных возможностях есть изменение татуировок на актерах, например, напарниках.
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №3161
написано: 25 июня 2024, 14:32
| Отредактировано: Stea1ch - 25 июня 2024, 14:35
Проще всего раскурочить какой-нибудь мод, где в заявленных возможностях есть изменение татуировок на актерах
Да вот не проще. Такой мод всего один - EFF, зависит от мода RaceMenu и UIExtensions, и он не работает на SE, точнее именно функция изменения внешность непися, она заточена под самую свежую SKSE для AE. Был когда-то мод NPC Appearance Changer - но автор его грохнул с нексуса окончательно и бесповоротно. Да и мне кажется что он тоже костыльный, с проекцией внешности гг на непися и только. Да и вообще этот мод глючный до безумия. Автор однозначно хотел как лучше, но порушил скрипты, отвечающие за поведение напарника, напарник не переходит на другие локации за ГГ, без консоли вообще никак не поиграешь. Пока реализовал только костыль: Ctr+F4 на форме актера, затем удаление экспортированного меша (иначе конская голова) - в этом случае игнорируются татуировки и боевая раскраска, экспортируется только SkitTone от расы, вся боевая раскраска благополучно исчезает. Но надо это реализовать скриптом. Учитывая что мод все же есть - значит можно. Надо как-то достучаться до прозрачности текстур, их имена можно поглядеть, но как скриптом сдвинуть ползунок прозрачности на ноль - хз.
Скриптами можно управлять HeadPart (Actor, ActorBase), TextureSet (ActorBase, только для игрока (?)), Skin (ActorBase, Race), ColorForm (цвет пресетов доп. слоев текстур актера, используемых в Race). Если я правильно понял, моделью головы из папки FaceGenData используется одна текстура для всех отметок (татуировки, макияж, грязь и т.д.). Думаю, здесь ничего нельзя сделать, т.е. чтобы произвольному актеру без подготовки заменить одну из его отметок. С подготовкой актера и соотв. форм: можно заменить ему Skin, или HeadPart (голову).
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №3163
написано: 26 июня 2024, 12:40
| Отредактировано: Stea1ch - 26 июня 2024, 12:40
Если я правильно понял, моделью головы из папки FaceGenData используется одна текстура
При экспорте из этого мода экспортируется только одна текстура, а в самой форме текстуры раскраски и татуировок присутствуют отдельными файлами. Именно с этим модом такая беда, ванильные модельки с раскрашенными лицами нормально редактируются, у них ползунки прозрачности имеют положительное значение. В этом моде модели не видны в СК и прозрачность везде стоит на 0, однако по факту это не так. В xEdit оно тоже не видно, видна только основная текстура. Но они же есть! А вот управление TextureSet - это интересно! Если удастся просто скриптом подменить TextureSet на аналогичный с расы - то это решение! Благо что в этом моде раскрашенные лица только у детей из враждебных фракций, но каждая раса представлена как минимум двумя неписями - враждебными и обычными. Так что замена TextureSet на аналогичный из той же расы однозначно проканает. Можно хоть пример какой, куда копать? Не видел я таких скриптов.
Человек человеку - волк, а зомби зомби - зомби.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3164
написано: 26 июня 2024, 16:45
| Отредактировано: Multigone - 26 июня 2024, 17:04
Я имею в виду, что все ванильные актеры имеют данные о внешности в виде модели головы, находящейся в 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) ; обновляем модели, убедившись, что актеры не верхом, в противном случае ждем, пока они спешатся, либо спешиваем их принудительно
Далее, сохранение не запоминает эти изменения, поэтому их нужно производить при каждой загрузке актера (?).
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №3165
написано: 29 июня 2024, 21:58
| Отредактировано: Stea1ch - 29 июня 2024, 21:59
Другой вопрос по другому моему моду: хочу использовать ритуальное заклинание иллюзии (зрение десятого глаза) для включения/отключения объектов. Но ванильные скрипты жестко привязаны к квесту. Можно ли переколбасить ванильный скрипт для отображения скрытых предметов без прослойки в виде квеста? Пока уткнулся в обязательную переменную, коей в ванильном скрипте является скрипт квеста. Вот ванильный скрипт:
Scriptname MGRitual02EffectScript extends ActiveMagicEffect {Scripted effect for the Spell Associated with MGRitual02}
Quest Property RitualQuest Auto ReferenceAlias Property Book01 Auto ReferenceAlias Property Book02 Auto ReferenceAlias Property Book03 Auto ReferenceAlias Property Book04 Auto
float property fDelay auto {time to wait before switching to constant Imod} ImageSpaceModifier property IntroFX auto {IsMod applied at the start of the spell effect} ImageSpaceModifier property MainFX auto {main isMod for spell} ImageSpaceModifier property OutroFX auto {IsMod applied at the end of the spell effect} sound property IntroSoundFX auto ; create a sound property we'll point to in the editor sound property OutroSoundFX auto ; create a sound property we'll point to in the editor ; Obtain the target of the active fire effect
Event OnEffectStart(Actor Target, Actor Caster) fDelay = 0.83 int instanceID = IntroSoundFX.play((target as objectReference)) ; play IntroSoundFX sound from my self introFX.apply() ; apply isMod at full strength utility.wait(fDelay) ; NOTE - neccessary? introFX.remove() ; remove initial FX mainFX.apply() fDelay=0 MGRitual02QuestScript QuestScript = RitualQuest as MGRitual02QuestScript QuestScript.SpellActive =1 Book01.GetReference().Enable(True) Book02.GetReference().Enable(True) Book03.GetReference().Enable(True) Book04.GetReference().Enable(True) EndEvent
Event OnEffectFinish(Actor Target, Actor Caster) MGRitual02QuestScript QuestScript = RitualQuest as MGRitual02QuestScript QuestScript.SpellActive =0 Book01.GetReference().Disable() Book02.GetReference().Disable() Book03.GetReference().Disable() Book04.GetReference().Disable() int instanceID = OutroSoundFX.play((target as objectReference)) ; play OutroSoundFX sound from my self introFX.remove() mainFX.remove() OutroFX.apply() endEvent
Человек человеку - волк, а зомби зомби - зомби.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3167
написано: 30 июня 2024, 15:28
| Отредактировано: Multigone - 30 июня 2024, 15:52
Stea1ch, объекты для вкл. и откл. определяются референс-алиасами - что в них хранится, тем скрипт и оперирует. Вместо алиасов, можно указать, к примеру, конкретные референсы. Также можно находить референсы вокруг игрока по определенным признакам, но это довольно ресурсоемкая функция.
Stea1ch, это скрипт для управления составляющими формы с типом TextureSet. Функции позволяют узнать число слоев, используемых тем или иным TextureSet, и назначить слоям пути к другим текстурам. Изменения будут затрагивать всех пользователей этого TextureSet, и не запоминаются между игровыми сессиями. Слэши из путей либо такие же, как в винде, либо обратные (? уточнить). TextureSet'ы используются в том числе для HeadPart и Skin, и назначение TextureSet другой текстуры, по сути, почти эквивалентно замене HeadPart или Skin (таких же, но с другими текстурами).
Stea1ch, SetNthTexturePath(Int n, String texturePath), как и любая другая функция, примет аргументы только тех типов и в том порядке, в каком виде она объявлена в соответствующем исходнике скрипта .psc, иначе пользовательский скрипт не скомпилируется с ошибкой. Для конкретно этой функции первым аргументом должен быть int (целое число), вторым string (текст). Текстовая перем. берется в кавычки и может быть пустой, типа так:
""
Значение none может быть присвоено скриптовым переменным, оперирующим формами СК.
TextureSet MySet = none
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)