• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя LordVadim
LordVadimOffline
Сообщение №1021
написано: 22 апреля 2014, 18:03
| Отредактировано: LordVadim - 22 апреля 2014, 18:10
Спасибо ребята! С вашей помощью скрипт закончен и полностью готов к работе. А мы можем переходить к следующим, не менее легким скриптам! Также выяснил почему работал ни с 1 раза он, оказывается пробелы после обьявления события в коде нежелательны
Можно ли на подобии как в Morrowind реализовать "активируемые" итемы, которые работают как спеллы? А то тут только либо постоянный эффект на себя, если броня, либо эффект при ударе, если оружие. А активируемых вещей, как в морровинде, либо на себя, либо на цель, как спелл - даже и не видел..
anton, у перка есть только одно событие - это срабатывание самого перка (это точно так же, как в топиках, сценах и стадиях квеста). В скрипте перка пишутся команды прямо в теле, без всяких функций и событий. Это событие возникает при активации чего-либо носителем перка, т.е. когда хозяин перка что-то активирует (естественно, если активация удовлетворяет условиям перка).
Это очень удобно для отслеживания действий ГГ - что он трогает/берёт/нажимает и т.д. Т.к. при этом не надо вешать на все потенциальные предметы свои скрипты, достаточно одного в перке.
Изменение репутации для пользователя anton
antonOffline
Сообщение №1030
написано: 8 мая 2014, 15:56
| Отредактировано: anton - 8 мая 2014, 16:10
AleksTirex, спасибо. Дело в том, что я так и предположил, написал простенький вывод сообщения в скрипте, а компилятор меня отругал. Но сейчас попробовал снова, и ошибок уже не было. Чудеса, очередной раз подтверждающие, что ночью надо спать, а не коды писать ! :) Нет, всё таки это сейчас я ошибся - не компилируется скрипт ! Вот как он выглядит:
Код
Scriptname _Anton_ADW_GlidingPerk extends Perk
Debug.Notification("Current movement speed: " + Game.GetPlayer().GetAnimationVariableFloat("Speed"))
;END FRAGMENT CODE - Do not edit anything between this and the begin comment
А должно быть так. Разницу заметил?
(!!!) Скрипты перков, топиков, стадий, сцен, пакетов и всех тех, где есть окно для написания команд без применения событий и функций, сами такие скрипты вручную править и компилировать не надо, а надо писать команды именно в этих окошках, а не открывать редактором эти служебные скрытые скрипты, тогда скрипт правильно будет создан и скомпилирован. Иначе будет результат описанный в предыдущем посте Антона.
******* В данном типе скриптов точки с запятой ";" не работают как в обычных скриптах, и всё то, что после них тоже скрипту необходимо, он этим пользуется. Поэтому там ничего нельзя менять и удалять (!). ******* Добавлять кнопкой Add такие скрипты нельзя, их надо создавать: в окне для кода ставишь точку с запятой ";" и компилируешь, закрываешь объект, опять открываешь и желательно переименовать на своё название/ID (кнопка Rename), закрываешь,опять открываешь свой перк/топик/сцену и т.д. и уже можешь писать команды и назначать свойства (если свойства назначить раньше,то они потеряются). Иначе скрипт не "привяжется" к объекту.
AleksTirex, точно, я не нашёл в игре ни одного перкового скрипта, в котором не использовались бы фрагменты.
Но в окошке перка скрипт не пишется, только через кнопку <добавить>. (при этом сам скрипт компилируется без ошибок) В квестах я такие скрипты делал (для стадий квеста), там именно в самом окошке он пишется и компилируется, и всё работает. Но добавляя такой "фрагментный" скрипт в Перк, я в игре ничего не получаю. Бегаю, хватаюсь за всякие вещи, но сообщений нету.
Добавлять кнопкой Add такие скрипты нельзя, их надо создавать: в окне для кода ставишь точку с запятой ";" и компилируешь, закрываешь объект, опять открываешь и желательно переименовать на своё название/ID (кнопка Rename), закрываешь,опять открываешь свой перк/топик/сцену и т.д. и уже можешь писать команды и назначать свойства (если свойства назначить раньше,то они потеряются). Иначе скрипт не "привяжется" к объекту.
Добавлено (09 Мая 2014, 00:36) --------------------------------------------- anton, я сослепу и не заметил, что ты пытаешься повесить скрипт на "обычный" Entry Point, а скрипты в перке можно вешать только наEntry Point Activate. На других типах перков скрипт по определению не сможет работать, ведь события то они не "хавают", так и самой возможности работы такого скрипта попросту нет, не говоря уже об остальном.
AleksTirex, я еле допёр как оно должно работать !!!
Когда ты написал, что я не там скрипт вставляю и про Entry Point = Activate я всё понял ! И всё это время я пытался скомпилировать тот фрагмент. И несмотря ни на что, он таки скомпилировался. (там нельзя было обычным копи-пастом делать, там оказыватся копипастить надо только внутренность функции)
Но ...... всё равно ничего в игре не пишется Продолжу завтра, может условия другие поставлю...
anton, судя по всему, ты хотел сделать условия "если надеты крылья"? Тогда замени HasKeyword на WornHasKeyword. Это будет == "Если на ГГ надета шмотка с кейвордом крыльев". (иначе ты проверял "есть ли у ГГ такой кейворд", а откуда же он возьмётся у самого ГГ?)
Изменение репутации для пользователя anton
antonOffline
Сообщение №1036
написано: 9 мая 2014, 07:01
| Отредактировано: anton - 9 мая 2014, 07:05
AleksTirex, Ррр, тем кто придумал такой способ добавления скрипта в Перк надо руки по отрывать, по самую шею !
Я в общем потратил более пяти часов !!! только на то, чтобы добиться работоспособности этого простенького скрипта (час потратил только на то, чтобы догадаться не копировать в то окошко весь скрипт, а только три строчки самой функции)
Если не делать точь в точь как ты написал, скрипт не привязывается. (при этом ошибок не пишет, чудесно компилируется, просто - не работает в игре и всё)
Чтобы определить, что не работает именно скрипт, а не условия например (как мне казалось), пришлось кучу экспериментов поставить. А это каждый раз запусти игру, загрузи сейв, добавь крылья, активируй, побегай по локации, подёргай кого то, и т.п. ... и всё это время, время, КУЧА времени ! Я уже забыл, зачем мне всё это было нужно !!
****************************************************************************************** А теперь, когда меня попустило, хочу ещё вопросик задать - есть ли способ поменять игровую переменную "fJumpHeightMin" без скрипта (например как в перке, где некоторые параметры можно умножать на число) ?
есть ли способ поменять игровую переменную "fJumpHeightMin" без скрипта (например как в перке, где некоторые параметры можно умножать на число) ?
Если не ошибаюсь, то в СК вообще нет доступа к этим настройкам, кроме прямого их изменения в соответствующем разделе.
А чем скрипт плох? Можно сделать имитацию перка через абилку на ГГ. В абилке (но не на эффекте) ставишь условия "Если одеты крылья". И на эффекте скрипт:
Event OnEffectStart(Actor akTarget, Actor akCaster) Game.SetGameSettingFloat("fJumpHeightMin", fNewValue) endEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster) Game.SetGameSettingFloat("fJumpHeightMin", fdefaultValue) endEvent
Добавлено (09 Мая 2014, 16:14) --------------------------------------------- anton, и даже больше можно сделать - добавить второй эффект (в абилке на нём добавить условие "если бежит") с новым скриптом, тогда при беге можно будет прыгать ещё выше, нежели при прыжке с места. (этот параметр ещё больше увеличить).
AleksTirex, скрипт тоже хорошая штука, просто я в последнее время открыл для себя столько новых способов сделать что то без него. Это и Перки со своими условиями, и Алиасы и Маг-эффекты. Всё это позволяет обойтись возможностями самого движка, что не только очень радует, но и расширяет совместимость, да и некоторой стабильности тоже добавляется (ведь мод получается проще). Ну в общем нравится мне и всё тут А абилку я обязательно попробую, хотя если скрипт использовать, можно и просто в нужном маг-эффекте при вызове это сделать...
И попутно ещё вопросик: * есть маг-эффект длящийся 10 дней, запускается зельем, при этом добавляя ГГ заклинание переключатель (ну и крылья тоже ). * есть маг-эффект длящийся 1 сек, запускается другим зельем (убирая крылья, по кейворду (без скрипта), подменяя пустым маг-эффектом и исчезая по времени). -> Как правильно сделать это заклинание переключатель, между этими 2-мя маг-эффектами, чтобы кастуя один и то же спелл Крылья то появлялись, то исчезали ?
Я попробовал условия в самом спелле прописать, типа есть кейворд - значит при касте срабатывает удаляющий маг-эффект. Если нет кейворда - другой маг-эффект вызывает крылья. Но не работает это как надо. Хотя тип спелла FireAndForget, оба маг-эффекта пытаются выполнится одновременно. Как я их не ограничивал, и по времени и по глобальной переменной. Как только стартует маг-эффект крыльев, на ГГ появляется кейворд и тут же срабатывает снятие крыльев. Вот такая штука непонятная.
-> Как правильно сделать это заклинание переключатель, между этими 2-мя маг-эффектами, чтобы кастуя один и то же спелл Крылья то появлялись, то исчезали ?
Ты хочешь сделать всё на одном заклинании, без второго уничтожающего?
Крылья ты добавляешь скриптом? Тогда сделай добавление "по инверсу":
Event OnEffectStart(Actor akTarget, Actor akCaster) if akTarget.IsEquipped(крылья) akTarget.UnequipItem(крылья, true, true) else akTarget.EquipItem(крылья, true, true) endif endEvent
Event OnEffectFinish(Actor akTarget, Actor akCaster) Utility.Wait(1.0) if akTarget.IsEquipped(крылья) && !akTarget.HasEffectKeyword(Keyword_эффекта_зелья) akTarget.UnequipItem(крылья, true, true) endif endEvent
anton, так сделай имитацию экипировки - вместо одевания используй добавление/удаление абилки, на которой и будет этот арт-эффект. Т.е. твоё заклинание будет включать и выключать (добавлять/удалять) абилку с арт-эффектом. Скрипт, в принципе, останется таким же, только изменятся команды (одеть на добавить и т.д.).
К сожалению, не всё и не всегда можно сделать только на дефолте, иногда без скриптов не обойтись.
Изменение репутации для пользователя anton
antonOffline
Сообщение №1042
написано: 9 мая 2014, 15:01
| Отредактировано: anton - 9 мая 2014, 15:02
AleksTirex, что есть то есть. Про абилки сейчас подумаю, может быть красивее получится...
Т.к. сейчас я сделал по другому: добавил глобальную переменную-ключ и маг-эффект-счётчик. Считает он сколько раз игрок кастанул заклинание. (считает конечно скриптом) А в свойствах спелла-переключателя (которое добавляется к ГГ при выпивании зелья) стоят три маг эффекта: - первый, одевает крылья, увеличивает высоту прыжка, убирает урон от падения (если глобалка==0) - второй, снимает крылья, и уменьшает высоту прыжка, включает урон от падения (если глобалка==1), и переводит глобалку в =2 - третий, при каждом касте спела увеличивает глобалку на 1, а когда глобалка >=2, сбрасывает её в 0 (снимать маг-эффект крыльев конечно не обязательно, они отпадают сами, когда глобалка становиться >0, но там ещё скрипт выполнить надо, так что не помешает)
Вот так вот я заморочился, чтобы сделать спелл-переключатель.
А в скрипт на маг эффект его впихнуть можно(чтобы маг эффект кастил спелл), и кстати что нужно вписать в источник(akSource)? Вот например стартует мой маг эффект и нужно чтобы скастовалось заклинание(кстати можно ли поддерживать заклинание типа концентрация), а заклинание совсем левое,т.е. его мы не знаем и выучить никак нельзя.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1046
написано: 28 мая 2014, 14:00
| Отредактировано: Dsion - 28 мая 2014, 14:12
Э? Не очень ясно, что ты там придумал. Потому расскажу всё. Допустим, есть заклинание (Spell). В заклинании есть магический эффект (Magic Effect). А на эффекте есть скрипт... Ты кастишь это заклинание. -> Магический эффект накладывается на врага, на союзника или на тебя (смотря как настроен эффект). И, вместе с эффектом, на эту цель вешается скрипт.
Когда эффект вешается, в скрипте вызывается Event OnEffectStart(Actor akTarget, Actor akCaster).
Если нужно, чтоб все, на кого вешается эффект, сразу начинали что-то кастить:
Scriptname test extends activemagiceffect
Spell Property SomeSpell Auto
Event OnEffectStart(Actor akTarget, Actor akCaster) SomeSpell.Cast(akTarget, akCaster) EndEvent
Наверное, должно работать... Но я не проверял. Важно не забыть заполнить SomeSpell Property. Каким-то реальным спеллом. Источник - то, что кастит. Цель - понятно. Наверное, туда любых Actor или ObjectReference можно вписывать.
Вряд ли тебе это всё подойдет... Эта функция (Cast) не совсем так работает, как обычный каст. Если расскажешь, что задумал, можно поискать другие решения...
Изменение репутации для пользователя mxac
mxacOffline
Сообщение №1047
написано: 29 мая 2014, 08:07
| Отредактировано: mxac - 29 мая 2014, 10:47
Делаю зелье обнаружения жизни, если просто использовать маг эффект, то показывает только тех что в поле видимости, отсюда вытекает что нужно использовать спелл(в его настройках устанавливается чтобы игнорировались стены). Хотя может есть скрипт какой на то чтобы включить игнорирование стен у маг эффекта? Как сделать чтобы через каждые 5 секунд происходил рекаст заклинания? наверно через RegisterForUpdateGameTime но Я немогу нормально всё настроить...
Я даже не понимаю, что не так с обычным обнаружением жизни Оно же видит через стены нормально... Если нужно что-то делать каждые 5 секунд, лучше всего использовать RegisterForSingleUpdate. RegisterForUpdate и RegisterForUpdateGameTime могут вызвать небольше проблемы после отключения мода... Это не культурно.
Я даже не понимаю, что не так с обычным обнаружением жизни Оно же видит через стены нормально...
Сам маг эффект не видит(проверял и если маг эффект архитипа Detect Life - как заклинание школы изменения, и если маг эффект архитипа Value Modifier с Assoc.Item1 : DetectLifeRange - как крик - шопот ауры, и вой оборотня - запах крови) пока не запихнёшь его в спелл и галочку не поставишь у "Area Effect Ignores LOS"(кстати это через скрипт с маг эффектом сделать нельзя случайно?)
Всё, спасибо, наконецто заработало как надо. Плюс больше опыта в скриптописании стало пока эксперементировал.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1050
написано: 29 мая 2014, 17:56
| Отредактировано: Dsion - 29 мая 2014, 17:58
Добавлено (29 Мая 2014, 21:51) --------------------------------------------- Разобрался, как работает обнаружение жизни. Происходит что-то типа невидимого взрыв и на всех, кто удовлетворяет условиям, вешается шейдер. И действительно, если не стоит галочка "IgnoresLOS" шейдер не вешается на тех, кто за стенами. Кроме того, если заклинание не Concentration, то взрыв поисходит только один раз и на врагов, которые появились в радиусе после, шейдер уже не вешается.
Приходит в голову несколько вариантов: 1) Скрипт кастит спелл каждые 5 секунд, как ты и хотел. Рад, что заработало. 2) Вообще забить на архетип Detect Life. Добавлять игроку Constant Effect типа Cloak (как огненный плащ), который будет вешать на всех вокруг шейдер.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)