• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь 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
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №3172
написано: 3 августа 2024, 18:49
| Отредактировано: Stea1ch - 3 августа 2024, 20:50
Кто знает за что именно отвечает property type ImageSpaceModifier? А точнее хоть один мануал по созданию оных, там в них параметров туева хуча и никакой инфы что к чему... Пытаюсь сделать заклинание замедления времени (в идеале - остановки), но вот уперся в это, тот вариант MagShoutSprint03 из крика просто не сохраняется на заклинании, сбрасываются все остальные свойства со скрипта. Это в свойстве OutroFX скрипта MagicImodScript. Так же нашел именно остановку времени, однако... этот эффект вообще непонятен. При архитектуре скрипт ничего кроме визуалки не меняется, при установке архитектуры Slow Time имеет обратный эффект - течение времени ускоряется в разы, неписи бегают как перепуганные ракеты, луны по небу движутся очень заметно... Такой вот неуклюжий доктор Стрендж получается =))
Все! Победил. Ванильные скрипты и Imod работают отлично, дело в магнитуде. Значения должны быть ниже 1 для замедления, все, что выше ускорит время. Но вопрос про создание Imagespace Modifer остается открытым, уж очень интересная фича.
Человек человеку - волк, а зомби зомби - зомби.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3173
написано: 4 августа 2024, 07:13
| Отредактировано: Multigone - 4 августа 2024, 07:13
Ладно, это мне пока не по зубам. Задумался в сторону полета. Да не просто фокусы с неписем-лошадью и игры с гравитацией, а решил попробовать замутить полноценный летающий дом. И не висящий в воздухе, а именно летающий. Идея такова: использовать ванильный скрипт ловушки для подъема и спуска, слегка изменить его, для движения по остальным осям. Соответственно весь экстерьер должен быть одним мешем и являться Movable Static. Вроде как реализуемо, но некоторые нюансы все же есть. Например с маркерами входа в интерьер. Так же в теории я могу использовать меш дома как бодипарт непися, такое я уже делал в Fallout NV - замутил нло с пушкой, где само нло - бодипарт пушки, крепление к потолку =)) Собственно сабж: как можно контролировать высоту полета не от уровня моря (Z=0), а от реальной поверхности? Или я пытаюсь укусить себя за хвост?
как можно контролировать высоту полета не от уровня моря (Z=0), а от реальной поверхности?
Высота полета от реальной поверхности реализована, например, у летающих робоглазов просто костью в модели. Высота полета зависит просто от высоты этой кости. И эта высота, соответственно, постоянное значение имеет. В SLE, возможно, есть более продвинутые образцы.
Изменение репутации для пользователя Stea1ch
Stea1chOffline
Сообщение №3176
написано: 6 августа 2024, 07:33
| Отредактировано: Stea1ch - 6 августа 2024, 07:50
Высота полета от реальной поверхности реализована, например, у летающих робоглазов просто костью в модели.
Это я прекрасно знаю, именно по этому тот самый робоглаз по сути не летает, а бегает на этой кости. Попадись на пути гора - он будет оббегать ее по кругу, а не перелетит. Костыль. Такой же как с поездом метро, где для визуализации движения по туннелю на гг одевается шлем в виде кабины поезда и блокируется управление. Но в скайриме есть нативные подъемники и летающие существа. Вот по этому я и ищу другое решение. Что-то по типу непрерывного сброса и возврата какого-нибудь прожектиля, к примеру магического света, с замером величины Z при прикреплении оного и коррекцией высоты на основе этих данных. Ну или все-же упростить и сделать высоту полета по умолчанию выше, чем Глотка мира, которая является самой высокой точкой Тамриэля.
Человек человеку - волк, а зомби зомби - зомби.
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3177
написано: 6 августа 2024, 13:04
| Отредактировано: Multigone - 6 августа 2024, 13:11
1) Бросить заклинание FF-Aim от Х-маркера вертикально вниз. Маркер должен находиться чуть ниже, чем летающая штуковина, чтобы снаряд не попал в ее хитбокс. У снаряда взрыв, у взрыва Placed Object, у которого скрипт, передающий собственные коорд. в основной скрипт, управляющий этим. Спавн-удаление всех этих объектов скриптами. Сложна. Зато можно узнать коорд. любого препятствия, ведь снаряды можно пулять в любом направлении.
2) Бросить Hazard с флагом Drop to ground, затем проверить его коорд. (сразу или, возможно, спустя краткое время).
3) Спавнить / передвинуть актера и узнать его коорд. Актер может быть крошечным и невидимым. Не обязательно, что он появится в указанной ему точке, возможно смещение на несколько или даже много метров, поэтому точность способа приблизительная. Зато есть и свои плюшки (проверка особых для маг. эффектов условий, которые нельзя узнать скриптом, напр., находится ли актер в воде).
Именно это я и задумывал, несколько лет назад при разработке радиоуправляемой мины (к стати хорошо что вспомнил, я же этот мод так и не опубликовал) в фолле 3 я вдоль и поперек изучил эти механики.
Цитата Multigone
Спавнить / передвинуть актера и узнать его коорд.
А вот этот метод я как раз хотел использовать для движения по координатам. Непись бежит к заданному маркеру, летающий дом отслеживает направление и движется за неписем, на мой взгдяд наиболее простое решение - заюзать ии пакет непися и навмеши для путешествий. Значит что-то уже начинаю понимать, раз мысли схожи =)))
Человек человеку - волк, а зомби зомби - зомби.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)