• Страница 104 из 104
  • «
  • 1
  • 2
  • 102
  • 103
  • 104
Модератор форума: Kris†a™  
Форум » 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? Пиши не в ЛС, а в эту тему.
nepewka  Offline  Сообщение №3091 написано: 30 Апрель 2022, 20:23



252
Multigone
Цитата nepewka

Давай-те попробуем с плащом. Напомните как правильно создать квест, для этого действия ? и как должен в нём выглядеть скрипт ?


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

Multigone  Offline  Сообщение №3092 написано: 30 Апрель 2022, 21:27



730
nepewka, не возражаю, доделывай. Вкратце, алгоритм: в алиас квеста для игрока добавляется абилити с эффектом констант-селф-плащ. Квест запускается стандартным скриптом (флаги runOnce, startGameEnabled, может что еще)...
EVENT OnInit()
IF !IsCompleted()
Start()
ENDIF
ENDEVENT

 Как выглядит и работает плащ, ты знаешь, а если нет, посмотри ваниль. На конечном эффекте плаща указываешь заметный шейдер (контроль работы) и скрипт "при старте этого эффекта дать перк". В условиях эффекта указать "если субъект не имеет этого перка". Подавляющее большинство вопросов по функционалу скриптов можно изучить в СК-вики.

Это все для Скайрима, исключая выдачу перка, что там для F4 - не в курсе.


nepewka  Offline  Сообщение №3093 написано: 30 Апрель 2022, 22:43



252
Цитата Multigone

в алиас квеста для игрока добавляется абилити с эффектом констант-селф-плащ


это сюда имеешь ввиду?  как делается сам плащ и скрипт в нём с перком +- знаю

EVENT OnInit()

IF !IsCompleted()

Start()

ENDIF

ENDEVEN


Multigone  Offline  Сообщение №3094 написано: 1 Май 2022, 00:58 | Отредактировано: Multigone - 1 Май 2022, 01:05



730
nepewka, да,  хочешь, туда! Типа...
Start()
Game.GetPlayer().AddSpell(MyPlasch)

Но лучше так, как полагается:
Цитата Multigone

в алиас квеста для игрока добавляется абилити с эффектом констант-селф-плащ. Квест запускается стандартным скриптом

В референс алиас квеста, изначально заполненный игроком. Абилити можно добавить только в окно Spells алиаса. Скрипт со Start() вешается во вкладку Scripts квеста. Это ж все базовые вещи.


Mgichko  Offline  Сообщение №3095 написано: 6 Май 2022, 16:53



1
Добрый День! Прошу вас помочь в одной проблеме. При создании какого либо мода в CreationKit не работает Папирус. Хоть то какието квесты, хоть при создании простого торговца. Что только не пробовал. Решил писать уже на форумах. Проблема с какимто флагом. Ниже стандартное сообщение
Starting 1 compile threads for 1 files...
Compiling "TIF__02008F83"...
(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
E:\Skyrim Special Edition\The Elder Scrolls V Skyrim - Special Edition\Data\Scripts\Source\temp\TIF__02008F83.psc(3,0): Unknown user flag Hidden
No output generated for TIF__02008F83, compilation failed.

Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on TIF__02008F83

Что у меня: Пиратка Скайрима Спец Издания последней версии со SKSE последней версии. архив с Scripts распакован, CreationKit запускается от имени админа. Пользуюсь МО2, и при работе с модификациями не содержащими скрипты проблем нет. CreationKit от "кракозябр" вылечен...  Чисто интуитивно предполагаю, что ответ на поверхности, но вообще не знаю что уже и думать..


Multigone  Offline  Сообщение №3096 написано: 6 Май 2022, 20:34



730
Mgichko, попробуй следующее (не уверен, что подойдет для SE): в Data/Scripts/Source создай текстовый файл с указанным содержанием, затем переименуй его в TESV_Papyrus_Flags.flg
Flag Hidden 0
{
    Script
    Property
}
Flag Conditional 1
{
    Script
    Variable
}

valambar  Offline  Сообщение №3097 написано: 30 Май 2022, 23:40 | Отредактировано: valambar - 30 Май 2022, 23:43



493
Пытаюсь создать книгу, при прочтении которой будет выучено слово силы. Разумеется, наткнулся на полнейший темный лес в отношении синтаксиса.

Вопросы:

1. Как выбрать тип эвента - OnEquipped или OnRead? И соответственно - что у них должно быть прописано в скобочках?

2. При компиляции конструктор ругается, что ID слова силы, которое я прописал в скобках после Teachword, не определено. Что нужно прописать, чтобы оно было компилятором найдено?


Multigone  Offline  Сообщение №3098 написано: 31 Май 2022, 12:24 | Отредактировано: Multigone - 31 Май 2022, 12:53



730
valambar,

ScriptName _TESTNEW Extends ObjectReference

WordOfPower Property MyWord Auto ; заполнить в СК properties.

EVENT OnRead()
    Game.TeachWord(MyWord)
ENDEVENT

valambar  Offline  Сообщение №3099 написано: 31 Май 2022, 16:28 | Отредактировано: valambar - 31 Май 2022, 16:39



493
Скрипт сохранился без сообщений об ошибках, но при прочтении слово все равно не изучается. 

_____


Ага, в окне редактирования пропертей нажал "Автозаполнение" - теперь все изучается, только что интересно - когда читаешь из инвентаря, ничего не происходит, а чтобы слово выучилось, надо выбросить из инвентаря и в таком положении прочитать.


Надо поколдовать с условиями выполнения скрипта.


Multigone  Offline  Сообщение №3100 написано: 31 Май 2022, 16:58



730
valambar, а так:

ScriptName _TESTNEW Extends ObjectReference

WordOfPower Property MyWord Auto ; заполнить в СК properties.

EVENT OnRead()
    Game.TeachWord(MyWord)
ENDEVENT

EVENT OnEquipped(Actor akActor)
    IF akActor == Game.GetPlayer()
        Game.TeachWord(MyWord)
    ENDIF
ENDEVENT

valambar  Offline  Сообщение №3101 написано: 31 Май 2022, 17:01 | Отредактировано: valambar - 31 Май 2022, 18:08



493
Погляжу. 


________________________


Сейчас пока еще один вопрос: 

Если я пишу в результирующем скрипте диалога вот так:

Game.Getplayer().Additem(DragonDictionary, 1) - компилятор ругается на неизвестную вещь DragonDictionary, которая является книгой.

Как я понял, ее надо сначала ввести как проперть. Тогда вопрос - к какому типу пропертей относятся книги?

И вообще - может, где-то есть руководство, где ВСЕ типы пропертей перечислены?


Multigone  Offline  Сообщение №3102 написано: 31 Май 2022, 18:44 | Отредактировано: Multigone - 31 Май 2022, 18:59



730
valambar, в вики.

А также:
https://www.creationkit.com/index.php?title=Category:Script_Objects
https://www.creationkit.com/index.php?title=Keyword_Reference
https://www.creationkit.com/index.php?title=Operator_Reference
https://www.creationkit.com/index.php?title=Flag_Reference
https://www.creationkit.com/index.php?title=State_Reference
https://www.creationkit.com/index.php?title=Hotkey_reference

https://www.creationkit.com/index.php?title=Category:Papyrus_Language_Reference

valambar  Offline  Сообщение №3103 написано: 1 Июнь 2022, 18:48



493
С пропертями разобрался.

Но еще не разобрался, как написать результирующий скрипт для диалога, чтобы в ходе диалога вещь (в данном случае книга) добавлялась в инвентарь игрока. В Обливионе и Фоллауте 3 и Нью Вегас это было предельно легко, а вот здесь...

Я не нашел подходящего типа эвента, чтобы он работал в диалоге.


Multigone  Offline  Сообщение №3104 написано: 1 Июнь 2022, 19:40 | Отредактировано: Multigone - 1 Июнь 2022, 19:45



730
valambar, общее правило для пустого окна скрипт-фрагментов диалогов: в одном из окон написать ";", скомпилировать, сохранить (закрыть) окно диалога, открыть его, добавить нужное Property (кнопка сбоку), стереть ";", написать желаемый код, в котором выполняются операции с этим Property. Скомпилировать.

Событий там нет, код выполняется в момент начала или конца диалога (это и есть события скрипт-фрагментов диалогов). Сам код будет выглядеть так:
Game.GetPlayer().AddItem(MyPropertyName, 1)
Также там есть доп. предустановленные переменные (говорящий).

valambar  Offline  Сообщение №3105 написано: 2 Июнь 2022, 15:17 | Отредактировано: valambar - 2 Июнь 2022, 18:59



493
Благодарю. Сейчас попробую. 

_________________


Всё скомпилировалось. Сейчас попробую в игре (задумка мода такова, что за квест с гробницей Валока Тарстан  дает в награду не какие-то там жалкие септимы, а свою книгу - драконий словарь, который позволяет выучить слова силы, еще не выученные игроком).


________________

В игре несмотря на то, что я добавил эвент OnEquipped - всё равно срабатывает только на чтение вне инвентаря, т.е. эвент OnRead.


________________


Теперь слова изучаются и при прочтении из инвентаря. 

А выдается книга при диалоге с Тарстаном почему-то дважды. Надо поглядеть, где я накосячил.


DOOM2004  Offline  Сообщение №3106 написано: 24 Июль 2022, 12:05



10
Товарищи, помогите пожалуйста.

ScriptName ResetInventoryNPC_Whiterun_Script Extends ReferenceAlias

FormList Property ResetNPCWhiterunLIST Auto
ObjectReference Property BanneredMareBad Auto

Event OnActivate(ObjectReference BanneredMareBad)
  Debug.Notification("Обновление нарядов NPC в Вайтран")
    Int Index = ResetNPCWhiterunLIST.GetSize()
    While (Index > 0)
        Index -= 1
        ObjectReference ActorRef = ResetNPCWhiterunLIST.GetAt(Index) as ObjectReference
        If (ActorRef as Bool)
            Debug.Trace("ResetInventoryFormListNPC >> " + ActorRef as String + " >> ResetInventory()")
            ActorRef.ResetInventory()
        EndIf
    EndWhile
EndEvent

Суть скрипта в том что при использовании кровати на NPC из FromLIST используется команда resetinventory. Скрипт прикремлен через квест -> алиас на игрока. Но чет не работает.

Multigone  Offline  Сообщение №3107 написано: 24 Июль 2022, 16:35 | Отредактировано: Multigone - 24 Июль 2022, 16:42



730
DOOM2004,

1) OnActivate() срабатывает на объекте, который активируют. Поскольку скрипт на алиасе игрока, то событие сработает, если игрока попытается активировать другой объект.
2) У тебя 2 разные переменные с одинаковым именем BanneredMareBad. Скрипт не скомпилируется.
3) Property BanneredMareBad в скрипте не используется (либо скрипт выложен не полностью).


DOOM2004  Offline  Сообщение №3108 написано: 24 Июль 2022, 20:43



10
Multigone, сделал вот так

ScriptName ResetInventoryNPC_Whiterun_Script Extends ObjectReference

FormList Property ResetNPCWhiterunLIST Auto

Event OnActivate(ObjectReference BanneredMareBad)
  Debug.Notification("Обновление нарядов NPC в Вайтран")
    Int Index = ResetNPCWhiterunLIST.GetSize()
    While (Index > 0)
        Index -= 1
        ObjectReference ActorRef = ResetNPCWhiterunLIST.GetAt(Index) as ObjectReference
        If (ActorRef as Bool)
            Debug.Trace("ResetInventoryFormListNPC >> " + ActorRef as String + " >> ResetInventory()")
            ActorRef.ResetInventory()
        EndIf
    EndWhile
EndEvent

deug выводится, а дольше не работает. В чем может быть дело?


Multigone  Offline  Сообщение №3109 написано: 24 Июль 2022, 22:33



730
DOOM2004,

1) Не заполнено Property.
2) Property заполнено форм-листом, в котором нет ObjectReference.
3) Property заполнено форм-листом с несколькими разными типами форм.

Int Index = ResetNPCWhiterunLIST.GetSize()

Debug.Notification("Длина форм-листа " + Index)

...



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





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