Вверх Вниз


  • Страница 100 из 100
  • «
  • 1
  • 2
  • 98
  • 99
  • 100
Модератор форума: Kris†a™, Multigone  
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Вопросы по скриптам Papyrus
sansuli  Offline Сообщение №1 написано: 31 Августа 2012 в 17:29 | Отредактировано: Multigone - Четверг, 23 Апреля 2020, 17:24


The Red Sun


193
Уроки по скриптованию на языке Papyrus
Прежде чем задать вопрос просмотрите вышеуказанные уроки.
ok


Тема регламентирована.


• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней.
• Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней.
• При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС.
• При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "
+" полезного сообщения.

Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Multigone  Offline Сообщение №2971 написано: 03 Октября 2020 в 01:56



645
VictorCorvin,


Код
Scriptname _TESTTEST62 Extends ActiveMagicEffect

    ; нужен тест
    ; на эффект зелья (FF-Self, какая-то длительность действия)
    ; заполнить Property

HeadPart Property MyHeadPart Auto
    ; модные глаза, доступные всем расам

Spell Property MySpell_1 Auto
Spell Property MySpell_2 Auto
Spell Property MySpell_3 Auto
    ; пассивные эффекты - заклинания Ability-Constant-Self
    
HeadPart CurrentHeadPart
    
EVENT OnEffectStart(Actor xT, Actor xC)
    IF xT != Game.GetPlayer() || xT.IsOnMount()
        Dispel()
        RETURN
    ENDIF
    GoToState("Work")
    ActorBase xB = xT.GetBaseObject() AS ActorBase
    Int iC = xB.GetNumHeadParts() - 1
    WHILE iC >= 0 && xB.GetNthHeadPart(iC).GetType() != 2
        iC -= 1
    ENDWHILE
    CurrentHeadPart = xB.GetNthHeadPart(iC)
    xT.ReplaceHeadPart(CurrentHeadPart, MyHeadPart)
    xT.QueueNiNodeUpdate()
    xT.AddSpell(MySpell_1, false)
    xT.AddSpell(MySpell_2, false)
    xT.AddSpell(MySpell_3, false)
ENDEVENT

STATE Work
    EVENT OnEffectFinish(Actor xT, Actor xC)
        xT.RemoveSpell(MySpell_1)
        xT.RemoveSpell(MySpell_2)
        xT.RemoveSpell(MySpell_3)
        xT.ReplaceHeadPart(MyHeadPart, CurrentHeadPart)
        WHILE xT.IsOnMount()
            Utility.Wait(1.0)
        ENDWHILE
        xT.QueueNiNodeUpdate()
    ENDEVENT
ENDSTATE

Если не лень разбирать скрипты, вот мод с примерно тем же.

風たちぬ今和歌春神髪
mka_n  Offline Сообщение №2972 написано: 03 Октября 2020 в 09:25


Странник


4
Привет!
Подскажите как посчитать вещи одетые на персонажа с определенным кейвордом.
if Game.GetPlayer().WornHasKeyword(ArmorType) - эта конструкция возвращает true.
А точное кол-во как получить?

Multigone  Offline Сообщение №2973 написано: 03 Октября 2020 в 10:12



645
mka_n,

Без SKSE - есть Conditions (WornApparelHasKeywordCount, см. PerkMatchingSet).
Со SKSE - проверяются и считаются предметы, надетые в соотв. слоты актера (GetWornForm(int slotMask), применение см. в Armor.psc).

風たちぬ今和歌春神髪
mka_n  Offline Сообщение №2974 написано: 03 Октября 2020 в 16:58 | Отредактировано: Multigone - Воскресенье, 04 Октября 2020, 14:13


Странник


4
Цитата Multigone ()
Без SKSE - есть Conditions (WornApparelHasKeywordCount, см. PerkMatchingSet).
Спасибо. Но этот Conditions не работает по неведомой мне причине с моим кейвордом(( А если цеплять из skyrim.esm любой то отрабатывает как надо.

VictorCorvin  Offline Сообщение №2975 написано: 03 Октября 2020 в 18:52


Странник


9
Multigone  огромное Вам спасибо. а Вы не подскажите как можно ввести этот скрипт без Creation Kit?А то у меня это прога постоянно вылетает когда пытаюсь войти в закладку скриптов.

Multigone  Offline Сообщение №2976 написано: 03 Октября 2020 в 20:50



645
VictorCorvin, никак. Нужно разобраться, почему вылетает, это не нормальное поведение СК. В общем случае:

Для изменения Property ванильных скриптов (.pex), они должны быть распакованы из Skyrim - Misc.bsa в Data/Scripts (туда же скрипты из DLC).
Для просмотра текста скриптов и компиляции, их исходники (.psc) должны находиться в Data/Scripts/Source (исходники не поставляются с игрой с какой-то версии, их нужно качать отдельно, где именно - без понятия, у меня нет лиц. Скайрима).
Если подключенный мод использует SKSE, но SKSE не установлено в файлы игры, возможны вылеты из нее (насчет СК - без понятия).
В SE версии Скайрима, возможно, есть какие-то фундаментальные отличия в работе скриптов (не в курсе, вот соотв. раздел).

Тут обучение (что есть).

風たちぬ今和歌春神髪
yakor77  Offline Сообщение №2977 написано: 04 Октября 2020 в 13:22 | Отредактировано: Multigone - Воскресенье, 04 Октября 2020, 14:11


Странник


26
Виктор Корвин, для конвертации из pex в psc, и обратно - существуют утилиты. "Качать исходники" нет необходимости, их можно получить и самому. Лично я, давно и успешно, использую вот этот пакет. Вот его дословный текст рекламки: "Уникальная программа, которая очень поможет модермейкерам, которые работают со скриптами.
Большинство авторов пытаются скрыть написанный скрипт и просто удаляют его оставляя только компилированный файл в расширении .pex, но эта программа поможет нам вытащить из него скрипт! Как это делается?
Да просто, для начала распакуем всё из архива в папку, я назвал её: Декомпиляция, далее устанавливаем vcredist файл, берём любой .pex файл и нажимаем открыть с помощью, находим нашу папку Декомпиляция и файлик "Champollion", открываем с помощью него и он выдаёт нам текстовый файл со скриптом. Аллилуя!
Спасибо Фантому! Автор: li1nx. Ссылка.

С уважением.
Маг Иридий.
CYNIC78  Offline Сообщение №2978 написано: 14 Октября 2020 в 18:05 | Отредактировано: Multigone - Воскресенье, 18 Октября 2020, 16:16


Странник


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

Код
Event OnEffectStart(Actor akTarget, Actor akCaster)
    Game.DisablePlayerControls()
    akTarget.StopCombat()
    akCaster.StopCombat()
    Utility.Wait(0.5)
        ;Персонаж и НПС прячут оружие и выходят из состояния боя, запускаем анимацию
    akCaster.PlayIdleWithTarget(pa_01, akTarget)
    Utility.Wait(3.5)
        ;Даем время анимации проиграться, затем возвращаем контроль игроку над персонажем и заставляем НПЦ и персонажа обнажить оружие
    akTarget.DrawWeapon()
    akCaster.DrawWeapon()
    Game.EnablePlayerControls()
Endevent

Это работает с НПЦ, но вот с созданиями (creatures) у меня возникла проблема.

Я сделал специальные парные анимации human-wolf, зарегистрировал ивенты через FNIS  - все как обычно. В CK создал соответсвующие айдлы, все ок. Но проблема в том, что мои ивенты это не killmove, а обычные парные анимации, то есть без убийства актера. Так вот, командой playidlewithtarget мои анимации не работают на животных. В качестве теста проверил свои анимации на ивенте killmove тупо подменив своей анимацией ванильную (paired_2hwkillmovewolfa.hkx) и она сработала. Но, естественно, после проигрывания актер (волк) умирает так как это ивент killmove. То есть проблема не в анимации, но вот в чем - понять не могу. В качестве костыля я уже думал может как нибудь воскрешать каждый раз актера после анимации, но этот вариант мне не нравится. Может кто нибудь подскажет.

DOOM2004  Offline Сообщение №2979 написано: 16 Октября 2020 в 11:38 | Отредактировано: Multigone - Суббота, 17 Октября 2020, 23:54


Странник


3
Всем привет. Пишу сюда т.к коммерческая ветка кажется мертва. Суть вопроса: сделал левеллисты с одеждой дня npc, они её меняют только при disable/enable. Если видится решение готов обсудить, заранее спасибо.

Нужно чтобы меняли, например при посещении ГГ ячейки или в 00:00, или после сна, уж не знаю как буде проще реализовать и чтобы не было конфликтов с другими модами.

Я упоминал о мертвой коммерческой ветки, готов заплатить за проделанную работу.

yakor77  Offline Сообщение №2980 написано: 16 Октября 2020 в 16:25


Странник


26
Дум2004, тогда Вам нужно писать свой собственный скрипт. В котором как раз и прописать условия, что на что менять, когда и где. Одно только помещение в левел лист, само собой, автоматически - смены одежды Вам не обеспечит. Левел лист, это как шкаф или сундук, Вы в него что-то поместили - оно там и хранится вечно. Чтобы сменить одежду - надо открыть шкаф, снять старую одежду, повесить в шкаф, достать оттуда новую одежду, надеть/одеть её, закрыть шкаф.

С уважением.
Маг Иридий.
Myprism  Offline Сообщение №2981 написано: 17 Октября 2020 в 08:07


Физик


1615
DOOM2004, если вы изменили левельные списки, но персонажа уже встречали в игре, то его экипировка содержится в вашем сейве, т.е. старая. Вот поэтому вам приходится его переинициализировать, чтобы сгенерировать новую экипировку. Если вы начнёте игру заново, или встретите персонажа в первый раз, то его экипировка будет уже соответствовать новым левельным листам. Т.е. ваша проблема со старой одеждой не в моде, а в вашем сейве. Не очень представляю, как вам менять это скриптом. Ведь вам нужно переинициализировать всех персонажей, которых уже встречал пользователь вашего мода. А он этого захочет? Ведь запросто может быть, что игрок уже раздал персонажам какие-нибудь шмотки, которые он очень ценит, а ваш мод эти шмотки убьёт.

DOOM2004  Offline Сообщение №2982 написано: 17 Октября 2020 в 08:28


Странник


3
Звучит логично. Т.к я не знаком со скриптам думаю что писать некий фильтр не представляется возможным.

Dsion  Offline Сообщение №2983 написано: 17 Октября 2020 в 14:56



1284
DOOM2004, хрень в том, что нормального (не костыльного) способа повесить скрипт на ВСЕХ НИП нет вообще. Когда об этом заходит речь, обычно единственное, что могут посоветовать, - это либо дать игроку огромную магическую ауру, которая будет вешать магический эффект на всех НИП, а на эффекте скрипт. Либо дать пассивное умение всем расам. Либо установить everynpcability в defaultobjects. Но решать проблему такими способами реально противно. Можно, но противно.
В общем, сам скрипт - не проблема. Проблема в том, как его на всех повесить.
А без скрипта мы ограничены в управлении одеждой НИП. Без скрипта они точно не сменят её "после сна", как вы хотите.
Я делал похожий мод, но он управлял не всеми НИП, а только ограниченным количеством.

Добавлено (17 Октября 2020, 15:00)
---------------------------------------------
Если без скриптов, то НИП тупо надевают свой outfit в момент загрузки модели и всё. С этим, вроде, даже баг связан. Можно взять талантик, позволяющий красть у НИП одежду, обокрасть НИП, а потом перезайти в локацию и он снова одет.


DOOM2004  Offline Сообщение №2984 написано: 17 Октября 2020 в 17:40 | Отредактировано: Multigone - Суббота, 17 Октября 2020, 23:56


Странник


3
Цитата Dsion ()
Я делал похожий мод, но он управлял не всеми НИП, а только ограниченным количеством.
Можно и так по идее, есть лимит на количество npc?

mka_n  Offline Сообщение №2985 написано: 21 Октября 2020 в 10:21 | Отредактировано: Multigone - Четверг, 22 Октября 2020, 12:00


Странник


4
Всем привет.
Подсобите ограничить "посадку" определенных трав, если не выполнены условия.
Если я правильно понял то нужно на контейнере подправить скрипт.

Получилось такое:
Код
Keyword Property isNirnroot Auto
function OnItemAdded(form akBaseItem, Int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
    If akSourceContainer == Game.GetPlayer()
        if akBaseItem.HasKeyword(isNirnroot)
            Debug.MessageBox("1")
        else
            Debug.MessageBox("0")
        endif
    Endif
endfunction

Проблема что всегда Debug.MessageBox("0") , хотя кейворд на Nirnroot есть.

и можно ли на контейнере проверять стадию квеста?

debug.Notification(NN01)
int MyQuestStage = NN01.GetStage()
debug.Notification(MyQuestStage)

На активаторе эта поделка работает(на контейнере none), но нужно чтоб если квест не выполнен то нельзя было посадить растение.

Dsion  Offline Сообщение №2986 написано: 21 Октября 2020 в 22:58 | Отредактировано: Dsion - Среда, 21 Октября 2020, 22:58



1284
mka_n, да должно работать, по идее. Тупой вопрос: ты же заполнил проперти с кейвордом и квестом?

mka_n  Offline Сообщение №2987 написано: Вчера в 00:25


Странник


4
Dsion, да заполнил, простое debug.Notification(keyword) выдает none.

Myprism  Offline Сообщение №2988 написано: Вчера в 06:09


Физик


1615
mka_n, не уверен, что дело в этом, но игрок у тебя контейнер, а с контейнерами в игре есть тонкость. Много объектов помещённых в контейнер разом, не имеют индивидуальных ID. Если же в контейнер поместить n объектов по одному n раз, то ID им выделится. У меня было так: сделал я колечко со скриптом и положил 6 штук. в сундук, а колечки в игре не работают. Кладу их рядом с сундуком - работают. Если кладу 6 раз по одному в тот же сундук - работают. Т.е. ID присваивается только когда экземпляр объекта в сундуке один, либо имеет историю одного объекта.

Multigone  Offline Сообщение №2989 написано: Вчера в 11:57



645
mka_n, потому что проверяемый объект уже содержит в сохранении свою, предыдущую версию (Property) скрипта. Нужно: 1) подключить мод; 2) загрузить сохранение, где локация с этим объектом еще ни разу не посещалась; 3) идти и проверять. Еще можно попробовать сделать ему Reset(), но не уверен.

風たちぬ今和歌春神髪
Dsion  Offline Сообщение №2990 написано: Вчера в 23:43



1284
mka_n, хм, не должно быть none. Эх, чую, что в конце окажется, что все-таки не заполнил.

Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
  • Страница 100 из 100
  • «
  • 1
  • 2
  • 98
  • 99
  • 100
Поиск: