• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Нескромный вопрос... Но как проверить что рубильник/вентили или серия их, включены? Скрипт весит на "проверяющей" кнопке, а проверяемые назначены через
Как можно реализовать что бы "зажигание" шло чрез кнопку и то что все вентили открыты, а "потухание" шло если один из вентилей закрыт. Так как сейчас у меня потухание идет так же через кнопку поджигания, что дает возможность игроку сперва все включить, а потом вывернуть вентиль и не нажимать на кнопку.
Всем привет. Программировать умею, но с папирусом никогда не работал. Захотел дописать ии для нпц, вопросы: 1 как внедрить свой код в уже существующего нпц? Чтоб не через редактор всех менять? В голову приходит такое: наследую свой скрипт от квеста (чтоб он активировался в момент начала игры), далее каким-то образом мониторю сцену вокруг главного героя, далее добавляю всем actor вокруг свой код. И это порождает ещё вопросы: 2 как отловить появление нового actor около героя (не перебором же)? 3 куда можно добавить уже существующему actor дополнительное поведение? 4 все новое состояние actor нормально будет в сохранения игры писаться?
botbot, методы объектно ориентированного программирования, конечно, используются в папирусе, но очень ограниченно. Главное же, там страшно ограничен набор свойств, которые можно менять. Это специфический язык. Надо изучать, чтобы понять пределы его применения Многое из того, что бы хотелось, вообще нельзя сделать.
Ну, промежуточный вариант поисков такой: Да, действительно можно лишь перебирать Game.FindRandomActorFromRef, она возвращает случайные акторы в некотором радиусе. Вызывая несколько раз и сохраняя результат можно получить список акторов. По поводу ии: изначально игра его хранит в объектах Package (странное название для ии), но для добавления своего ии эти объекты подходят плохо. Зато, если я правильно понял, свой код можно писать в объекте AliasRefference и потом в нём вызывать ForceRefTo(actor), таким образом добавляя актору свое поведение. Сам AliasRefference как-то связан с квестами. Пока все, копаю дальше.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №1957
написано: 5 февраля 2016, 18:43
| Отредактировано: Dsion - 5 февраля 2016, 18:45
В Скайриме NPC пакетами управляются. Если надо, чтоб он куда-то шел, что-то делал или что-то колдовал - всё это пакетами делается. Есть способ, если хочешь, всех окружающих NPC разсовать по алиасам... Но все-равно надо больше в сторону пакетов копать, а не по скриптам.
Ребята, уроки прочёл. Что-то внял, а что-то нет. Остались вопросы. 1 Где узреть ВЕСЬ список проишествий, функций, переменных и их значений? 2 Одежду/доспех можно взять, а можно надеть. Чему будет соответствовать onAktivate? 3 Как я понял string выплывает в левом углу экрана как название локации или добыт очередной камушек, да? 4 Почему-то не все эффекты подходят для зачарования, почему? Мне было бы проще и не надо было бы писать скрипт. Мне нужно, чтоб надевание моего камзола давало способность торговли краденым. Только лишь через скрипт это решать надо? Кто знает, помогите пожалуйста.
В первую очередь глянь ObjectReference и Actor. ObjectReference - это для любых объектов в мире в том числе NPC и игрока, а Actor - только для живых NPC и игрока.
Изменение репутации для пользователя вадавад
вадавадOffline
Сообщение №1960
написано: 11 февраля 2016, 23:52
| Отредактировано: Multigone - 27 апреля 2020, 16:31
Dsion, Дружище, скажи, пожалуйста, что тут неправильно?
Код
armor Property pNegodress auto armor Property pNegohetf auto armor Property pNegohetm auto armor Property pNegoamulet auto
spell Property pMasterTrader auto spell Property pPerkMerchant auto spell Property pPerkFence auto
string(1) = "Торговцы будут ослеплены убранством ваших одежд и готовы даже перезанять золото, чтобы торговать с вами." string(2) = "Торговцы всецело вам доверяют и не интересуются историей товара. Вы можете торговать краденым." string(3) = "Торговцы не желают упустить возможность торговать с вами они согласны на любой товар."
Я тебе компилятор что-ли? :) А вообще, неправильно дофига всего. Во-первых, нету заголовка (Scriptname) и не ясно, на что ты скрипт вешаешь. Во-вторых, проверь, действительно ли это должны быть именно заклинания Spell, а не перки Perk. В-третьих, со string вообще мутно чо-то. Метод Show есть на объектах типа Message. То есть, сначала надо создать в CK Message c тексом, а потом в скрипте использовать Message Property и Show на ней. В-четвертых, неправильно скопированы название и аргументы ивентов. Подолбности в Actor Script И в-пятых, неправильный синтаксис оператора If. В скобках должно быть условие. Еще я не уверен, что ты заполнил Property. И что повесил скрипт куда надо.
Если эти вещи (pNegodress итп) не ванильные, а ты сам зафигарил, лучше вешать скрипт совсем другой на сами вещи, а не на алиас игрока. Намного короче и понятнее получится. И квест не понадобится.
Dsion, Нет-нет, ты ни в коем случае не компилятор. С компелятором я уже общался. У нас вышел спор и, видимо, кто-то из нас двоих дурак, мне хочется думать , что он. Если бы работало зачарование, я б ни в жисть не полез в скрипты. Я в них как русалка в молоке и с прожектором, светло, да не видно. Этот скрипт (т.е его элементы) я списал с камней-хранителей (леди, лорда, коня и т.д.) До этого я нашёл, мне казалось, хорошее решение -- я вписал одежёнку в условия перка и она давала возможность открыть этот перк. Уже начал думать о себе хорошо, как выяснилось, что сняв одежду с героя, перк, однажды открытый, таковым и остаётся. Это никак не входит в мой маленький сценарий. Вот, что меня загнало в этот угол со скриптами. Теперь о твоей последней строчке: "Намного короче и понятнее получится." Да я к этому и стремлюсь! К простоте и минимизации, и вообще с радостью бы обошёлся без скриптов. Прошу тебя, напиши мне, умный человек, где мне скатать такой скрипт или перенять способ, что бы я уже никого не доставал и себя не мучил, ибо вторую неделю я без покоя живу в паутине холодных и чужих мне скриптов.
Изменение репутации для пользователя evTau
evTauOffline
Сообщение №1963
написано: 13 февраля 2016, 13:27
| Отредактировано: evTau - 13 февраля 2016, 14:42
Парни подскажите скрипт который при экипировке брони снимал бы ее с игрока и удалял из инвентаря. Желательно какой то универсальный чтобы можно было на любую броню его повесить для 32 слота.
Изменение репутации для пользователя andrelo-1
andrelo-1Offline
Сообщение №1964
написано: 14 февраля 2016, 14:58
| Отредактировано: andrelo-1 - 14 февраля 2016, 15:27
obj - это объект типа Form . Какие у него есть функции можно тут посмотреть. Если нужен id, то пишешь obj.GetFormID(). Только определять по id, что за предмет, не лучшая идея, так как id зависит от порядкового номера мода в списке модов.
Вариант со скриптом на самой броне мне кажется не получится сделать, так как событие есть только на ObjectReference (т.е. конкретном экземпляре объекта), а Armor такого события не имеет.
Изменение репутации для пользователя evTau
evTauOffline
Сообщение №1967
написано: 14 февраля 2016, 15:48
| Отредактировано: evTau - 14 февраля 2016, 16:03
Есть масса способов. Можно, например, на броню, которую нужно удалять добавить Keyword, наличие которого будет проверять скрипт. Можно составить спиcок (FormList), в который внести все типы брони, которые нужно удалять, и скрипт будет проверять наличие брони в этом списке. В первом случае нужно будет добавить твой мод как мастер-файл во все моды брони, во втором случае наоборот - добавить все моды брони как мастер-файлы для твоего мода.
PS: Функции для получения EditorID в папирусе нет, есть только GetName().
Есть мод bodyshape в нем 9 пресетов для смены тел. Я его ставлю в связке с модом SM Essential player в котором при смерти ты превращаешся в призрака и через какое то время опять приобретаеш тело и на тебя одевается домотканая одежда. Так вот в этом bodyshape есть функция гардероба, то есть при одевании назначеной брони в 32 слот применяется один из 9 пресетов тела. Я хочу сделать 2 одинаковых пресета тел, но с разными текстурами.
1 прест тело в синяках. И поставить этот пресет на Домотканую одежду. То есть умер одежда оделась пресет 1 загрузился ГГ в синяках. 2 пресет сделать без синяков. И привязать к новой броне (даже без модели) Назвать ее "Мазь от синяков". Вот мне и нужен скрипт чтобы одеть эту броню тем самым загрузится 2 пресет и чтобы броня после этого удалилась вроде как мазью помазался и она пропала. Такие танцы с бубнами просто из за того что нужна имено одежда в 32 слот. Я сделал все работает, но броня остается, то есть юзай сколько хочеш раз, а это не интересно.
evTau, можешь еще поковыряться в моде и найти функцию, которая меняет модель тела, и сделать плагин к этому моду или просто сам мод переделать так, чтобы модель тела, например менялась при выпивании какого-нибудь эликсира, а то вариант с броней, которая избавляет от синяков, как-то не очень логичен.
Изменение репутации для пользователя evTau
evTauOffline
Сообщение №1971
написано: 14 февраля 2016, 16:50
| Отредактировано: evTau - 14 февраля 2016, 19:26
evTau, можешь еще поковыряться в моде и найти функцию, которая меняет модель тела, и сделать плагин к этому моду или просто сам мод переделать так, чтобы модель тела, например менялась при выпивании какого-нибудь эликсира, а то вариант с броней, которая избавляет от синяков, как-то не очень логичен.
Ну то что он не логичен это да, но эту фигню можно через магический эффект прикрутить который повесить на банку. Ковырять функцию гардероба с минимумом знаний в скриптинге не к чему хорошему не приведет. Ладно спс за советы буду думать как это реализовать. А то что через броню даже интереснее... можно сделать подмену опять же текстур тела типо вся в бинтах повесить продолжительность эффекта минут 5-10 и когда он кончится тело в бинтах удалится и загрузится пресет с чистой кожей.
Сделал магический эффект с кастом на себя, повесил на него скрипт
Прикрутил магический эффект к банке. Теперь пьеш банку одевается броня на 10 секунд (тело в бинтах, поменяю на какой нибудь шейдер магический наверно). После 10 секунд бинты снимаются и удаляются. И одевается назад броня которая была одета на персонаже до применения банки.
Изменение репутации для пользователя sansuli
sansuliOffline
Сообщение №1972
написано: 19 февраля 2016, 20:50
| Отредактировано: sansuli - 19 февраля 2016, 20:58
Ребята, уроки прочёл. Что-то внял, а что-то нет. Остались вопросы.1 Где узреть ВЕСЬ список проишествий, функций, переменных и их значений? 2 Одежду/доспех можно взять, а можно надеть. Чему будет соответствовать onAktivate? 3 Как я понял string выплывает в левом углу экрана как название локации или добыт очередной камушек, да? 4 Почему-то не все эффекты подходят для зачарования, почему? Мне было бы проще и не надо было бы писать скрипт. Мне нужно, чтоб надевание моего камзола давало способность торговли краденым. Только лишь через скрипт это решать надо? Кто знает, помогите пожалуйста.
1. Как активируют файл, добавлю в шапке темы ссылку на скачивание архива с файлами, содержащие в себе все функции и события игры. 2. onAktivate - эт активация обьекта нажатием клавиши "Е", то есть дверь, лежащий на прилавке помидор и тп. Но это событие не запустится если активация будет в инвентаре. 3. Нет String это тип хранения переменной, а то что выплывает в левом углу экрана это функция Debug.Notification("Вот эта") 4. Нет можно обойтись без скриптов, это можно сделать через перки в разделе перков в Creation Kit и просто добавить условие экипировки камзола. Но надо учесть что в игре уже есть этот перк в дереве Красноречия.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
4. Нет можно обойтись без скриптов, это можно сделать через перки в разделе перков в Creation Kit и просто добавить условие экипировки камзола. Но надо учесть что в игре уже есть этот перк в дереве Красноречия.
Да, но если поставить условие надетого камзола то: а) перк доступен лишь после включения его при потере одного очка повышения (как обычно и делается) б) не прекращает своего действия после снятия камзола. А он должен быть привязан к одежде. Перк "скупщик" ссылается на свой же эффект скупщика. Я пытался создать зачарование с этим эффектом, но оно почему-то не работало и тогда я полез в скрипты, дабы на примере скрипта активации камней хранителей (которые как дают перк, так и снимают) сделать свой скрипт на камзол. Вот, пока что ничего не надумал.
Изменение репутации для пользователя Kepper
KepperOffline
Сообщение №1974
написано: 20 февраля 2016, 07:50
| Отредактировано: Kepper - 20 февраля 2016, 07:51
вадавад, повесь этот скрипт на Армор и заполни свойства. Функции AddPerk и RemovePerk я лично не проверял, но думаю работать будут(правда в их описании написано что они работают только для игрока). Оденешь одежду - выдадут перк и выведут сообщение в отдельном окне. Сообщение в виде исчезающей надписи тоже можно вывести, но тогда оно должно быть максимально коротким иначе будет не читабельно.
Код
Scriptname NameOfSomeScript extends ObjectReference Perk property akPerk auto Message property InfoMessage auto ;String property InfoString auto
Хай. Помогите с формами и их подключению к скрипту. Никак не могу понять, как их получить (узнать). Например, роба жреца Мотылька. В CK её ID: DLC1ClothesMothPriestRobes, но такой формы даже приблизительно не существует. Соответственно, не могу узнать надета ли она на персонажа IsEquiped'ом.
NoSilence, 95% вероятности, что это ты просто где-то затупил... Если есть Armor проперти и ты не забыл её заполнить правильным армором + вызываешь IsEquipped на правильном акторе, то всё там работает...
Добавлено (20 Февраля 2016, 17:08) --------------------------------------------- Dawnguard же не забыл подключить?
В Скайриме есть такая удобная штука, как уровневые списки (левельные списки). Через них обычно персонажи снабжаются шмотками. Всё бы хорошо, но если мод меняет такой список, то он становится несовместим с другими модами, которые меняют тот же список. Т.е. списки не суммируются (объединяются), а используется либо один, либо другой. Возникает естественное желание модифицировать нужные уровневые списки через скрипт. Благо есть соответствующая команда: ; Add 2 axes to the list at level 5 CoolItems.AddForm(Axe, 5, 2) Вот только возникает вопрос, как правильнее обновлять уровневые списки? Когда они инициализируются? По какому событию надо запускать скрипт изменения уровневого списка?
Изменение репутации для пользователя andrelo1
andrelo1Offline
Сообщение №1980
написано: 20 февраля 2016, 16:16
| Отредактировано: andrelo1 - 20 февраля 2016, 16:19
NoSilence Ты сравниваешь ( akCaster.IsEquipped(...) == 1 ). Не уверен, что в папирусе True == 1. help moth 4 ничего не покажет по двум причинам, во-первых, если у тебя русский скайрим, то команда help будет искать по русским именам (если таковые имеются), во-вторых, параметр "4" заставляет искать точное совпадение, так что в этом случае help ничего скорее всего не найдет и в английском скайриме. Почему Game.GetForm(0x020047DA).GetName() ничего не выдает, тут непонятно. Да, и значение свойства DLC1ClothesMothPriestBlindfold нужно в CK установить.
Добавлено (20 Февраля 2016, 19:16) ---------------------------------------------
Цитата Myprism
Вот только возникает вопрос, как правильнее обновлять уровневые списки? Когда они инициализируются? По какому событию надо запускать скрипт изменения уровневого списка?
Инициализируются по-разному, в общем случае скорее всего в тот момент, когда возникает необходимость в конкретном "значении". Например, если уровневый список содержится в оутфите нпц, то он инициализируется сразу при генерации этого нпц. А если в контейнере, то при открытии этого контейнера. Ну а изменять наверно все равно когда, когда удобно, тогда и меняешь.
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)