• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
А пока жду вашего ответа не вопрос выше, у меня назрел ещё один.
В Perk -> Perk entry есть есть вот такой Papyrus fragment. Скажите, могу ли я через него обратиться к актёру и изменить скажем actor value через ModAv ? Причём желательно не через game.getplayer(), а как-нибудь через akAktor. Нужно чтобы это срабатывало на всех актёрах, на которых висит данный перк энтри, не только к игроку.
Можно и через Ability это делать, но это не совсем удобно. В мире F4 существуют перки с большим кол-вом Pekr Entry, которые активируются в разных ситуациях на разных актёрах по кейворду, поэтому было бы здорово если бы через этот fragment я мог как-то взаимодействовать с actor value актёра на котором работает данный Perk entry (не перк в целом, а Perk entry) если это возможно конечно ?
nepewka, там же написано, что следует избегать Perk Fragments, если можно это сделать другим путем. Потому, что 1) Perk Fragments работают не для всех Entries, 2) Для Entries, не являющихся Activate, Perk Fragments будут срабатывать постоянно / непрерывно, чрезмерно загружая систему скриптов, 3) Желательно использовать Perk Fragments только для Entries - Activate, потому что код будет выполняться один раз при активации чего-либо, как в Скайриме.
Цитата nepewka
что я должен сделать, чтобы это сработало
Убрать первые 3 строки.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №3067
написано: 27 апреля 2022, 16:10
| Отредактировано: Multigone - 27 апреля 2022, 16:51
1) Вон же написано - тип переменной "текстовая" не соответствует ожидаемому "ActorValue". Все функции в F4, использующие Actor Values, имеют в качестве аргумента переменные с типом ActorValue. В отличие от Скайрима.
2) Думаю, нужно сперва написать ";" в тексте, затем скомпилировать, закрыть и заново открыть окно перка, в окне редактирования свойств скрипта добавить новую ActorValue Property Health, и только потом писать akActor.ModValue(Health, 10.0). Впрочем, я не знаю, не разбираюсь, не могу проверить.
2) Думаю, нужно сперва написать ";" в тексте, затем скомпилировать, закрыть и заново открыть окно перка, в окне редактирования свойств скрипта добавить новую ActorValue Property Health, и только потом писать akActor.ModValue(Health, 10.0). Впрочем, я не знаю, не разбираюсь, не могу проверить
не помогает( но без property нормально компилирует actorvalue health
Multigone, в общем уже и не важно, оно не работает так, как я хотел был, добавляет непонятно как значение AV видимо придётся искать ответ в Ability... либо возможно попробовать Quest как Perk entry ?
Я изначально хотел просто вести подсчёт % увеличения урона в созданном мною Actor value то есть если перк даёт 1.20 множитель, я просто приписываю к актёру скажем в этом же перке сразу ModValue(CustomAV, 1.20) и так в каждом перке.
чтобы потом в каком-нибудь скрипте взять базовый урон, допустим в магии или энчанте и перемножить его на этот CustomAV
но этот перк fragment работает без затычки, накладывая много много раз
есть идеи, как выполнить эту задачу по подсчёту всего урона через ВСЕ Perk Entry, но так чтобы это срабатывало один раз, а не множество ?
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №3072
написано: 27 апреля 2022, 18:58
| Отредактировано: Multigone - 27 апреля 2022, 19:24
nepewka, связать актера со скриптом, в котором (периодически?) будут проверяться блоки условий, соответствующих условиям всех требуемых Perk Entry, имеющихся у этого актера. В Скайриме, например, не все условия, что есть в СК Conditions, имеют аналоги в Papyrus.
V. 2: для каждого Perk Entry каждого перка создать копию, которая будет только Add Value твоего счетчика. Для этого надо найти такой тип Entry Point, который меняет какое-то неиспользуемое Actor Value, оставшееся от Скайрима (напр., Mod Armor Rating?), и значение которого можно узнать (GetAV). Нагрузка на проверку условий удваивается. Опять-таки, многие Entry Point имеют доп. вкладки с условиями, которых не будет у Mod Armor Rating. И все это в случае, если старые Entry еще работают.
nepewka, нет. Activate добавляет выбор или доп. действие при активации предмета (игроком?). Как с помощью этого поменять AV у актера-НПС? Никак.
а если создать Perk Entry - Quest, каждый новый перк энтри будет иметь свою стадию квеста, а в квесте по каждой стадии прописать фрагмент с изменением значения AV, это сработает на актёрах или только на игроке ?
nepewka, а как работают фрагменты стадий? Не выполняют ли они свой код только при переходе квеста на эти стадии? А если у тебя такой перк, который, к примеру, увеличивает урон только в случае, когда у актера уровень здоровья ниже 50%? Здоровье - переменная, меняющая свое значение, следовательно, перк может как добавлять урон, так и нет. Тебе нужно будет отследить бонус или его отсутствие через стадию квеста.
в таком случае пока у меня нету идей, как это можно осуществить. Хотя вчера я обрадовался, подумав про эти фрагменты в перках, думая что они срабатывают только при получении... Если бы можно было там какую-то затычку ставить в этом фрагменте, чтобы он постоянно не срабатывал - но наверное такой функции нету
nepewka, оптимальный способ, как я и говорил - когда необходимо узнать множители урона / прочего у актера, скриптом проверяются условия, соответствующие условиям требуемых Perk Entry. На основании проверок делаются выводы, какие Perk Entry в данный момент активны, и высчитывается множитель (по такой же формуле, что указана в Entry Point). Проблема, что не все условия СК можно проверить в папирусе. Проблема 2 в том, что бонус урона может предоставляться против опред. целей (вкладка условий Target), значит, чтобы узнать, применяется ли этот бонус, нужно еще и знать, какую цель атакует этот актер.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №3079
написано: 29 апреля 2022, 08:36
| Отредактировано: Multigone - 29 апреля 2022, 16:52
nepewka, посмотри OnTimer() и OnTimerGameTime(), похоже, это аналоги OnUpdate() и OnUpdateGameTime(), только лучше, потому что в одном скрипте можно использовать сразу несколько таймеров. Впрочем, не уверен.
nepewka, посмотри OnTimer() и OnTimerGameTime(), похоже, это аналоги OnUpdate() и OnUpdateGameTime(), только лучше, потому что в одном скрипте можно использовать сразу несколько таймеров. Впрочем, не уверен.
не, судя по всему нельзя...
C:\Users\nepej\AppData\Local\Temp\PapyrusTemp\MyMod01\AAAsc10.psc(19,0): script event ontimer already defined in the same state
всё равно не понимаю, чем ты считаешь это лучше апдейта. а если у них разные таймеры, как они будут работать ?
плюс если маг эффект слетает с цели, таймер не работает больше. тогда как старый добрый апдейт насколько я помню код выполнял до конца несмотря на слетевший эффект
всё равно не понимаю, чем ты считаешь это лучше апдейта. а если у них разные таймеры, как они будут работать ?
Может, и ничем не лучше, кроме того факта, что в одном скрипте могут выполняться несколько параллельных / независимых таймеров вместо одного. Работать они должны так, как показано выше.
Цитата nepewka
тогда как старый добрый апдейт насколько я помню код выполнял до конца несмотря на слетевший эффект
И OnUpdate() и OnUpdateGameTime() точно так же кончались, когда прекращал действовать маг. эффект. Только цикл WHILE c Wait() продолжает работать, пока условия выполняются, с сохранением всех переменных скрипта.
Изменение репутации для пользователя nepewka
nepewkaOffline
Сообщение №3087
написано: 30 апреля 2022, 11:22
| Отредактировано: nepewka - 30 апреля 2022, 11:23
И OnUpdate() и OnUpdateGameTime() точно так же кончались, когда прекращал действовать маг. эффект. Только цикл WHILE c Wait() продолжает работать, пока условия выполняются, с сохранением всех переменных скрипта.
Понял, спасибо)
Напомни пожалуйста, как через скрипт в одном модуле, получить доступ к форм ид другого модуля ? Ну то есть есть модуль1 и модуль2 Как в скрипте в модуль1, получить доступ например к спеллу из модуль2, чтобы использовать его в командах cast
модули имею ввиду обычные esp и esl(те которые создаются сверхлимита), но к последним я так понимаю доступа через скрипт не получишь, ведь так ?
Проверил уже, да, должен быть подгружен. А я уже подумал, что можно таким способом из какого угодно файла подгружать формы, наплевав таким образом на лимит подгрузки в 255 плагинов
Форум » TES V: Skyrim » Мастерская » Вопросы по скриптам Papyrus (О скриптах Papyrus (Skyrim). Скриптеры не проходите мимо!)