Модератор форума: 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? Пиши не в ЛС, а в эту тему.
LEN  Offline  Сообщение №1171 написано: 10 августа 2014, 11:02



6
Цитата Dsion

Посмотрел скрипты на No Death Mod... Я, конечно, пока не бог программирования, но даже мне очевидно, что автору еще многому предстоит научиться. Если бы он умел хоть массивы использовать, скрипты и сам мод были бы раз в 10 меньше
Ну да ладно. Мне-то что.


Проблем с передвижением, на сколько я знаю, не у кого не возникало.
Если скрипты "сырые" и сам мод глючный, то насколько реально создать свой подобный мод более стабильный и работающий? И к кому можно обратится (платно или нет - не важно).

Dsion  Offline  Сообщение №1172 написано: 10 августа 2014, 11:19



LEN, если хочешь, я попробую сделать...

После "смерти" игрока будет бросать в ближайший храм, а вещи будут попадать в сундук к какому-то бандиту боссу...
Это очень простенький мод получился бы.

Можно и какое-то другое наказание за смерть ввести, если придумаешь.

---
Или используйте готовый с нексуса. Как я понял, пока читал комменты, есть и более удачные аналоги. Там писали названия, но я уже забыл.

LEN  Offline  Сообщение №1173 написано: 10 августа 2014, 11:24 | Отредактировано: LEN - 10 августа 2014, 11:25



6
Цитата Dsion

LEN, если хочешь, я попробую сделать... После "смерти" игрока будет бросать в ближайший храм, а вещи будут попадать в сундук к какому-то бандиту боссу...
Это очень простенький мод получился бы.

Можно и какое-то другое наказание за смерть ввести, если придумаешь.

---
Или используйте готовый с нексуса. Как я понял, пока читал комменты, есть и более удачные аналоги. Там писали названия, но я уже забыл.


Было бы шикарно если б ты помог  blush
Мы перепробовали ВСЕ доступные на сегодняшний день моды на смерть, и нам подошел только этот глючный  dr . Очень долго ломали голову, но теперь я понял что нужно было сразу отписать сюды.
Го в ЛС.

Kepper  Offline  Сообщение №1174 написано: 11 августа 2014, 05:57 | Отредактировано: Kepper - 11 августа 2014, 06:17



860
В логе папируса мой мод генерирует ошибку
ERROR: Unable to bind script lernS_IceFrostbiteDecrScript to Item 4 in container  (00000014) because their base types do not match

Она вроде не критична и накладок в работе мода не замечено, но хотелось бы её нейтрализовать.
Скрипт висит на книге

Скрипт lernS_TemplaSpellDecriptorScript расширяет Book
Он объявляет несколько функций.

Скрипт lernS_IceFrostbiteDecrScript расширяет lernS_TemplaSpellDecriptorScript
Реализует объявленные ранее функции

В принципе я могу вместо Book расширять ObjectReference. Но хотелось бы понять причину не соответсвия типов.

Dsion  Offline  Сообщение №1175 написано: 11 августа 2014, 08:40



Kepper,
Book, Armor, Weapon, Static, Light итп - это всё базовые объекты.
Из них создаются реальные объекты в мире, но все реальные объекты - это ObjectReference. И стена в каком-то доме - это ObjectReference, и книга - тоже ObjectReference.

По одному базовому объекту в мире может быть создано 1000 реальных референсов. И для каждого создается своя копия скрипта. Скрипты именно с реальными объектами работают.

GF_RaiseD  Offline  Сообщение №1176 написано: 13 августа 2014, 23:21



50
В чем проблемма данного скрипта?



Dsion  Offline  Сообщение №1177 написано: 14 августа 2014, 00:49



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

Multigone  Offline  Сообщение №1178 написано: 14 августа 2014, 09:24



832
Джек_, удалять перки при разэкипировании предмета не надо? Других проблем не вижу, кроме того, что будет работать только для игрока. С др. стороны, крафт тоже может производиться только им.

GF_RaiseD  Offline  Сообщение №1179 написано: 15 августа 2014, 22:37



50
Удалять нужно конечно. Оптимизация и все такое... пока оправдаюсь тем что разрабы сами не удосужились это сделать. Дело в том что не могу создать этот скрипт в игре, или даже найти его, предварительно скинув в папку "Scripts" или "source".

Multigone  Offline  Сообщение №1180 написано: 18 августа 2014, 08:47



832
Джек_, тогда ориентируйся на подобный скрипт:



Dsion  Offline  Сообщение №1181 написано: 18 августа 2014, 11:57



Так на какой все-таки предметы вы решили этот скрипт прицепить?

Multigone  Offline  Сообщение №1182 написано: 18 августа 2014, 18:32



832
Dsion, я ничего не решаю, я только предлагаю. Теоретически, его нужно цеплять к любому предмету, имеющему возможность экипировки (оружие, элементы одежды).
Подобные скрипты есть в СК (см. Бритва Мерунеса).

GF_RaiseD  Offline  Сообщение №1183 написано: 19 августа 2014, 22:28 | Отредактировано: Джек_ - 19 августа 2014, 22:45



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

Вот примерное содержание скрипта. Сразу должен сказать: в скриптах я не силен. 



Добавлено (20 Августа 2014, 02:28)
---------------------------------------------
Как же я туплю. Бог ты мой... С первым теперь все ок. Мб поможете другой дописать? Я не уверен правильно ли я разместил оператор "или", не уверен что правильно передал параметры в функцию, проверяющую присутствие перка у "актера", а так же функцию его удаляющую. Если ответите на эти вопросы, то скрипт смогу дописать сам.

Dsion  Offline  Сообщение №1184 написано: 19 августа 2014, 22:58



Я бы объединил это всё в один перк. И дал его игроку навсегда.
А разные Entry Point  в перке будут работать только тогда, когда надеты какие-то стрелы.

GF_RaiseD  Offline  Сообщение №1185 написано: 20 августа 2014, 05:33



50
Эти перки я уже добавил игроку и настроил их. Нужно чтоб ими могли пользоватся неписи и компаньйоны. Добавлять его всем "Актерам" очень долго. Вот почему нужен скрипт. Нужно еще посмотреть как подобное сделали в моде "Auto Unequip Ammo" - там как-то отловили момент экипирования стрел.

Multigone  Offline  Сообщение №1186 написано: 20 августа 2014, 07:57



832
Джек_

1) Актерам, кроме игрока, нельзя выдавать / удалять перки с помощью скриптов.
2) Актерам, кроме игрока, нельзя выдавать перки с помощью маг. эффектов.

Твой скрипт написан неправильно:

Event OnEquipped(Actor akActor)  - отслеживает экипирование конкретного предмета, на котором висит этот скрипт. Экипирование любых других предметов отслеживаться не будет. Чтобы отслеживать экипирование абсолютно любых предметов, нужно использовать событиеEvent OnObjectEquipped(Form akBaseObject, ObjectReference akReference) в скриптах, расширяющих Actor или ReferenceAlias.

IF GetEquipped(DaedricArrowFire1||DraugrArrowFire1||DwarvenArrowFire1||...) == 1 - неверно. Как верно:

IF akActor.GetEquipped(DaedricArrowFire1) || akActor.GetEquipped(DraugrArrowFire1) || akActor.GetEquipped(DwarvenArrowFire1)

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



GF_RaiseD  Offline  Сообщение №1187 написано: 20 августа 2014, 09:29 | Отредактировано: Джек_ - 20 августа 2014, 09:34



50
Понял. Благодарю. Именно это меня интересовало. А вот то что Прочим персонажам не выйдет добавить перки скриптами 100% инфа? Хотел проапгрейдить свой мод со стрелами хотя бы для компаньйонов.

Multigone  Offline  Сообщение №1188 написано: 20 августа 2014, 09:58



832
RiseD, 146%.

Dsion  Offline  Сообщение №1189 написано: 20 августа 2014, 12:26



Всё можно, если осторожно :)
Зря ты с самого начала не рассказал, чего именно пытаешься добиться. Высока вероятность, что для этого перки вообще не нужны.

А если и нужны, то все-равно есть пара идей...

Multigone  Offline  Сообщение №1190 написано: 20 августа 2014, 14:20



832
Dsion, что можно? Выдавать перки? Поведай, каким образом. Подозреваю, для решения этого вопроса нужны перки _VjidachaPerkovPERK и _RazreshenijeNaVjidachuPerkovPERK.

GF_RaiseD  Offline  Сообщение №1191 написано: 22 августа 2014, 11:07 | Отредактировано: RiseD - 22 августа 2014, 11:42



50
Multigone, можно и не использовать перки. Но тогда нужен скрипт, отлавливающий попадание в цель срелой с определенным кивордом. Я такие скрипты писать не умею.

Multigone  Offline  Сообщение №1192 написано: 22 августа 2014, 11:42 | Отредактировано: Multigone - 22 августа 2014, 12:04



832
RiseD, если речь о функции скрипта, проверяющей наличие ключевого слова на одной из форм, тогда вот она:

bool Function HasKeyword(Keyword akKeyword) native

Пример использования:

Ammo Property MyArrow Auto
Keyword Property MyKYWD Auto

IF MyArrow.HasKeyword(MyKYWD)
    ; Эта запись эквивалентна такой: MyArrow.HasKeyword(MyKYWD) == true
    ; Запись: !(MyArrow.HasKeyword(MyKYWD)) эквивалентна такой: MyArrow.HasKeyword(MyKYWD) == false
...
ENDIF


Для отслеживания попадания есть событие:

Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)

Пример использования:

FormList Property MyFLST Auto
    ; Создаем лист, куда кидаем Projectile нужных стрел


Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
        ; Событие при применении любого воздействия на цель (не обязательно при нанесении урона). Например, игрок стреляет в цель из лука. Тогда:
        ; akAggressor == игрок
        ; akSource == оружие (лук), из которого он стреляет
        ; akProjectile == снаряд (стрела), которой он попадает
        ; Все данные о агрессоре, источнике урона, снаряде, видах атак (силовая, скрытая) и т.д. в момент применения воздействия на цель будут учтены и переданы в это событие. Эти данные можно проверить, соответствуют ли они каким-либо параметрам.

IF MyFLST.HasForm(akProjectile)
        ; Если лист имеет форму, которой является akProjectile, то...
...
ENDIF

GF_RaiseD  Offline  Сообщение №1193 написано: 22 августа 2014, 13:51 | Отредактировано: RiseD - 22 августа 2014, 13:53



50
Тут я вижу 2 варианта:

1-й: При (экипировании/разэкипировании) стрел из определенным кивордом (добавлять/удалять) перк.
2-й: Забить на перки и наносить урон скриптом если это возможно. Или же как то заставить срабатывать заклинание на цели, пораженной прожективой с определенного листа (лис). И опять же я без понятия возможно ли сделать второе. Я полагаю что первый способ проще, вот только к чему прикрепить этот скрипт и как заставить его работать. Я все таки делаю глупось - ведь в разы проще добавить перки игроку и не создавать себе проблем.

Dsion  Offline  Сообщение №1194 написано: 22 августа 2014, 14:05



Уже восемь дней висит проблема, а ты так и не признался, чего хочешь от стрел добиться :)

Просто накладывать магический эффект на цель, в которую попадает стрела? Да это запросто. Или что нужно?

Multigone  Offline  Сообщение №1195 написано: 22 августа 2014, 14:28 | Отредактировано: Multigone - 22 августа 2014, 14:32



832
RiseD, есть несколько вариантов (не меньше двух), как наложить заклинание на цель, пораженную конкретной стрелой.

1) Создаем зачарование лука. В этом зачаровании указываем множество магических эффектов, которые соответствуют урону от конкретных стрел. В заклинании для каждого эффекта делаем проверку следующего вида:

(T) (GetEquipped) (MyArrow01 ... MyArrowXX) (==) (1) (AND)

По-идее, "Target" (T) указывает на источник заклинания, а "Subject" (S) - на жертву (цель) заклинания. Неясно, как это будет работать в случае с зачарованием. Нужно тестировать!

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

Недостаток: если в момент между выстрелом и попаданием стрелы в цель открыть инвентарь и экипировать др. стрелы, возможно, эффект от попадания будет от последних экипированных стрел.

2) В Projectile каждой конкретной стрелы указываем свой взрыв (Explosion) с очень маленьким радиусом действия и без виз. эффектов. Для этого взрыва создаем свое зачарование типа FF - Contact (No Area). При попадании стрелы произойдет взрыв и все цели, попавшие в радиус действия (а он указан очень маленьким) также будут поражены этим зачарованием.

Недостатки: неизвестны.

GF_RaiseD  Offline  Сообщение №1196 написано: 22 августа 2014, 14:50



50
Лукам зачарования добавлять - никак не вариант. Конфликты - меньшая из проблем что могут возникнуть. Да и убого это.
Если пользоватся вторым способом, то прожектива исчезнет (Или улетит? - не знаю. Тестил со взрывом, но после выстрела стрел я не находил). Если будет маленький радиус, то возможно все будет в порядке, но это еще нужно тестить. Имхо через перк - пока идеальный вариант.

Насколько я понял "MyArrow" - это конкретный тип стрел, а не переменная. Или как?

Multigone  Offline  Сообщение №1197 написано: 22 августа 2014, 15:05



832
RiseD, да, например, "Железная стрела".

Добавлено (22 Августа 2014, 19:05)
---------------------------------------------
Не совсем понял, как ты собираешься при помощи перков добавлять дополнительные свойства стрелам (заклинания, срабатывающие при попадании?). У перков для этих целей есть только один Entry Point - Apply Combat Hit Spell. Он работает только при ударе оружием (или кулаками?) в ближнем бою. Для стрел там нет ничего.

А, есть еще Weapon Swing Spell, работающий, когда по цели, имеющей этот перк, наносят удар в ближнем бою (опять-таки!).


Dsion  Offline  Сообщение №1198 написано: 22 августа 2014, 15:07 | Отредактировано: Dsion - 22 августа 2014, 15:14



Цитата RiseD

Лукам зачарования добавлять - никак не вариант.


Особые зачарованные стрелы - тоже не вариант?

Самые обычные стрелы, пущенные из самого обычного лука рукой обычного NPC должны накладывать заклинание? И чтоб не менять всех ванильных NPC?
Не, ничего не приходит в голову. Разве что Cloak заклинание, которое будет отслеживать попадания по всем целям в радиусе полёта стрелы. Но это, наверное, не очень правильно с точки зрения производительности...

Multigone  Offline  Сообщение №1199 написано: 22 августа 2014, 15:18



832
Короче, как я бы это сделал, если бы мне это позарез было надо, не заботясь о нагрузке на процессор:

- Создаю маг. плащ, который раздает маг. эффект в радиусе 200 (1000) футов от игрока.
- К нему цепляю скрипт:

Событие при воздействии (OnHit).
    Если агрессор имеет экипированные стрелы
        Применить к цели заклинание в зависимости от экипированных стрел
    ЭндЕсли
ЭндСобытие

Добавлено (22 Августа 2014, 19:18)
---------------------------------------------
Dsion, ну вот, мы с тобой и мыслим одинаково... Или это действительно единственный путь.


GF_RaiseD  Offline  Сообщение №1200 написано: 22 августа 2014, 15:21



50
Честно говоря я плохо понимаю механизм получения/отлова урона в Скае, но я сделал мод и он работает. Пожалуй тема изжила себя. То о чем мы говорим было бы полезно будь возможность скриптами добавлять перки неписям, но мне твердят что это не есть возможным. Такой механизм смотрелся бы красиво в плане оптимизации (по крайней мере не плохо), но так как перки неписям добавлять нельзя, то проще уже вручную закинуть их всем нужным "актерам"...

Multigone, там дело в условиях. Посмотри оригинальный перк "Фалмерский яд". Остальное - ответы на интересующие меня вопросы, за что вам, собственно, спасибо.

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





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