• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №91
написано: 18 декабря 2012, 10:45
| Отредактировано: Dsion - 18 декабря 2012, 10:47
Да, как-то все сложно, я думал скрипт на квест вешать. В том то все и дело, что предметы ванильные, и не хочется их скриптами портить, иначе конфликтов будет немерено!
Меня интересует куда больше Quest Objectives. Закончить все понят поставить set completed. А вот как их вернуть назад?! Что они ещё не выполнены?! Хм, посмотрю на примеру собирания шкур!
MyQuest.SetObjectiveCompleted(10, false) - Вот так снимается флаг "выполнено" =) Если предметы ванильные, то 2й вариант подойдет. А скрипт вешается на Алиас игрока. Никаких проблем и конфликтов не будет...
Ну если нужно прицепить скрипт именно к квесту, можно сделать через з... более хитро. Скажем, каждые 5 секунд идет проверка инвентаря игрока и установка/снятие нужных флагов...
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №92
написано: 18 декабря 2012, 10:55
| Отредактировано: VIPerMX - 18 декабря 2012, 10:56
MyQuest.SetObjectiveCompleted(10, false) - Вот так снимается флаг "выполнено" =)
Аааа, а вот это уже другое дело =) В общем сделаю в квест алиаса плеера и на него повешу скрипт, если вещь есть, то сет комплитед, если нет, сет комплитед фолс =)
Да, только на какую функцию это повесить?! На сброс или поднятие предмета?!
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №93
написано: 18 декабря 2012, 10:59
| Отредактировано: Dsion - 18 декабря 2012, 11:16
OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) - что-то попало в инвентарь OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) - что-то ушло из инвентаря
Ага. Для алиаса там два ивента тебе понадобятся: OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) - что-то попало в инвентарь OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) - что-то ушло из инвентаря Если что не выйдет, пиши. Я тогда полный скрипт сброшу...
так я делал, тогда каждый раз когда берешь или удаляешь предмет все время высвечивается на экране задание!
Ну а как же... Берешь предмет: высвечивается "Найти предмет #1: выполнено". Удаляешь предмет: появляется "Найти предмет #1"... Или тебе надо, чтоб не было такого?
Может, к черту вообще objective'ы? Например, npc говорит "собери мне то и то". А когда ты с ним говоришь в следующий раз, он единоразово проверяет, есть ли у тебя всё необходимое. Если есть, забирает и дает награду...
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №100
написано: 18 декабря 2012, 13:52
| Отредактировано: VIPerMX - 18 декабря 2012, 13:59
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) (TQ01 As TQ01Script).OnItemAddedOrRemoved(akBaseItem) EndEvent
Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) (TQ01 As TQ01Script).OnItemAddedOrRemoved(akBaseItem) EndEvent
Второй скрипт к самому квесту:
Code
Scriptname TQ01Script extends Quest
Form Property Item1 Auto Form Property Item2 Auto Form Property Item3 Auto
Function OnItemAddedOrRemoved(Form akBaseItem) ;Каждый раз при изменении инвентаря игрока If akBaseItem == Item1 || akBaseItem == Item2 || akBaseItem == Item3 UpdateQuestState() EndIf EndFunction
Function UpdateQuestState() ;При добавлении/удалении одного из искомых предметов
Actor Player = Game.GetPlayer() Int TotalItems = 0
If TotalItems < 3 UpdateStage(0) Else UpdateStage(1) EndIf
EndFunction
Function UpdateObjective(Int Objective, Bool Flag) ;Меняет состояние "выполнено", если нужно. If Flag == 1 && IsObjectiveCompleted(Objective) == 0 SetObjectiveCompleted(Objective, 1) ElseIf Flag == 0 && IsObjectiveCompleted(Objective) == 1 SetObjectiveCompleted(Objective, 0) SetObjectiveDisplayed(Objective, abForce = True) EndIf EndFunction
Function UpdateStage(Bool Flag) ;Меняет стадию квеста, если нужно. If Flag == 1 && GetStage() == 10 SetStage(20) ElseIf Flag == 0 && GetStage() == 20 SetStage(10) EndIf EndFunction
Но я этого не проверял и 80% вероятность, что оно не работает. Еще функцию UpdateQuestState() надо выполнить при старте квеста. Вдруг у игрока уже всё есть?
Изменение репутации для пользователя Demolir
DemolirOffline
Сообщение №102
написано: 18 декабря 2012, 16:57
| Отредактировано: Demolir - 18 декабря 2012, 17:06
В общем задача такова, есть некий список предметов, которые игрок должен собрать. когда соберет все предметы квест переходит на новую стадию, но если игрок выкинул один из предметов, стадия возвращается. Причем к каждому предмету свой Квест обджектив.
А что мешает взять за основу аналогичный дефолтный квест, например, по по сбору камней Берензии? Там как раз выполняются все эти условия. Кроме квеста на камни, есть еще и другие, подобные. Там все работает как нужно, т.е. взял предмет - получил SetObjective "У вас есть 1 предмет", выбрасываешь - SetObjective "У вас есть 0 предмет". Даже если игрок наберет нужное количество предметов (квест обновится), а потом решит выбросить что-то, чтобы не было ошибки - выставить дополнительное условие в диалоге, или в скрипте, или "где-там-еще" - обновление не только при условии GetStage(), но и при GetPlayer().GetItemCount(Object) >= 5 (т.е. должно быть 5 предметов Object в инвентаре у игрока).
Ну если задача - это сбор каких-нибудь ванильных и не уникальных предметов, то на них нельзя повесить скрипт или создать алиас. В общем, нормальный я скрипт написал. Только я уже придумал чуть более оптимизированную версию... Это моя беда... Я редко бываю доволен созданным, постоянно стремлюсь его доработать и по этой причине ничего не довожу до конца Прям безумие какое-то... В общем, VIPerMX, если захочешь оптимизированную версию, говори - я сброшу в приват...
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №104
написано: 18 декабря 2012, 22:02
| Отредактировано: VIPerMX - 19 декабря 2012, 00:17
С тем учетом. как себя любят скрипты в Скайриме вести, даже и не знаю... стоит ли это ради пятиминутного квеста то?! Я подумаю как я вообще хочу дальше реализовать квес., если получиться идея задуманная, то можно будет реализовать проще. Не сильно запариваясь в скриптах!
Можно ли сделать так, чтоб игрок мог активировать трайгер, положив в него определенный предмет (посредством хавока, зажатой Е) ?! Мне кажется, я где-то видел этот вопрос уже то ли тут, то ли ещё где!
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №105
написано: 19 декабря 2012, 08:45
| Отредактировано: Dsion - 19 декабря 2012, 08:48
Можно... Но не для тех, кто боится скриптов, длиннее двух строчек Не в обиду...
Да я вроде не боюсь... я недавно этим занимаюсь, и очень много попросту не знаю! А что бы создать что-то более интересное чем "сходи убей Вора и принеси амулет", надо больше практики и знаний.
На счет Стадий квеста. Я сделал все по изначальному плану, просто в виде фильтра создал проверку на список нужных предметов. Но все-ровно касяк остался, если квест перешел на стадию "Я собрал все предметы", то когда выкидываешь предмет снова, на стадию сбора квест не переходит. В принципе не страшно... но хочется красиво.
Давай я попробую ваш оптимизированный скрипт.
Изменение репутации для пользователя stel
stelOffline
Сообщение №107
написано: 1 января 2013, 22:16
| Отредактировано: stel - 1 января 2013, 22:21
Столкнулся с такой проблемой. Перевожу скрипт он там формирует несколько текстовых строк которых потом выводит на экран первая выводится нормально русским языком а вторая получается какая то краказябра (в английском варианте все норм). Не понимаю что не так...
Небольшой кусок кода с выводом этой строки (строк)
if Quality <= 55 Debug.Notification(" Запах как от " + RaceString + " " + SexString + " от такой крови меня стошнит! (Качество: " + (Quality as INT) + "%)") elseif Quality <= 65 && Quality > 55 Debug.Notification(" Эта вонь " + RaceString + " " + SexString + " плохой крови. (Качества: " + (Quality as INT) + "%)") elseif Quality <= 75 && Quality > 65 Debug.Notification(" Не представляю себя пьющим кровь этого " + RaceString + " " + SexString + " (Качества: " + (Quality as INT) + "%)") elseif Quality <= 85 && Quality > 75 Debug.Notification(" Мысли что я пью кровь этого " + RaceString + " " + SexString + " меня сейчас стошнит. (Качества: " + (Quality as INT) + "%)") elseif Quality <= 95 && Quality > 85 Debug.Notification(" Запах крови " + RaceString + " " + SexString + " не сильно приятный. (Качества: " + (Quality as INT) + "%)") elseif Quality > 95 && Quality < 105 Debug.Notification(" Кровь " + RaceString + " " + SexString + " имеет некий слабый привкус. (Качества: " + (Quality as INT) + "%)") elseif Quality >= 105 && Quality < 115 Debug.Notification(" Эта кровь " + RaceString + " " + SexString + "'не так уж и плоха. (Качества: " + (Quality as INT) + "%)") elseif Quality >= 115 && Quality < 125 Debug.Notification(" Запах крови этого " + RaceString + " " + SexString + " очень даже ничего. (Качества: " + (Quality as INT) + "%)") elseif Quality >= 125 && Quality < 135 Debug.Notification(" Жду недождусь пока вопьюсь в шею " + RaceString + " " + SexString + " (Качества: " + (Quality as INT) + "%)") elseif Quality >= 135 && Quality < 145 Debug.Notification(" Вкус этой крови " + RaceString + " " + SexString + " само удовольствие (Качества: " + (Quality as INT) + "%)") elseif Quality >= 145 Debug.Notification(" Немогу определить запах крови " + RaceString + " " + SexString + " . Он такой как все! (Качества: " + (Quality as INT) + "%)") endif
Добавлено (02.01.2013, 02:16) --------------------------------------------- После многих попыток я выяснил если удалить RaceString все становистя нормально. Вот эта функция
Причем название рассы возвращает нрмально русским шрифтом когда все остально кракозяброй. Может кто подсказать может существет другой способ узнать название рассы и выдать ее название?
Изменение репутации для пользователя Demolir
DemolirOffline
Сообщение №108
написано: 1 января 2013, 23:18
| Отредактировано: Demolir - 2 января 2013, 14:08
Может кто подсказать может существет другой способ узнать название рассы и выдать ее название?
Мм...я тоже пока не смог найти ответ на этот интересный вопрос, хотя столкнуться с ним пришлось в процессе перевода одного плагина. Одно могу сказать точно, дело тут не в скриптах и не в редакторе, а в особенностях локализации игры. Дело в том, что английский шрифт (латиница) прекрасно читается в уведомлениях, и тут неважно есть в них включения в виде данных или нет. Еще заметил, что эта проблема возникает только со строковыми данными, но не с числовыми. Пока что мне так же пришлось убрать включения из уведомлений, чтобы они нормально отображались на русском.
Неудачные попытки исправить: - замена Notification на MessageBox - перевод текста уведомления в данные String. Т.е. Debug.Notification(TextString+...+...) - смена языковой раскладки клавиатуры (собственно заранее знал, что дело не в этом)) Хотя и сомнительно, что дело тут в редакторе, но если не получится решить проблему с его помощью, то такие моды скорее всего придется браковать в будущем, либо оставлять подобные уведомления без перевода. Мало кто захочет править исходники файлов игры, или проводить некие сомнительные операции, только для того чтобы у него корректно заработал какой-то 1 мод.
Вообщем, конкретный ответ пока не нашел. Возможно кто-то отпишется, кто знает решение.
Т.е. фактически сформировать название расы прямо указанной строкой на основе её, расы, ИД. Только надо ИД рас выяснить, я 1 нордам присвоил" от фонаря".
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Demolir, заметь, ты опять пытался присвоить строковой переменной результат функции. А прямая запись точно также себя ведёт?
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Так в том то и дело, что строковые данные как раз отображаются в уведомлениях, но не отображается текст самого уведомления Т.е если использовать Debug.Notification(" Вкус этой крови " + RaceString +....) , то данные RaceString читаются на русском, а " Вкус этой крови " идет кракозябрами. Я в прошлом примере попробовал использовать для этого не библиотеку Debug, а непосредственно сообщение Message, в надежде, что это что-то изменит
Demolir, да, до меня наконец дошло, в чём проблема. Хотя ее корни совсем непонятны. Идея одна - оформлять этот текст так, чтобы можно было его "перевод" организовывать через внешние стринг-файлы.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Народ кто нибудь может вкраце обьяснить мне азы работы со скриптами я только начал разбираться с СК а в скриптах вообще НОЛЬ !буду очень благодарен за это.
Добавлено (12.01.2013, 23:16) --------------------------------------------- Вот у меня вопрос после того как посмотрел мод Forgotten mastery в игре там есть некоторые заклинания которые создают в небе сферу стреляющую лучами света или молниями не подсакжете-ли как выглядит скрипт обеспечивающий такой еффект если подскажете буду очень благодарен.
Добавлено (19.01.2013, 21:08) --------------------------------------------- Помогите со скриптами оч надо!
Играю в Mass Effect 3, пишите в ЛС поиграем вместе!
Пдскажите, плиз, как быть. Хочу создать контейнер, который можно носить с собой. Точнее, хочу создать итем, который дает доступ к удаленному контейнеру. Итак, путем изучения и компиляции разных скриптов из других модов получилось следующее:
ObjectReference Property [удаленный контейнер] Auto
В этом случае удаленный контейнер активируется в момент взятия итема в инвентарь, что не совсем удобно. Приходится каждый раз выбрасывать итем наружу и снова брать его, чтобы получить доступ к контейнеру. Подскажите, как изменить скрипт, чтобы итем активировался непосредственно из инвентаря?
slastik, Укажите на конкретный объект. К примеру вот так:
Указываем в качестве родителя ObjectReference, «расширяя» этим его свойства. Мы можем указать и другого родителя (например, Form, Actor, Activator), но в данном случае мы хотим приобрести свойства именно ObjectReference. После этого нам станут доступны функции, описанные в родительском объекте, например:
Function Activate (ObjectReference akActivator) Function AddItem (Form akItemToAdd, int aiCount, bool abSilent) Function Disable (bool abFadeOut), которые указаны в ObjectReference.
Изменение репутации для пользователя Snakesalamandra
Вот у меня вопрос может скриптеры опытные знают как сделать так чтобы заклинание например наносяшее урон ядом в течении 10 сек после истечения 10 сек еффект перебросился на ближайшую цель или после смерти врага он перебролсился на ближ цель!подскажите кто знает пожалуйста!
Играю в Mass Effect 3, пишите в ЛС поиграем вместе!
Подскажите, как просмотреть содержимое скрипта, который имеет только файл с расширением "pex". В СК он не открывается, а файла "psc" с ним нет. Может есть отдельные приложения для просмотра/редактирования скриптов?
- Что это за горы стоят? - А, это орки бегут!
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)