• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.
Закладки 5 Закладки

Автор Тема: Помощь в написании скриптов на языке Papyrus.  (Прочитано 4962 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sadistic Summer

  • *
  • Сообщений: 1
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
    • Email
Всем доброго времени суток. Думаю эта тема пригодится многим начинающим модмейкерам, ибо скрипты на мой взгляд самое сложное и интересное.
У меня появилась идея для небольшого проекта, но увы скриптописание  стало не таким как в обле и фоле, мне нужна ваша помощь.
И так, мне нужен скрипт на отключение(disable) и включение(enable) объектов, точнее что бы при активации рычага включался 1 объект, выключались 3 других и сменялась стадия квеста. И объясните пожалуйста как правильно повесить этот скрипт на объекты, -___- я нуб, да.
Ещё мне нужен скрипт для телепортации гг при смене стадии квеста, заранее благодарю. :3

Оффлайн SuroviyWolf

  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #1 : 23 Октябрь, 2012, 16:04:56 »
0
Здравствуйте, помогите пожалуйста. Не могу создать ситуацию, при которой к ГГ подходит гонец и вручает письмо, при прочтении которого начинается квест. Но гонец должен приходить только при становлении ГГ таном Вайтрана. Хочу использовать дефолтного гонца WICourier. Объясните пожалуйста, каким образом сие действие можно оргнаизовать в игре. Я тоже нуб:)

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #2 : 23 Октябрь, 2012, 19:22:05 »
0
Не могу создать ситуацию, при которой к ГГ подходит гонец и вручает письмо, при прочтении которого начинается квест. Но гонец должен приходить только при становлении ГГ таном Вайтрана. Хочу использовать дефолтного гонца WICourier. Объясните пожалуйста, каким образом сие действие можно оргнаизовать в игре.
Создай стартовый квест, поставить галочки "Start Game Enabled" и "Run Once", сделать пару стадий (0 - стартовая галочка и 200 - финишная галочка), больше никаких настроек не требуется. Создаёшь Alias для игрока: AliasPlayer с галочкой Optional и назначаешь в Specific Reference игрока (player). Этому алиасу добавляешь скрипт aaaAliasPlayerScript (название сделай своё), переменные соответствуют своим оригиналам, LetterQst - это письмо.


Scriptname aaaAliasPlayerScript extends ReferenceAlias 

Quest Property MQ104  Auto 
Quest Property pWIcourier  Auto 
ReferenceAlias Property AliasPlayer  Auto 
Book Property LetterQst  Auto 


Event OnLocationChange(Location akOldLoc, Location akNewLoc)
  if MQ104.GetStage() >= 160
    (pWICourier as WICourierScript).addItemToContainer(LetterQst, 1)
    AliasPlayer.Clear()
    GetOwningQuest().SetStage(200)
    GetOwningQuest().Stop()
  endIf
endEvent

***************************************
Создаёшь письмо и вешаешь на него дефолтный скрипт DefaultOnReadSetQuestStageNotAlias, в котором (в свойствах) указываешь на свой основной квест и стадию.

Всё, готово, можно проверять в игре.
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн SuroviyWolf

  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #3 : 24 Октябрь, 2012, 16:09:11 »
0
Большое спасибо, сейчас попробую, потом отпишусь.

К сожалению в игре гонец не появляется. В связи с чем хочу уточнить: "Создаёшь Alias для игрока: AliasPlayer с галочкой Optional и назначаешь в Specific Reference игрока (player)." - он создается в квесте на вкладке Quest Aliases? И как в Specific Reference назначить игрока? Я так понял надо назначать, выбрав Unique Actor?
И еще насчет LetterQst - таким должно быть ID письма? И можно ли поменять название в скрипте, назвав по-другому письмо?

Извините за кучу вопросов:(
« Последнее редактирование: 24 Октябрь, 2012, 17:06:01 от SuroviyWolf »

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #4 : 24 Октябрь, 2012, 18:34:11 »
0
И как в Specific Reference назначить игрока?
Нажимаешь Specific Reference, там при нажатии на кнопочку Cell выскочит список локаций, там выбири первую позицию Any (любой) и тогда сразу выскочит референс игрока, потом ОК.

И еще насчет LetterQst - таким должно быть ID письма? И можно ли поменять название в скрипте, назвав по-другому письмо?
ID своё, какое сам придумаешь. LetterQst - это свойство (переменная), её название не имеет значения, в скрипте называй как хочешь.
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн SuroviyWolf

  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #5 : 24 Октябрь, 2012, 19:01:33 »
0
Хорошо, попробую. Может я торможу, но как игра понимает какое именно письмо он должен принести?

ЗЫ: Опять же ничего не происходит в игре:(
« Последнее редактирование: 24 Октябрь, 2012, 19:51:37 от SuroviyWolf »

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #6 : 24 Октябрь, 2012, 20:19:03 »
0
Может я торможу, но как игра понимает какое именно письмо он должен принести?
А ты в окошечке, где вставлен скрипт, кнопочку Properties нажимаешь? Там надо твоим свойствам (переменным) назничить реальные объекты и прочее. Вот там для свойства LetterQst в списке предметов назначаешь своё письмо.
Для ВСЕХ свойств/переменных необходимо назначать соответствующие ID - для свойства pWIcourier надо назначить одноимённый квест, для MQ104 - квест MQ104. Т.е. "пустых" свойств быть не должно (в твоём случае, т.к. ещё бывают варианты, когда не надо прописывать свойствам ничего).

Вот именно так игра узнаёт, какое письмо курьер тебе должен принести. ;)
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн SuroviyWolf

  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #7 : 25 Октябрь, 2012, 15:54:20 »
0
Не работает в игре :( При смене локаций, при смене стадии мейн квеста - не приходит гонец :(

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #8 : 25 Октябрь, 2012, 18:41:06 »
0
Не работает в игре :( При смене локаций, при смене стадии мейн квеста - не приходит гонец :(
Так ты всем свойствам назначил правильные ссылки?
Если не работает, значит, что-то сделал не так, как написано, т.к. всё это проверено в игре и оно работает.

Присылай ESP и скрипты (скрипты и исходники), посмотрим, что там не так.
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн SuroviyWolf

  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #9 : 27 Октябрь, 2012, 22:31:36 »
0
Переделал еще раз. В переменных скрипта я и для AliasPlayer что-то пытался ввести. Решил оставить как есть - сразу получилось :) Ура! Огромное спасибо за помощь!!!

Оффлайн Kalian

  • *
  • Сообщений: 63
  • Репутация: 4.1
  • Пол: Мужской
    • Просмотр профиля
    • TesAll
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #10 : 09 Ноябрь, 2012, 00:27:58 »
0
Кто-нибудь в курсе:
1. Как скриптом можно открывать диалоговые окна? То есть, чтобы при активации открывалось диалоговое окно.
2. Как можно добавить AI Package скриптом?

Оффлайн defmotion3

  • *
  • Сообщений: 165
  • Репутация: 0.1
  • Пол: Мужской
    • Просмотр профиля
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #11 : 09 Ноябрь, 2012, 01:02:11 »
0
Кто-нибудь в курсе:

2. Как можно добавить AI Package скриптом?

В двух словах это мучение не описать - надо показывать,
просто посмотрите окно Alies в квесте бардов, суть в том, что когда актер выбирается в алиесы квеста, в этом окне указывается пакет, который он должен выполнять, пока в алиасах, как говорится, теперь в КС многое простое теперь сложно и не понятно зачем так .

ПС. вопрос  о том как добавлять в алиесы тоже можно посмотреть в этом квесте бардов (пример - компаньоны этим квестом добавляются в алиесы Барда) и начинают играть анимацию.

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

Есть еще хороший плагин SummonElinRing с исходным кодом, по нему можно хорошо научиться управлять этими процессами, я например так и делал, но это уже в прошлом.
« Последнее редактирование: 09 Ноябрь, 2012, 01:12:45 от defmotion3 »

Оффлайн Kalian

  • *
  • Сообщений: 63
  • Репутация: 4.1
  • Пол: Мужской
    • Просмотр профиля
    • TesAll
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #12 : 09 Ноябрь, 2012, 08:02:48 »
0
Красота, какие шикарные костыли.
То есть, скажем, мне сперва надо активировать квест, который бы запускал там элиас, который в свою очередь запускал бы активацию аи пакета. Так?

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #13 : 11 Ноябрь, 2012, 22:21:52 »
0
Красота, какие шикарные костыли.
То есть, скажем, мне сперва надо активировать квест, который бы запускал там элиас, который в свою очередь запускал бы активацию аи пакета. Так?
Не надо запускать и отключать квесты, это делается значительно проще.
В своём квесте делаются алиасы (AliasPackage1, AliasPackage2 и т.д.) с параметрами: галочки "Optional" + "Stores Text" + "Uses Stored Text", позиция Specific Reference без заполнения, в окне Alias Package Data добавляется нужный АИ пакет. Для каждого пакета делается свой алиас. (последние две галочки необязательны, но желательны, т.к. они нужны для работы событий на алиасе)

(ReferenceAlias Property AliasPackage1 Auto )

Для "добавления пакета" неписю достаточно одной команды AliasPackage1.ForceRefTo(akActor) и тогда запустится пакет №1 у непися akActor. Можно добавить для скорости запуска AliasPackage1.Evaluatepackage() .

Чтобы удалить/остановить пакет достаточно AliasPackage1.Clear() и akActor.Evaluatepackage() .

Квесты останавливать не надо, данные пакеты могут добавляться любому неписю (даже ГГ), срабатывает быстро и надёжно, пакеты не "слетают". Можно одному неписю добавить все эти пакеты сразу, тогда они будут как в списке АИ непися с приоритетом по очереди добавления (последний добавленный - самый приоритетный), и переключаться будут согласно своим условиям (т.е. получается копия списка АИ у непися).
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн Kalian

  • *
  • Сообщений: 63
  • Репутация: 4.1
  • Пол: Мужской
    • Просмотр профиля
    • TesAll
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #14 : 11 Ноябрь, 2012, 23:45:11 »
0
Я решил проблему иначе, точнее мне предложили другой способ.
У нпс атрибут имеет значение 15, при первичной активации нпс получает +50 к атрибуту и происходит Evaluate (перебор аи пакетов), после чего срабатывает условие у ForceGreet пакета (условие, что атрибут больше 50) и затем активируется пакет, после завершения работы пакета, задается старое значение атрибута, а пакет завершает работу.
Вот и все, правда это не работает пока что, это теоретический вариант, у меня нпс упорно не желает разговаривать, я проверяю пока что правильность условий у диалогов.

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #15 : 12 Ноябрь, 2012, 00:36:36 »
0
Тогда надо не атрибут, а фракция (!). Лучше всего добавлять и удалять свою фракцию. Даже разрабы пользуются именно фракциями для этих целей.

Но вот использовать ForceGreet я не советую, у этого варианта есть большая и смешная проблема: если непись начал разговор, а ГГ немного отойдёт от него, то разговор не прекратится, а только остановится, и при приближении ГГ к этому неписю... он опять начнёт говорить всё с самого начала, и так до бесконечности. Очень прикольно смотрится, когда непись как попугай одну и ту же фразу лопочет. :D К тому же, команда "выполнен пакет" срабатывает сразу с началом разговора, и если по условию, что после разговора непись должен куда-то идти, то он не станет договаривать, а сразу пойдёт и уже в дороге будет "договаривать" начатое.

Самое правильное и стабильное - сцена. К тому же не надо никаких пакетов, не надо условий и фракций, достаточно одной команды myScene.Start(), выключится сама, когда непись договорит (но можно и принудительно - myScene.Stop()).

Это делается так:
1. в своём квесте создаёшь сцену, актёра назначаешь: или готовый алиас (если говорить будет только один заранее известный непись), или "неопределённый" алиас (если говорить может любой непись, это вариант из поста выше).
2. Делаешь две фазы. Фаза №1 - условие на окончание "IsSceneActionComplite 1 == 1" (ация №1 выполнена), фаза №2 по умолчанию (без настроек).
3. Акция №1 - АИ пакет (пакет Trevel To Player 200 - идти к ГГ с радиусом 200), начало фаза№1 и конец фаза№2.
4. Акция №2 - Dialogue, в нём прописываешь нужные диалоги/топики. В начало и конец - фаза №2.

Всё.
Работает так: при команде myScene.Start() непись бежит к ГГ (работает пакет), когда прибегает - срабатывает условие окончания фазы и начинается вторая фаза - непись начинает говорить. Если ГГ отойдёт, то непись всё равно будет говорить и при этом последует за ГГ, ведь пакет не выключен, т.к. он работает на обе фазы. Когда непись всё договорит - сцена закончится и непись пойдёт согласно имеющимся у него пакетам. Если же непися во время разговора активировать, то диалог и сцена сразу закончатся. Можно поставить галочку No Player Activation в кнопочке Edit Actor Flags, тогда непися нельзя будет активировать и, естественно, прервать разговор.
Условие в топиках - только ID непися. Если непись "неопределённый", то можно "тип голоса" (ведь файлы озвучки придётся куда-то кидать по папкам).
« Последнее редактирование: 12 Ноябрь, 2012, 00:48:46 от AleksTirex »
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн Kalian

  • *
  • Сообщений: 63
  • Репутация: 4.1
  • Пол: Мужской
    • Просмотр профиля
    • TesAll
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #16 : 12 Ноябрь, 2012, 12:05:27 »
0
Это все выглядит слишком громоздко, конечно, жаль нет команды startconversation или там OpenDialogue, было бы проще, конечно. Даже нет команды на добавление аи пакета.
ForceGreet подходит тем, что диалог короткий, грубо говоря надо отдать команду, что нужно сделать и все, ничего сверх большего.
Неужели ForceGreet и сцена - единственные способы, позволяющие открыть окно с диалогами? Мне нужно только это.

Так, сейчас я прикрутил скрипт (делаю пока способом, что я описывал ранее). Крайне не хочу использовать сцену, поэтому такой вопрос.
Evaluate видимо срабатывает, но почему-то нпс не начинает говорить со мной, а говорит только тогда, когда я повторно жму Е на нем. Это проблема пакета?
« Последнее редактирование: 12 Ноябрь, 2012, 14:29:08 от Kalian »

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #17 : 12 Ноябрь, 2012, 14:56:30 »
0
Evaluate видимо срабатывает, но почему-то нпс не начинает говорить со мной, а говорит только тогда, когда я повторно жму Е на нем. Это проблема пакета?
Если после ты жмёшь "Е" и диалог начинается, то с условиями топика всё правильно, если только нет условия на окончание пакета.
Проверь правильность пакета ForceGreet, там есть радиус срабатывания топика, оптимальный радиус - 200.
Проверь, тот ли топик назначен в этом пакете.

Сам топик для такого пакета обычно имеет тип Normal (синий), тогда он будет срабатывать только при отработки пакета. Если топик оранжевый - Top-Level, то этот топик можно увидеть в списке вопросов у непися.

Сделай синий топик и с минимальными условиями - ID непися, проверь радиус срабатывания топика в пакете, и тогда должно будет заработать. И естественно, проверь правильность условий пакета.
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

Оффлайн Kalian

  • *
  • Сообщений: 63
  • Репутация: 4.1
  • Пол: Мужской
    • Просмотр профиля
    • TesAll
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #18 : 12 Ноябрь, 2012, 15:08:23 »
0
Если после ты жмёшь "Е" и диалог начинается, то с условиями всё правильно, если только нет условия на окончание пакета.
Must complete? Галка имеется.
Цитировать (выделенное)
Проверь правильность пакета ForceGreet, там есть радиус срабатывания топика, оптимальный радиус - 200.
Проверь, тот ли топик назначен в этом пакете.
Топик указан. Правда тут возникает проблема, ибо я использую DialogueFollower (я пока не переписал отдельно диалоги с квестами), а там несколько нужных мне топиков необходимо активировать.

Радиусы у меня по 150 (я взял шаблон ForceGreet) в свой пакет.
Он все равно начинает говорить после активации, может быть Evaluate поставить не в активацию, а в сам пакет?

Оффлайн AleksTirex

  • *
  • *
  • Сообщений: 529
  • Репутация: 57.3
  • Пол: Мужской
    • Просмотр профиля
    • Email
Re: Помощь в написании скриптов на языке Papyrus.
« Ответ #19 : 12 Ноябрь, 2012, 15:18:30 »
0
А ты уверен, что пакет срабатывает? Этот пакет работает так: когда непись находится в нужном месте (условие для поиска цели) он начинает искать цель (условие радиуса поиска), а когда цель обнаружена - непись идёт к цели на расстояние разговора (условие срабатывания топика), по достижению этой дистанции - разговор.
Так вот проверь, идёт ли непись к ГГ? Если непись не реагирует на наличие ГГ, то пакет не срабатывает. Непись должен сам подойти к ГГ на расстояние 150 (по твоим условиям).
Если этого нет, то проверяй правильность "добавления" пакета (или условия пакета).

 :PS: Evaluatepackage() - это команда на немедленный пересмотр пакетов, и добавить её в пакет никак, да и нет смысла. ;)
Будьте осторожны в своих желаниях, они могут исполниться!
Награды За огромные знания и желание делиться ими с форумчанами

 

Помощь новичку

Автор aposРаздел Мастерская 3D

Ответов: 45
Просмотров: 13342
Последний ответ 05 Август, 2008, 21:56:23
от blackadder
Сущность скриптов в TES

Автор LiLuРаздел Скриптинг под TES IV

Ответов: 1
Просмотров: 1700
Последний ответ 09 Февраль, 2008, 23:11:16
от Garin
Нужна помощь спецов по 3dMax

Автор KhronosРаздел Мастерская 3D

Ответов: 3
Просмотров: 1855
Последний ответ 25 Июнь, 2012, 17:43:03
от montgom
Помощь в диалогах

Автор -DARK-Раздел Мастерская TES IV

Ответов: 1
Просмотров: 934
Последний ответ 08 Сентябрь, 2010, 13:38:39
от Poison Angel
Словарь терминов TES. В помощь переводчику.

Автор GarinРаздел Мастерская TES IV

Ответов: 4
Просмотров: 1450
Последний ответ 19 Январь, 2015, 16:09:21
от zorgestein
Новая анимация походки женского персонажа для Oblivion. Помощь

Автор AkavirРаздел Анимация в TES: Morrowind, Oblivion, Skyrim

Ответов: 4
Просмотров: 5856
Последний ответ 22 Март, 2011, 00:22:04
от Garin
Нужна помощь с моделями

Автор Bleyfds1995Раздел Мастерская 3D

Ответов: 7
Просмотров: 1103
Последний ответ 03 Февраль, 2012, 19:50:23
от Bleyfds1995
Срочно нужна помощь Модмейкеров.

Автор MorviCoolРаздел Проекты под TES 4: Oblivion

Ответов: 10
Просмотров: 1382
Последний ответ 01 Август, 2011, 02:18:39
от Roland
[Опрос] Спутники - зло или помощь?

Автор TiaraРаздел TES V: Skyrim, Dawnguard, HearthFire, Dragonborn

Ответов: 83
Просмотров: 3694
Последний ответ 27 Январь, 2013, 16:25:04
от ORK
Нужна помощь помоделрованию шмота! Посоветуйте как сд

Автор ShinigammiРаздел Мастерская 3D

Ответов: 19
Просмотров: 1382
Последний ответ 27 Февраль, 2012, 01:08:53
от Майк

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal