• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Demolir, посмотрел вики, со свойствами там достаточно просто - они создаются непосредственно в скрипте. Ни в коем случае не в событии. Т.е.
Code
ScriptName MyScript
int property MyProp auto
...
EndScript
А дальше используется как раньше - через ИД объекта-владельца. Т.е. скрипт с определением свойства должен быть прикреплён к ч.-л. - квесту, актору или объекту.
Добавлено (21.11.2012, 09:09) --------------------------------------------- Кстати, а что за задача, для которой нужно
Цитата Demolir
построить скрипт, который будет выполняться исключительно в режиме меню (если блоков GameMode и MenuMode больше не существует)?
Может можно обойтись предоставленными событиями.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
VIPerMX, хм, а точно OnActivate - это Function, а не Event ? См. четвёртый пример в шапке темы. Ну и попробуй просто скобки убрать. Т.е. сделать не Enable(), а Enable
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №64
написано: 21 ноября 2012, 12:31
| Отредактировано: VIPerMX - 21 ноября 2012, 13:12
VIPerMX, хм, а точно OnActivate - это Function, а не Event ? См. четвёртый пример в шапке темы. Ну и попробуй просто скобки убрать. Т.е. сделать не Enable(), а Enable
На функцию и евент ругается одинаково, а если убрать скобки, так и вовсе, орет что нет значения! Странно, точно так же было на вики по CK один в один Enable и IsEnabled. Может тут тоже им надо присваивать значения, как с предметами?!
[EDIT]- Видимо я что-то напортачил, поставил ещё раз евент и все дейтвительно заработало =) Спасибо. И вот ещё вопрос, как сделать так, чтоб мой MyRef1 дизейблился сам через определенное время?!
VIPerMX, только скриптом, вестимо. Если это именно Reference ID, то, няп, нужно создавать квест, к которому прикрепляется скрипт, отсчитывающий время и задизэйбливающий этот ИД.
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
по второму вопросу - используйте регистратор в квестовом скрипте RegisterForSingleUpdate(), им можно значительно задержать исполнение скрипта.
Спасибо большое, с первым я разобрался вроде как, кстатиа что значит import Game и import Debug?! А на счет второго, можно поподробнее, а то я недавно только со скриптами работаю. Я так понимаю надо создать квест а в него запилить скрипт?!
няп, эти команды подключают к файлу библиотеки функций Game и Debug соответственно. Иначе компилятор просто не поймёт, что за функцию (стандартную) ты использовал. Если функции из этих библиотек не используются, можно смело убить эти строки. Если используется такая функция только раз и в одном месте, теоретически можно использовать вызов вида Game.FunctionName (FunctionName - имя вызываемой функции библиотеки Game)
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №69
написано: 21 ноября 2012, 20:45
| Отредактировано: VIPerMX - 21 ноября 2012, 21:35
Не подскажите пожалуйста скрипт, как сделать двери, открывающиеся только по трайгеру, без взаимодействия через "Е"
Не совсем понял вопрос. В смысле, чтобы при подходе к двери срабатывал триггер-бокс и дверь сама открывалась? И что значит открывалась - открытие замка, или визуальное открытие двери?
Вообщем, если используется триггер-бокс, то можно проверить такую конструкцию:
Demolir, Спасибо большое за некоторые пояснения. С дверьми я справился, просто забыл поставить онтрайггер и долго не мог понять что не так =) У меня похожий скрипт, я ещё добавил в него БлокАктивейшен, чтоб не позволить игроку взаимодейстовавать с дверью напрямую!
Вообще заметил особеность, пока я жду ответа на форуме до всего дохожу сам =)
Ну это же только +, тем более, что авторы оставили нам почти что библиотеку для изучения, в виде уже готовых скриптов игры. Всегда есть где покопаться и найти ответ
Не судите, да не судимы будите...
Изменение репутации для пользователя ArcherL
ArcherLOffline
Сообщение №73
написано: 23 ноября 2012, 13:06
| Отредактировано: ArcherL - 23 ноября 2012, 13:19
Как сделать бесконечный цикл? Так же как и в C++ или по другому?
Хочу сделать источники света, которые постоянно то включаются то выключаются на очень большой скорости, замутить клуб так сказать Пока ответа нет буду пытаться сам делать.
Изменение репутации для пользователя Demolir
DemolirOffline
Сообщение №74
написано: 23 ноября 2012, 23:06
| Отредактировано: Demolir - 23 ноября 2012, 23:10
Можно использовать для этого команду регистрации RegisterForSingleUpdate() с заданным значением Integer. Правда события с частотой менее 0.5 сек плохо обрабатываются игрой, часто накладываются друг на друга. Что сделать - особенность папируса...
Раньше с функцией SetQuestDelay было намного проще в этом смысле, можно было задать частоту обработки скрипта от .1 до .000001 сек. Теперь нет.
Привет! У меня такой вопрос, возможно взять анимацию с другого мода и приделать к своему? Например: есть там мод в котором бард не только поет но допустим и танцует, возможно взять эту анимацию (с помощью скриптов я так думаю), и приделать для своих целей в своем моде? Понимаю что описывать весь процесс наверно сложно, но если возможно то хотя укажите в какую сторону копать, там какой софт нужен и т. д. Спасибо.
Arkan000, мне кажется, надо просто посмотреть, как это сделано в том моде, и сделать так же. В крайнем случае, взять того персонажа и переделать на свой вкус. Если есть образец - то это наилучший путь, чтобы научиться делать так же.
мне кажется, надо просто посмотреть, как это сделано в том моде
Вот я и не знаю как посмотреть, открываю Кит, ставлю тот мод активным, а где искать, а в персонаже ничего нет, смотрел АИ пакеты, там все Скайримовские (есть, спать, сэндбокс и т.д.). Не знаю как скрипты мода открыть, может там все спрятано, ну типа функции и т. д.
Arkan000, Грамотный мододел всем своим нововведениям даёт одинаковые приставки по которым их легко найти. Кроме того, редактор помечает звёздочкой каждый изменённый модом объект.
Не майтесь дурью, загрузите мод в Tes5Edit, и там всё прекрасно видно - в разделе загруженного плагина будут только те объекты, что изменил или добавил этот плагин. Данный редактор - первое средство для изучения чужих трудов
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Не майтесь дурью, загрузите мод в Tes5Edit, и там всё прекрасно видно - в разделе загруженного плагина будут только те объекты, что изменил или добавил этот плагин. Данный редактор - первое средство для изучения чужих трудов
<a class="link" href="http://nick-name.ru/sertificates/278209/" rel="nofollow" target="_blank"> border="0" alt=""/</a> Да, мы бандиты и бродяги, как злословит молва, Мы попадаем в передряги, помня эти слова. Смотри вперед и не сдавайся ты на милость судьбе! Предай их всех, останься верен себе. (Канцлер Ги - Кантри Бреган Д'Эрт)
Изменение репутации для пользователя VIPerMX
VIPerMXOffline
Сообщение №82
написано: 10 декабря 2012, 12:04
| Отредактировано: VIPerMX - 10 декабря 2012, 12:22
Такой вот вопрос. Есть скрипт, который кастует на игрока бафф. Я повесли скрипт на стул, и хочу сделать так, чтоб скрипт активировался только в том случае, если игрок сидит на этом стуле. В скрипте есть Утилити вайт, т.е. игрок садиться, ждет 30 секунд, а на него кастуется бафф. Но беда в том, что если игрок слезет со стула, не дождавшись каста, каст все ровно поставиться!
В обще вот скрипт, стрелочкой я выделил то, что меня интересует - скрипт компилируется но работать не хочет, при использовании фурнитура ничего не происходит вообще!
Второй вопрос, можно ли сделать в скрипте пропуск дней. что-то вроде гаснет экран и в игре проходит несколько дней!
Изменение репутации для пользователя Demolir
DemolirOffline
Сообщение №83
написано: 10 декабря 2012, 14:05
| Отредактировано: Demolir - 10 декабря 2012, 14:12
скрипт компилируется но работать не хочет, при использовании фурнитура ничего не происходит вообще!
Операция "или" (Elseif) тут не нужна, т.к. производится проверка и на актера и на использование маркера. И непонятно - зачем в функции каста дважды указывается цель? Вообщем:
Code
if akActionRef == Game.GetPlayer() if Bench.IsFurnitureMarkerInUse(0, true) ; ба-бах endif endif
; либо так
if (akActionRef == Game.GetPlayer()) && (Bench.IsFurnitureMarkerInUse(0, true)) ; ба-бах endif
И непонятно - зачем в функции каста дважды указывается цель?
Не знаю, я так у бетседки подглядел!
А вы скрипт перемотки времени не знаете?! Второй вопрос, можно ли сделать в скрипте пропуск дней. что-то вроде гаснет экран и в игре проходит несколько дней!
можно ли сделать в скрипте пропуск дней. что-то вроде гаснет экран и в игре проходит несколько дней!
На счет пропуска дней не знаю, а пропуск часов точно можно. Это даже не совсем "пропуск", скорее глобальная установка счетчика часов/дней в определенное значение. Собственно попробовать так же использовать и переменную GameDay:
GlobalVariable Property GameDay auto float Pass = GameDay.GetValue()
На счет пропуска дней не знаю, а пропуск часов точно можно. Это даже не совсем "пропуск", скорее глобальная установка счетчика часов/дней в определенное значение. Собственно попробовать так же использовать и переменную GameDay:
И ещё раз спасибо. Все работает как надо. На счет эффекта, мне он собственно и не понадобиться, так как с пропуском у меня игрок телепортится из одной локации в другую! Так что, присутствует экран загрузки, и пропуск времени выглядит более естественным! И опять вопросы! Можно ли в Debug.MessageBox выравнивать текст по сторонам, или переходить на новую строчку, типо как в хтмл <p> <center> и т.д.
Можно ли в Debug.MessageBox выравнивать текст по сторонам, или переходить на новую строчку, типо как в хтмл <p> <center> и т.д.
Так можно делать только в игровых книгах (ставить тэги), но не в библиотеках Debug. Кое-какие тэги можно использовать в текстах сообщений MessageID.Show(), но там вроде только строковые и числовые значения принимаются, но не отступы, пробелы и т.д. По крайней мере, я не видел.
И снова я. В общем, какая нужна функция, чтоб quest objectives ставился в статус complited только в том случае, если определенный предмет лежит в инвентаре игрока. но когда игрок его скидывает Quest Objectiv сбрасывался. (надеюсь понятно)
В общем задача такова, есть некий список предметов, которые игрок должен собрать. когда соберет все предметы квест переходит на новую стадию, но если игрок выкинул один из предметов, стадия возвращается. Причем к каждому предмету свой Квест обджектив.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №89
написано: 18 декабря 2012, 10:22
| Отредактировано: Dsion - 18 декабря 2012, 10:24
И снова я. В общем, какая нужна функция, чтоб quest objectives ставился в статус complited только в том случае, если определенный предмет лежит в инвентаре игрока. но когда игрок его скидывает Quest Objectiv сбрасывался. (надеюсь понятно)
В общем задача такова, есть некий список предметов, которые игрок должен собрать. когда соберет все предметы квест переходит на новую стадию, но если игрок выкинул один из предметов, стадия возвращается. Причем к каждому предмету свой Квест обджектив.
Вот два варианта. Не факт, что они лучшие Может, кто-то придумает что-то проще...
1. Если каждый из этих предметов уникальный и создан тобой лично, можно к ним прецепить скрипт такого типа:
Code
Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) ;при смете контэйнера If akNewContainer == Game.GetPlayer() ;установить обджэктив в комплитэд. проверить, собраны ли все предметы. если собраны, сменить стадию на "всё собрано". Else ;снять комплитэд. сменить стадию на "не всё собрано". EndIf EndEvent
2. Более универсальный вариант. Отслеживаются любые изменения инвентаря игрока. Скрипт цепляется к игроку.
Code
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) ;если предмет в твоём списке, установить коплитэд. Сменить стадию, если нужно. EndEvent
Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) ;если предмет в твоём списке, снять коплитэд. Сменить стадию, если нужно. EndEvent
Вот. Ну это так, примитивненько... Может, сейчас кто-то с меня посмеется и расскажет, как это надо делать. Если нужны совсем полные скрипты, пиши в пм.
Да, как-то все сложно, я думал скрипт на квест вешать. В том то все и дело, что предметы ванильные, и не хочется их скриптами портить, иначе конфликтов будет немерено!
Меня интересует куда больше Quest Objectives. Закончить все понят поставить set completed. А вот как их вернуть назад?! Что они ещё не выполнены?! Хм, посмотрю на примеру собирания шкур!
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)