Модератор форума: Kris†a™  
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)

Вопросы по скриптам Papyrus
sansuli  Offline  Сообщение №1 написано: 31 августа 2012, 13:29 | Отредактировано: Multigone - 23 апреля 2020, 14:24


The Red Sun


193
Уроки по скриптованию на языке Papyrus
Прежде чем задать вопрос просмотрите вышеуказанные уроки.
ok


Тема регламентирована.


• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней.
• Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней.
• При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС.
• При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "
+" полезного сообщения.

Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.

Красное солнце
Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Dsion  Offline  Сообщение №2491 написано: 3 июля 2017, 11:48 | Отредактировано: Dsion - 3 июля 2017, 11:49



m4mk203, ну можно и остановить, если датчик когтей перестанет быть нужен. А вообще, в игре дофига таких "невидимых" квестов, которые всегда работают и тихонько что-то делают.

m4mk203  Offline  Сообщение №2492 написано: 3 июля 2017, 16:37



29
Dsion, та я не против квест подвесить. Просто пока домучаю событие sm event node. Оно все-таки выгоднее ибо срабатывает только по ситуации. Вобщем спасибо за разъяснеия. Буду копаться.

Добавлено (03 Июля 2017, 19:37)
---------------------------------------------
Существует ли некий универсальный способ решения следующей задачи

Игрок входит в локацию и если лока в черном списке, то в момент события смены локации происходит следующее

1. Получаем список референсов всех сундуков в локации куда мы приперлись
2. Запираем все сундуки на максимальный левел (даже если я там был пять минут назад)
3. Спавним в сундуках вещи из некоего своего списка (скажем формлиста) в каждом сундуке по вероятностной схеме
4. Подвешиваем на все сундуки скрипт-ловушку, срабатывающую на закрытие сундука после лутания по вероятностной схеме.

Короче мне нужно, чтобы спавн специтемов и ловушки работали только на сундуках в определенных локациях. И событие спавна, запирания сундуков происходило всегда при заходе в локацию ГГ.  И чтобы ловушки на сундуках срабатывали только в определенных локациях и больше нигде.


Dsion  Offline  Сообщение №2493 написано: 3 июля 2017, 17:04



m4mk203, а обязательно делать это всё в момент смены локации? Нельзя запереть сундук, добавить туда лут и ловушку в момент активации его игроком?
А если в момент смены локации... Ну можно зафигарить квест с сотней алиасов и режимом их заполнения: Find Matching Reference. В момент старта квеста такие алиасы сами заполняются референсами, которые удовлетворяют условия.
С SKSE тоже можно: там есть поиск всех референсов в локации. Но это всё лажа лажовая.

m4mk203  Offline  Сообщение №2494 написано: 3 июля 2017, 20:07



29
Dsion, да ХЗ с какого конца подползать лучше. Честно. Опыта в перебалансировке локаций = 0. Я надеялся, что в локе можно получить массив всех референсов определенного класса и обработать их. К примеру все сундуки, все двери, всех уровневых засранцев (кого спавнить, а кого нет), все триггеры (какие включить, а какие вырубить) ну и т.д. 

Смотри, я в общем смысле хочу реализовать такую поведенческую схему на нордских подземельях:

1. Механика будет распространяться на все нордские руины, не занятые людьми (дох...на локаций + несколько подземелий, сделанных вручную). Соответственно хотелось бы разрабатывать механизмы реакции на игрока с точки зрения универсальности и привязываться к одному-двум событиям, а не плодить кучу тригеров, обвешивать скриптами каждый куст в отдельности и т.д. С другой стороны если нормального универсального подхода (сделал для одной локи и развесил на остальные) нет, то готов потратить время и отработать каждый объект.

2. Задумка в том, что при каждом входе игрока в локацию там автоматом будет происходить респавн спецлута, спецмонстров, всех замков в локе. То есть: зашел в локу - вычистил - вышел - через 5 мин вернулся в ту же самую локу, а там все новенькое блестит и кусается.

3.  Есть мысль заставить локацию подстраиваться под игрока: под танка одни сюрпризы, под мага другие, под вора третьи и т.д. Выбрать схему спавна ловушек удобнее всего при входе гг в локу проанализировав его снарягу и прокачку.

Добавлено (03 Июля 2017, 23:07)
---------------------------------------------

Цитата Dsion

Есть условие IsInList - я бы попробовал для интереса.

Получилось. В параметрах условия нужно выставить EventData: Item ref. В таком случае отлавливается только выброска когтей из инвентаря независимо от последовательности других предметов.

Dsion  Offline  Сообщение №2495 написано: 6 июля 2017, 20:02



Цитата m4mk203

Задумка в том, что при каждом входе игрока в локацию там автоматом будет происходить респавн спецлута, спецмонстров, всех замков в локе. То есть: зашел в локу - вычистил - вышел - через 5 мин вернулся в ту же самую локу, а там все новенькое блестит и кусается.


Ну вообще-то есть функция для сброса... Но она действует на Cell, а не на локацию. А локация может состоять из нескольких Cell.
Можно сделать, но надо почесать репу. Например, пусть посещенные игроком Cell добавляются в список. А при смене локации, все Cell из списка сбрасываются.

m4mk203  Offline  Сообщение №2496 написано: 7 июля 2017, 20:07



29
Dsion, ну что-то же должно запускать респавн в локации? Слушай, а можно как-то спровоцировать спавн лута в сундуке в момент его активации?

Dsion  Offline  Сообщение №2497 написано: 7 июля 2017, 20:15



m4mk203, в нормальной ванильной игре локации сами сбрасываются через определенное время, которое регулируется то ли глобальной переменной, то ли одной из game settings. Но менять эту настройку - вообще не вариант т.к. затронет все локации, которые вообще могут сбрасываться.
А вот с функцией reset() на cell я бы поэкспериментировал. Вполне возможно, что всё легко и круто получится.

Спавн лута в сундуке в момент активации - точно можно. Даже без скрипта на сундуке. Разобрался бы с перками. В частности, с "add activation choice" - там можно перехватить любую активацию чего-угодно.

dint999  Offline  Сообщение №2498 написано: 13 июля 2017, 10:24



11
Доброго времени суток! Товарищи, нуждаюсь в вашей помощи! А именно, у меня вопрос или несколько =),
1) можно ли написать простенький скрипт для оружия? чтобы при выборе в меню конкретного меча этот самый скрипт запускался и выполнял следующее: надевал параллельно определенную часть брони на, допустим 60 слот, и снова выбирал этот меч. (Важен приоритет, именно сначала должна надеться "броня",  и только потом заново выбраться меч!)
2) Если это можно устроить, я бы был очень признателен за написание такого скрипта, так как я с ними вообще никак не связан и даже примерно не знаю с чего начать. =(((
Собственно для чего всего это задумывается? Для добавления свободной анимации элементов на оружие. 

border="0" alt=""/
Dsion  Offline  Сообщение №2499 написано: 13 июля 2017, 10:53



dint999, лично я не очень понял, что означает "выбор в меню". Сделать выполнение скрипта при экипировке оружия легко. Но он выполняется уже после экипировки. То есть, скрипту надо будет снять меч, надеть броню, а потом снова надеть меч? Ну да, кривовато, но такое можно. А что означает "выбирался"?

Но лично я почесал бы репу и придумал, как отделаться от условия "важен приоритет"... Наверняка ж как-то можно.

dint999  Offline  Сообщение №2500 написано: 13 июля 2017, 11:10



11
Dsion, вероятно всего можно, но я не могу понять где возникает проблема и как все это организовать без скриптов?! 
В меню - то есть в инвентаре!
Проблема в том, что сама физика работает идеально, но это длится до тех пор пока, во-первых, надет элемент брони, к которому привязан файл .xml -физики, (к оружию его не привязать), а во-вторых, при смене оружия на другое и снова выборе этого меча с физикой, он становится статичным. И чтобы всё снова заставить работать как надо, необходимо тупо снять и надеть элемент брони, к которому привязана HDT. =(( вот такая вот байда получается.
Поэтому у меня на данный момент пока только такой выход, написать скрипт, который будет тупо после выбора оружия, снова снимать и надевать элемент брони! (в общем то да, приоритет не важен, важно чтобы после экипировки оружия, снова произошло событие снятия-надевания брони)

border="0" alt=""/
Dsion  Offline  Сообщение №2501 написано: 13 июля 2017, 12:44 | Отредактировано: Dsion - 13 июля 2017, 12:45



dint999, ну и ладно. Можно либо снимать+надевать броню при экипировке оружия. Либо "связать" броню с оружием. Тогда броня будет надеваться при экипировке оружия и сниматься при снятии оружия. Не подойдет такое?

И оба варианта можно реализовать двумя способами: либо скриптом на оружии (если это кастомное оружие), либо скриптом на игроке (если оружие ванильное и не хочется его редактировать).

В любом случае, скрипт совсем простой. Если выберешь вариант, мы скрипт зафигарим.

Можешь пока вот такой самый тупой вариант попробовать (вешается на оружие, проперти заполняется броней):


Код
Scriptname ... extends ObjectReference

Armor Property SomeArmor Auto

Event OnEquipped(Actor akActor)
    akActor.EquipItem(SomeArmor, true, true);
EndEvent

Event OnUnequipped(Actor akActor)
    akActor.UnequipItem(SomeArmor, false, true);
EndEvent

m4mk203  Offline  Сообщение №2502 написано: 20 июля 2017, 15:05 | Отредактировано: Multigone - 22 апреля 2020, 15:31



29
Так... Борьба со скриптами успешно продолжается :)

Делаю для своего мода налоговую систему. Сейчас реализовано начисление гг налога за производство оружия (броня, оружие, зачарование) На всех профильных станках по Скайриму отслеживается крафт каждой вещи и начисляется в глобальную переменную налог. Сделано все через SM Event Node с отловом по кейвордам события Craft Item. Беда Craft Item в том, что стандартный способ вешания скрипта на квест по этому событию не проходит. Однозначный краш игры при задействовании события. В силу этого золото за крафт начисляю в глоб переменную.

Завис наглухо со следующим: как содрать с ГГ сумму налога?

Как хотелось бы: при входе в любой город к ГГ подбегнает сборщик податей и в диалоге требует оплату налога. ГГ может заплатить и жить спокойно дальше или послать бедолагу на. При посыланни на ГГ должен вешаться крайм со штрафом равным долгу по налогу. Уплата налога должна происходить скажем каждый игровой понедельник. Как это сделать?

veto  Offline  Сообщение №2503 написано: 29 июля 2017, 21:43



4
Всем привет. Сейчас делаю небольшой мод под Колдовство, чтобы при активации призванного существа (кнопка Е) появлялось меню с опциями. Скрипт повесил на самих существ: атронахов, дремор и т. д. Проблема в том, что все это работает со всеми существами вообще, а не только с моими. Можно ли как-то проверить, кто именно призвал существо?

Dsion  Offline  Сообщение №2504 написано: 30 июля 2017, 09:09 | Отредактировано: Dsion - 30 июля 2017, 09:11



veto, честно говоря, не знаю. Но стоит проверить две вещи.
Сначала добавить

Код
Debug.MessageBox(GetActorOwner());
Debug.MessageBox(GetFactionOwner());


В твой OnActivate() и посмотреть, подходит ли эта функция для проверки того, кому принадлежит существо. Шансы 50/50.

А вообще, лучше сделать через перк. Даешь игроку перк с Entry Point: Add Activation Choice. И на эту Entry Point еще какие-то условия, чтоб срабатывало только на призванных существах игрока. Позволит обойтись без развешивания скриптов на всех существ.
Но с условиями не уверен. Надо тот же IsOwner проверить. В общем, надо какое-то условие найти, которое отличает твоих призванных сущств от чужих. В крайнем случае, можно сделать проверку враждебности. Но тогда меню будет появляться для существ, призванных союзниками.

veto  Offline  Сообщение №2505 написано: 1 августа 2017, 00:29



4
К сожалению, я уже проверил эти функции, все дают NONE. Посмотрел, как реализованы дреморы продавец и лакей: это отдельные NPC, которые просто перемещаются из специальной ячейки туда и обратно скриптом. То есть сама Bethesda для реализации нестандартных призванных существ не стала использовать в Magic Effect архетип Summon Creature.

Multigone  Offline  Сообщение №2506 написано: 1 августа 2017, 21:08



815
veto, я проверил, призванное существо не входит во фракцию PlayerFaction, его имя не содержит имени игрока (в игре так: Грозовой атронах - Имя игрока; GetDisplayName() возвращает имя только базового актера). Мне тоже интересно, как получить референс владельца существа.

Как я бы сделал, если было очень нужно: при касте заклинания с требуемыми ключ. словами (MagicSummon...) игрок кидает Cast() еще одно заклинание Aimed в точку, куда смотрит (т.е. потенциально рядом с появлением атронаха). Дальше по смыслу: снаряд - взрыв - активатор (с моделью Effects\FXEmptyObject.nif). Активатор ищет ближайший SummonTargetFXActivator, а от него - ближайшее существо IsCommandedActor() и дает ему Misc-предмет. Предмет отмечает актера и позволяет легко отличить в перке Activate.

Достоинства: позволяет реализовать идею.
Недостатки: узнаются только существа, призванные после подключения мода; малый шанс неправильного определения; сложность (и кривизна) реализации.

Dsion  Offline  Сообщение №2507 написано: 1 августа 2017, 22:41



Multigone, а на чужих призванных существах тоже владелец - none?

veto  Offline  Сообщение №2508 написано: 2 августа 2017, 00:25 | Отредактировано: veto - 2 августа 2017, 00:26



4
Multigone, я думал перемещать свою копию существа вместо дефолтного. Так я смогу делать с ним все что угодно. Но тогда придется для каждого призываемого существа (а их с DLC довольно много) делать своего кастомного актера, то есть на существах из модов это работать не будет. Конечно, лучше было бы иметь возможность обращаться к призванному существу напрямую.

Multigone  Offline  Сообщение №2509 написано: 2 августа 2017, 07:37



815
Dsion, не проверял, увы. Зато проверял еще некоторые бредовые идеи, вроде GetEnableParent() или кто является источником / целью маг. эффекта, накладываемого на игрока при вызове.

veto, это как? Если в SummonCreature поставить своего актера, ничего не изменится, т.к. НПС пользуются теми же заклинаниями, что и игрок (они тоже будут призывать твоих существ).
Если при вызове убирать дефолтное существо и на его место помещать твое, то нужно сперва получить его референс, а это опять сложности и шанс провала, если рядом стоит другой призванный НПС-ом атронах (или призывается в этот момент). Плюс дефолтный актер и маг. эффект в меню связаны, с этим что делать?

veto  Offline  Сообщение №2510 написано: 2 августа 2017, 10:39



4
Multigone, если честно, я это не реализовал, так как показалось довольно муторным. Рассуждал так на примере дефолтного вызова Атронаха:

1. Добавить уникальный перк игроку
2. В Magic Effect вызова Атронаха, используя Target Conditions, проверить наличие перка и запретить вызов
3. Создать свой Magic Effect с типом Skript, где бы перемещал моего актера (так реализован призыв дреморы-лакея)
4. В Spell вызова Атронаха добавить свой эффект, где бы в Conditions проверялось бы наличие перка

Получилось бы немного громоздко, плюс новый актер лишается таких плюшек как Высылка или Приказ даэдра "из коробки", их нужно было бы реализовывать самостоятельно. Зато призванному (по сути перемещаемому) так актеру можно было бы дать любую функцию.

Если я где-то ошибаюсь или есть какие-то подводные камни, пожалуйста, поправьте.

Multigone  Offline  Сообщение №2511 написано: 2 августа 2017, 17:20



815
veto, перк не нужен, достаточно условия "ID Цели == Игрок".

И описанный способ - как по мне, так себе. Как призвать несколько одинаковых актеров? Как быть со смертностью актера? Как наложить эффект-таймер, снимающийся при смерти актера (наподобие ванильного)? Banish / Command работать не будут. Прощайте, остальные моды на призыв. Затрагивание заклинаний.

То, что я предложил в начале - оптимально. Позволяет получить референс сразу, не требуя активации кнопкой. Вместо выдачи предмета можно, к примеру, поместить актера в алиас или дать Ability с кучей скриптов. Все зависит от того, какая задача поставлена.

Dsion, теперь проверил, да, none.

Dsion  Offline  Сообщение №2512 написано: 2 августа 2017, 17:39



Multigone, фигово. Спасибо. Может, что-то и нашел бы, но я вообще без CK.
Интересно, как работает перк в ветке колдовства, дающий призванной нежити +100 ХП?
Неужели там отдельное существо? А если не отдельное, то как?

Multigone  Offline  Сообщение №2513 написано: 2 августа 2017, 19:27 | Отредактировано: Multigone - 2 августа 2017, 19:33



815
Dsion, так заклинание поднятия нежити накладывается прямиком на мертвого актера. Там есть доп. эффект "если игроком взят перк, Value Mod +100 AV Health + флаг Recover".

Кстати, интересное наблюдение - шкала здоровья НПС привязана к базовому максимуму AV Health, а не текущему максимуму AV Health (которое с модификаторами). Это означает, что если модификатором удвоить здоровье, то урон не будет виден, пока расчетное здоровье не станет меньше половины; если снизить вдвое - то начальное положение полоски здоровья будет таково, как будто ему уже сняли половину ХП.

Miter  Offline  Сообщение №2514 написано: 9 августа 2017, 18:14 | Отредактировано: Miter - 9 августа 2017, 18:41



15
Привет всем
Хочется реализовать самонаводящееся заклинание
Для magic effect логичнее всего выбрать архитектуру Guide, как у Ясновидения. Guide находит путь до ближайшей квестовой цели.
Теперь вопрос: как засунуть в квест в качестве целей противников прямо посредь боя?
Мне в голову приходит каким-то образом использовать RadiantQuest систему, но я в ней ни бум-бум:(
Есть ли какой-нибудь тутор по этим Radiant'ам?

Dsion  Offline  Сообщение №2515 написано: 9 августа 2017, 18:33 | Отредактировано: Dsion - 9 августа 2017, 18:38



Miter, круто! А "захват цели", как у истребителей, будет?!
Я уже всё представил!
Игрок зажимает кнопку мыши и начинает колдоваться cloak заклинание типа "Обнаружение жизни", которое вешает магический эффект на всех противников в большом радиусе и подсвечивает их. На эффекте скрипт, который каждую секунду проверяет, навел ли игрок курсор именно на этого противника. Если курсор наведен, пробавляется единичка к переменной "захват цели". Когда переменная достигает значения 5, происходит "захват". После этого игрок отпускеат кнопку и в противника летят 10 адских огненных шаров :D

Шутка. Но как работают заклинания типа cloak все-равно разберись. Это самый подходящий в данном случае способ "найти" противников вокруг игрока.
Можно еще использовать запуск квеста с самозаполняющимися алиасами, но там будет сложно подобрать условия. Ты можешь прописать условия "враг" и "в радиусе 500 от игрока", но тогда может захватиться противник у игрока за спиной, а не тот, на которого он смотрит.

Multigone  Offline  Сообщение №2516 написано: 10 августа 2017, 16:37



815
Miter, и как же архетип Guide поможет твоему огненному шару скорректировать траекторию полета так, чтобы поразить врага прямиком в самое сердце, ммм?

Miter  Offline  Сообщение №2517 написано: 10 августа 2017, 19:43 | Отредактировано: Miter - 10 августа 2017, 19:45



15
Multigone, смысл в том, чтобы можно было попасть во врага, не нацеливаясь на него

Guide как раз может искать путь по окружающей местности; исходил из того, что я не смогу написать самостоятельно алгоритм поиска пути

Multigone  Offline  Сообщение №2518 написано: 10 августа 2017, 21:28



815
Miter, я больше скажу - нет никакой возможности нацелить Aimed-заклинание, исходящее от актера, в произвольном направлении. Этого сделать просто нельзя. Т.е. огненный шар никогда не полетит от актера вправо, скажем. Только туда, куда смотрит его башня. Это касается и игрока. Даже определив, что враг находится в секторе обзора (или в конусе Х градусов от прицела), нельзя направить заклинание-снаряд от игрока к нему. Правда, можно поставить впереди маркер, и кастовать от него (объекты не-актеры могут творить заклинания куда хотят), но это уже совсем другая история.

Dsion  Offline  Сообщение №2519 написано: 10 августа 2017, 21:52



Multigone, вот ты пессимист :(
Есть крутая функция ApplyHavokImpulse. Ею можно запустить ледяную стрелу в любом направлении. И ею же можно корректировать курс :D
Настоящий физический projectile. Круто же!

Lexo  Offline  Сообщение №2520 написано: 13 августа 2017, 11:14


Всепознающий мододел


223
Народ! Вы чего муть мутите? Проверять убийство игроком кого-то - это ж проще некуда! 

Я давно видел в моде на новые заклинания (возможно, это Магия Апокалипсиса) заклинание "Плащ душ" - который захватывает души любого, кого убили вокруг... принцип действия до безобразия прост - заклинание-плащ (Archetype - Cloak)... в самом плаще прописать заклинание-концентрацию...

В заклинании-концентрации прописать скрипт на отслеживание смерти (akKiller - PlayerRef) и всё - все кто умирают будут засчитываться...

главное сделать область плаща по-больше (вдруг игрок кого-то с лука или заклинания на расстоянии 9000 м долбанёт)...

а сам плащ можно сделать как Абилку (постоянный эффект на себя) и либо сразу в игрока запихнуть, как заклинание, либо через перк, который чисто для игрока сделан...

Сам уже так 5 ритуальных заклинаний состряпал - всё прекрасно работает!

"Всё слишком относительно, что бы утверждать столь однозначно..." ©

Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)
Поиск:





Ответ на жалобу смотрите в разделе жалоб