• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
Изменение репутации для пользователя Lexo
LexoOffline
Сообщение №2101
написано: 16 мая 2016, 19:19
| Отредактировано: Lexo - 16 мая 2016, 19:29
Я б не сказал, что совсем уж потрясающе. Единственное, что в скрипте ценного (и над чем я долго думал), это система возврата предметов, но я ее пилил еще давно, а сейчас просто чуть улучшил.
А, в первом спойлере нужно закомментировать Debug.Notification("+").
я просто спросил... я в обычных-то скриптах не всё знаю, а в СКСЕ тем более... но я проверил в игре - всё работает! Правда, при второй попытке меня выкинуло... но это бывает...
Lexo, меня тоже один раз (из многих тестов), когда я пытался сунуть НПС 6 флаконов зелья, но я не понимаю, с чем это связано. В скрипте нет структур, которые могли бы сильно загрузить процессор или заставить движок выполнять множество одновременных команд. К слову, меня иногда (редко) выкидывает из МСМ-меню, когда я тестирую разные настройки. Совершенно рандомные вылеты. В общем, используй на свой страх и риск.
Добавлено (17 Мая 2016, 09:22) --------------------------------------------- Перепроверил - всё прекрасно работает. Половину Вороньей Скалы обворовал - ни одного выкидывания... но возникла проблема:
Это воровство телекинезом повышает навык Изменения свыше 100... как такое могло произойти?
Добавлено (17 Мая 2016, 09:36) --------------------------------------------- И ещё один вопрос попутно: Я нашёл способ, как сделать, что бы при рукопашной повышались карманные кражи - повесил на удары кулаком скрипт, который повышает навык. А как сделать, что бы при взломе замков повышался навык карманных краж (если вдруг я захочу объединить эти две ветки)? И есть ли способ хитрее того, который придумал я?
Spell Property RingVisibility auto Outfit Property kOutfitEmpty Auto ; пустой оутфит Outfit kOutfit
Faction property CurrentFollowerFaction Auto
Event OnEquipped(Actor akActor) akActor.AddSpell(RingVisibility, false) if !kOutfit if akActor != Game.GetPlayer() kOutfit = akActor.GetActorBase().GetOutfit() akActor.GetActorBase().SetOutfit(kOutfitEmpty) akActor.QueueNiNodeUpdate() endif endIf endEvent
Event OnUnequipped(Actor akActor) akActor.RemoveSpell(RingVisibility) if akActor != Game.GetPlayer() akActor.GetActorBase().SetOutfit(kOutfit) akActor.QueueNiNodeUpdate() kOutfit = none if ! akActor.IsInFaction(CurrentFollowerFaction) akActor.SetPlayerTeammate(false) endIf endIf endEvent
Ничего особенного. Само одевание кольца заставляет персонажа, кто его одел, стать спутником, снимание кольца освобождает спутника. Этот же скрипт делает кольцо видимым от первого лица (оно занимает нестандартный слот) через заклинание и он же обеспечивает доступ игроку к оутфиту персонажа. Но дело не в том, что делает кольцо, а в том, что если я это кольцо положу в интерьер, то потом его можно подобрать и оно работает как надо, а вот если я его положу в контейнер (сундук) и возьму его оттуда, кольцо не работает. Но что интересно, если я его возьму из сундука, брошу на пол и потом подберу, то работает как надо! Почему не работает из сундука? И что сделать, чтобы заработало, чтобы не объяснять пользователям, что они должны сначала кольцо выбросить, потом подобрать и только потом пользоваться
Изменение репутации для пользователя Aksyonov
AksyonovOffline
Сообщение №2107
написано: 21 мая 2016, 13:00
| Отредактировано: Aksyonov - 21 мая 2016, 13:01
Здравствуйте, всем привет, скажите пожалуйста кто нибудь знает функцию в Condition Functions которая бы указывала условие - которая происходит после попадания по цели стрелой? хочу сделать скрипт который заработал бы при попадания стрелы по цели - он скрипт вообще нужен или можно обойтись Condition Functions ?
Прав-прав... Если делать какой-то турнир лучников, в котором надо попасть по яблоку, то нужен скрипт на яблоко с ивентом OnHit. Или на алиас, в котором яблоко.
Изменение репутации для пользователя Aksyonov
AksyonovOffline
Сообщение №2110
написано: 22 мая 2016, 01:20
| Отредактировано: Aksyonov - 22 мая 2016, 01:21
рав-прав... Если делать какой-то турнир лучников, в котором надо попасть по яблоку, то нужен скрипт на яблоко с ивентом OnHit. Или на алиас, в котором яблоко.
А что если цель такова - что нужно воспроизводить звук каждый раз при попадании стрелой по живой цели? не попадаешь ничего не происходит? значит одним только Condition Functions не обойтись?
Да Conditions ты, походу, тоже не очень круто понял. Это не мгновенные события, а состояния.
Только звук? Если только для стрел игрока, можно было бы легко сделать через перк. К выстрелам из лука прицепить заклинание, которые будет воспроизводить звук. Еще, наверное, можно просто поменять звук, с котором стрелы втыкаются в акторов... Такое даже без esp можно...
Изменение репутации для пользователя Aksyonov
AksyonovOffline
Сообщение №2112
написано: 22 мая 2016, 02:16
| Отредактировано: Aksyonov - 22 мая 2016, 02:18
можно просто поменять звук, с котором стрелы втыкаются в акторов...
По поводу заклинания да не дошло ) спасибо, но будет ли звуки на заклинании и звук который воспроизводиться при втыкании в актеров слышно на расстоянии в 80 метров? 0_0
Только что то я не слышал вроде звука при втыкании стрел, он точно есть? надо будет прислушаться
В дополнение к моему вопросу https://modgames.net/forum/110-9434-1247624-16-1463833598 похоже, это глюк контейнеров. Попробовал положить в контейнер не 6 колечек одновременно, а 6 раз по одному. Редактор позволил. Но в игре в сундуке они выглядят как 6 раз по 6! Но если взять из сундука одну позицию из шести, то там убираются все.
Честно говоря, я в скрипт на кольце вообще не врубился :( Каким образом он делает NPC спутником? Как дает доступ к его аутфиту? Ну понял только, что оно устанавливает пустой аутфит для NPC, на которого надевается, и возвращает дефолтный аутфит, когда снимается.
А зачем его надевать игроку? И как именно оно не работает? Ты берешь его из сундука, потом даешь NPC, а NPC не раздевается? В общем, не ясно... Это точно полный скрипт?
Из того, что могло бы иметь отношение к делу, я помню только то, что на референсах со скриптом заново вызывается OnInit каждый раз, когда его выбрасываешь из инвентаря в мир.
Dsion, Скрипт полный. 1. Спутником делает НПС не скрипт, а одевание кольца. Одевание его стоит в условии специального пакета следования. 2. Если заменить оутфит на пустой (на самом деле, не пустой, так как там лежит одно колечко, так как пустые игра обрабатывает не корректно), то содержание текущего оутфита вываливается в инвентарь персонажа и становится доступно из меню обмена вещами. Пока персонаж в спутниках, он пользуется шмотками из инвентаря, который доступен и игроку. При снимании кольца шмотки из исходного оутфита возвращаются в его оутфит. Если их в инвентаре нет, оутфит восстанавливается полностью.
Собственно говоря, обсуждать работу кольца не нужно, так как кольцо работает прекрасно. Проблема в том, что его работа прекращается (совсем, не работает ничего из скрипта), если положить в сундук несколько колец (у меня их шесть для шести потенциальных спутников), взять их оттуда и одеть, хоть себе, хоть персонажу (персонаж имеет специальный диалог обмена вещами даже до того, как стал спутником). Но если кольцо выбросить в мир (хоть все шесть), подобрать их с пола, то они все работают. Если положить их в сундук не скопом, а по отдельности 6 раз по одному, то они прекрасно работают будучи взяты из сундука, но тогда глючит уже сундук. Он показывает 6 раз по 6 колец, хотя берутся оттуда только 6.
Кажется, нашёл решение, хотя не очень красивое: Персонифицировал кольца. Теперь каждому персонажу надо дать именно его кольцо. Теперь они разные, а не одинаковые, так как принадлежат разным персонажам. В сундуке показываются правильно.
Изменение репутации для пользователя Holtof55
Holtof55Offline
Сообщение №2118
написано: 22 мая 2016, 10:55
| Отредактировано: Holtof55 - 22 мая 2016, 10:57
Привет всем. В общем дело такое. Делаю танцы, видео можно посмотреть тут - https://vimeo.com/167538368, а скачать из моего блога(ссылка есть под каждым видео) Дело вот в чем, так как у меня в игре танцуют только нпс(гг не танцует) то я упустил из виду 3д камеру. Если взять игрока танцором, то камера улетает под потолок(в V-6 я это убрал) ...но в танцах, которые делал раньше, эта проблемка осталась. Переделывать 60 танцев чет желания нет никакого В общем нужен кусок скрипта устанавливающий камеру от "третьего лица" на уровень головы игрока(ну как по дефолту). Кто-то сможет мне написать такую функцию? Кнопки в меню не надо, ползунок -не надо, только эту функцию. Отсылать на обучение тоже не надо. Спасибо
Aksyonov, если предметы квестовые (их нельзя выкинуть), то вот примерный скрипт на алиасы:
Код
Scriptname X extends ReferenceAlias
GlobalVariable Property MyGlobal Auto ; Новая глобальная, значение 0.
Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) if akNewContainer == Game.GetPlayer() MyGlobal.Value += 1.0 ; Считаем предметы. EndIf IF MyGlobal.Value >= 5.0 ; Пусть у нас 5 разных квестовых предметов. GetOwningQuest().SetStage(7) ; Нам нужно установить 7 стадию. Endif EndEvent
Вместо глобальной можно использовать переменную скрипта квеста. В общем, см. FreeformRiften14, правда, там немного по-другому.
И ещё один вопрос попутно: Я нашёл способ, как сделать, что бы при рукопашной повышались карманные кражи - повесил на удары кулаком скрипт, который повышает навык. А как сделать, что бы при взломе замков повышался навык карманных краж (если вдруг я захочу объединить эти две ветки)? И есть ли способ хитрее того, который придумал я?
как сделать, что бы при взломе замков повышался навык карманных краж
При активации перком узнаем референс закрытого объекта. Ждем мгновение (Wait()). Проверяем, закрыт ли объект. Если нет, повышаем навык. Думаю, это можно реализовать.
Пытаюсь на основе взлома замков из этого мода создать свой (как обычно). Хочу написать формулу, которая будет расчитывать рандом, умноженный на навык взлома и делённый на уровень замка (Random*LockpickingLevel/LockLevel). Да только проблема - как написать "Определить уровень навыка взлома"?
Пробовал вписать LockPickLevel == Player.GetSkill("LockPicking"), пробовал LockPickLevel == Player.GetSkillLevel("LockPicking") - ничего не подходит. Не подскажете, как быть?
Ребята, все привет Возник вопрос по функции SetAttackActorOnSight(). Задумал сделать соратников-вервольфов дружественными к игроку-оборотню в форме зверя, но не нашел способа обхода этой функции в скрипте PlayerWerewolfChangeScript. С ней эти персонажи, как и прочие, становятся к игроку враждебными даже будучи его компаньоном (странно, но другие компаньоны, например Лидия, враждебными не становятся, даже если не сопровождают игрока). Манипуляции с фракциями в редакторе ничего не дали. Попробовал отключить эту функцию, но при этом все вокруг на вервольфа-зверя не реагируют и воспринимают как обычно со всеми вытекающими (причем даже фракции, прописанные как враги для PlayerWerewolfFaction). Если кто знает, как решить эту задачку, подскажите плс.
Multigone, проверил на Эйле, эффекта нет. Попробовал применить EvaluatePackage() в том числе, он, вроде, ИИ перезагружает, тоже не помогло. Тестил в вайтранском доме, так вот: Эйла атакует, Лидия нет, только бегает и орет "Помогите", как враг не помечается и при этом не в напарниках. На всякий случай, мой скрипт (прикреплен к Эйле в Actors):
MagicalDagger, минутку. Все изменения базового объекта в СК после того, как нужный референс был инициализирован и записан в сохранение, не возымеют никакого эффекта. Т. о., скрипт нужно вешать на алиас актера, не на ActorBase.
Чтобы проверить, работает ли скрипт, можно добавить уведомление куда-нибудь.
Изменение репутации для пользователя MagicalDagger
Multigone, у других ActorBase такое проходило, например, добавление фракций и спеллов (проверял через новые появившиеся диалоги). На всякий случай проверил на ней же, работает. Попробую еще раз через Alias, отпишусь.
А у меня ещё вопрос: Есть ли функция, которая определяет, стоит ли перед персонажем другой персонаж? Т.е. хочу сделать скрипт, который кидает заклинание перед персонажем, но только если перед ним стоит другой персонаж.