• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
PitrPokir, да, говорят, что после обновления 1.7 (если не ошибаюсь) Беседчики сделали так, что призыв существ и поднятие нежити становится эффектом "На себя". Кстати, это создало кучу проблем, с поглощением заклинаний (талант "Атронах" и т.п.). Поэтому надо что-то думать...
Lexo, а сработает, если создать какой-то эффект на цель, типа захвата душ, который и удалит предметы с трупа, а после него что бы активировался скрипт оживления? Подскажите, пожалуйста, как выглядит команда на добавление эффекта? Или AddSpell подойдет?
Изменение репутации для пользователя Kepper
KepperOffline
Сообщение №2283
написано: 10 января 2017, 13:25
| Отредактировано: Kepper - 10 января 2017, 13:27
PitrPokir, AddSpell не подойдёт. Зачем обучать труп заклинанию поднятия мертвеца? Это ведь не способность. Лучше воспользуйся Cast(ObjectReference akSource, ObjectReference akTarget)
Повесь этот скрипт на какое-нибудь заклинание типа огненная стрела
Kepper, повесил на огненную стрелу. Мертвых фаербол просто швыряет, никаких эффектов. Ни удаление предмета, ни оживление, несмотря на скрипт. На живых работает полностью. Сначала летит фаербол, потом при попадании вылетает спелл на оживление. Предметы тоже удаляются. Сделал отдельно заклинание оживления без скрипта на удаление предметов и отдельно фаербол на удаление предметов. На живых и оживленных фаербол работает как надо, удаляет предметы и у тех, и у других. Пробовал так же делать заклинание с двумя эффектами, первый оживляет, а второй повышает атрибут, на нем же висит скрипт на удаление предмета. В итоге труп вообще не оживлялся, вылезало сообщение, что "избегает воздействия"... Чую, что у этой механики оживления кучу подводных камней, по крайней мере в самом процессе накладывании эффекта. ЗАРАБОТАЛО! Прошу прощение за дезинформацию в вышесказанном, это моя невнимательность. Вариант с двумя маг.эффектами в одном заклинании как раз рабочий. Один эффект - само оживление, другой же пуст, но на нем висит скрипт на удаление предмета (еще я там выбирал в Effect Archetype вариант Script, но я не уверен, что это имеет влияние в данном случае). Таким способом работает. Просто я не обратил внимание и не убрал кривой перк в условии, оно не давало эффекту запуститься. Всем большое спасибо за помощь.
Добавлено (12 Января 2017, 16:44) --------------------------------------------- Подскажите, пожалуйста, как в папирусе выглядит функция или команда, которая повышает лимит призванных существ? В перках есть строчка "modify commanded actor limit", но доступные на выбор функции не дают достаточной гибкости. Как это вообще можно с помощью скрипта реализовать?
PitrPokir, не видел ничего такого. По-моему, только через перк. Хотя перком можно управлять из скрипта в какой-то мере. Можно сделать, чтоб какая-то глобальная переменная указывала максимальное количество призванных существ. Из скриптов или из консоли переменную можно было бы менять, а в перке штук 10 энтри поинтов такого типа: 1. Установить макс. количество существ в 1, если значение переменной == 1 2. Установить макс. количество существ в 2, если значение переменной == 2 итп
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №2286
написано: 13 января 2017, 00:02
| Отредактировано: PitrPokir - 13 января 2017, 00:15
Dsion, не совсем то, что мне надо, но способ учту, спасибо.
Lexo, я ввел дополнительную ветку в колдовство и несколько новых существ для призыва, некоторые перки повышают лимит этих суммонов, но дефолтных не трогают. Тем не менее, они все-равно имеют негативное влияние. Если превысить их лимит, то уничтожаются сразу все мои суммоны, что не может не огорчать и доставлять много неудобств в самой игре. Если я плохо выразился, то приведу пример. Допустим, я оживил или призвал 5 скелетов из своего мода и 1 дефолтного огненного атронаха. Нежить связана ключевыми словами с новыми перками на повышение лимита, а атронах не тронут, его лимит дефолтный. Я призываю еще одного атронаха и почему-то при превышении лимита взамен уничтожается не атронах, не один скелет, а сразу все. Понятное дело, что 2 атронаха без перка "парные души" быть не может, но и ломать всех моих ребят за раз тоже как-то не вежливо. Я хотел как-то сделать, что бы дефолтные существа при призыве записывались в какую-то отдельную переменную и заменяли друг друга, а не всех моих сразу. Ну или хотя бы по одному. Но пока не добился в этом успеха. Еще думал на призыв существ с дефолтными ключевыми словами прицепить скрипт, который будет сам уничтожать уже призванного дефолтного суммона и тем самым освобождать место для нового до того, как игра решит устроить геноцид всей моей нежити. Но в силу своей неопытности пока только думаю как это реализовать.
Изменение репутации для пользователя Dsion
DsionOffline
Сообщение №2287
написано: 13 января 2017, 05:10
| Отредактировано: Dsion - 13 января 2017, 05:14
PitrPokir, можешь оставить ванильные лимиты как есть, а свою нежить вызывать не магическим эффектом "summon creature", а скриптовой командой. И тогда извращайся как хочешь... Пока ты своих саммонов скриптовой же командой не удалишь, никуда они не денутся. Ну только придется с актором поработать: сделать им пакет для следования за игроком, сделать им скриптик для самоуничтожения по таймеру итп. Если будешь так делать, не забудь перепроверить трижды, что референсы правильно удаляются. Или можно заранее создать штук 30 референсов скелетов, а потом с ними работать. Когда надо призывать: reset, enable, moveto; а когда он умирает или истекает время: disable. Такой вариант чуть надежнее потому что с ним ты точно не налажаешь и сейвгейм не начнет забиваться неудаленными референсами.
Dsion, а нельзя просто повесить скрипт на перк, который будет контролировать количество дефолтных суммонов? Т.е. код, который будет убивать/завершать эффект дефолтного суммона, если игрок призывает нового. Лимит при этом можно задать сразу всем и не будет конфликта, о котором я писал. Ну, это, конечно, в теории. Я просто плохо знаю папирус и у меня на реализацию этого минимум день уйдет, поэтому не могу сразу все проверить.
Изменение репутации для пользователя AlexeyVN
AlexeyVNOffline
Сообщение №2289
написано: 16 января 2017, 16:31
| Отредактировано: Multigone - 23 апреля 2020, 09:35
Dsion, Здравствуйте, лазал по форуму увидел ваш скрипт. Вы не могли бы мне объяснить почему он не срабатывает на пентаграме душ и на точильном камне? ведь там тоже что то добавляется в инвентарь.
Ой, это я такое написал? Жуть какая. Если надо отследить крафт, попробуй использовать Story Manager Event. Посмотри в SM Event Node. Ну или еще что-то. Но точно не такой скрипт
Ага, можно-можно. Там можно и референс предмета получить, и референс "стола", на котором он создан. На референсе стола можно ключевые слова проверять.
Посмотрел. Там вообще-то скрипт не такой, как ты скопировал А я то думал "неужели я забыл сделать проверку того, на что именно садится игрок". Оказывается, не забыл)
Квест ты создал, да? Алиас игрок в квесте тоже создал? Скрипт на алиас повесил? И не работает? Добавь в Event OnSit строчку типа: Debug.MessageBox("sit") Сначала узнаем, срабатывает ли ивент, когда игрок садится за точильный камень. Можешь еще на обычный стул сесть - должно точно срабатывать.
Dsion, 1) Создал Quect с Event Craft Item 2) Создал Alias, From Event - Workbench 3) Создал 0 стадию и повесил скрипт типа Debug.MessageBox() 4) В SM EVENT NODE - Craft item Создал New Quest Node и повесил на него Quest 5) в Quest назначил условия HasKeyword - WiCraftingEnchanting == 1 Event Data:Workbench - Workbench
вот что я сделал. Mне не ясно как Там можно референс предмета получить?
Когда квест запускается таким ивентом, на скрипте квеста сработает Event OnStoryCraftItem(ObjectReference akBench, Location akLocation, Form akCreatedItem) ну да, базовый объект только, не референс...
Тем не менее, если в окно объектов кинуть кинжал, а в каком-нибудь скрипте заполнить им ObjectReference Property _TESTREFR Auto, то таким кинжалом можно управлять, когда он находится в инвентаре и сложен в стек - например, выбросить его оттуда с помощью _TESTREFR.MoveTo(Game.GetPlayer()).
Если к референсу этого кинжала добавить скрипт, то его self будет хранить информацию о себе, даже когда он попадает в инвентарь:
Dsion, если предметы были добавлены в инвентарь не подбором из мира, то у них, конечно, не будет своего id. Когда они будут выброшены, игра сформирует временный refid для этого стека (как если бы использовалась placeatme()). Наверное, поэтому, когда выбрасывается сразу весь стек из камней душ, вместо одной модели появляется несколько - стек из купленных / созданных (не имевших своего id) и отдельным предметом каждый из найденных в мире.
Изменение репутации для пользователя Lexo
LexoOffline
Сообщение №2303
написано: 17 января 2017, 21:01
| Отредактировано: Lexo - 17 января 2017, 21:03
Прошу прощения за мою тупость, но даже с вашими весьма развёрнутыми советами я никак не могу сделать то, что хотел. В общем, пытался сделать бросок щита. Новую анимацию я, разумеется, вставить никак не смог, так что, обходился тем, что есть: условие спринта, блока, и баш-удара. Как ни странно - работает: бегу с щитом (Живой молот), нажимаю кнопку атаки... персонаж останавливается, производит удар щитом, кидается заклинание. По-сути, всё, что нужно. Только... никак не получается сделать так, что бы щит появился на месте удара заклинания (не, можно, конечно, сделать, что типа он бумеранг и возвращается после удара, но это же тупо).
В общем, абилка, висячая на игроке: постоянный эффект - на себя.
If (_LEXO_DropShield.GetValue() == 0) Self.PlaceAtMe(ActivatorRef) ActivatorRef.Enable() Debug.Notification("Щит упал!") _LEXO_DropShield.SetValue(1) EndIf
Self.Delete()
EndEvent
Всё до момента "Debug.Notification("Щит упал!")" работает (сообщение высвечивается). Но щит ни в какую не хочет перемещаться к месту удара.
Подскажите, пожалуйста (если такое возможно), как правильно сделать так, что бы на месте удара появлялся тот самый щит, который игрок только что держал в руке (например, если я нашёл модовый щит, сам зачаровал его на что-попало, что бы был именно этот щит с этим зачарованием)...
Если нужно, чтоб метался именно тот щит, что на игроке, то есть проблема с получением его id. Мне только два ваианта решения приходят на ум: 1. Сделать один уникальный щит и игрок сможет метать только его. 2. Помечать щит при взятии его из мира. Но щит должен именно валяться где-то. А если попал к игроку другим способом, то придется выбросить и взять заново. Не очень, да? Ну это единственная проблема. Остальное - легко.
А ты в курсе, что щит можно зафутболить куда-то и без прожектила, взрыва, активатора и прочей ерунды? Можно его "реально" бросить. Сначала разместить у игрока на уровне рук, а потом хорошенько пнуть в направлении взгляда игрока. Вот это было бы весело... А с прожектилом - так себе...
это я уже давно понял... но, к сожалению, без них в Скайриме ничего из того, что я хочу, не сделаешь (да и с ними 80% идей не удаётся)... а помогать никто, кроме вас, не хочет... вот и приходится тратить недели, ломая голову, ради одного эффекта, который в итоге не работает, и вас постоянно дёргать...
Ну есть еще вариант, при котором мы выбрасываем из инвентаря игрока такой же щит, какой на нем надет, и ловим референс выброшенного предмета. Но если у игрока в инвентаре есть еще один щит с таким же базовым объектом, может вылететь не тот.
Добавлено (18 Января 2017, 20:05) --------------------------------------------- Давай, лучше, зафигарим "Молот Тора". Уникальный. Который можно будет метать. И чтоб бандиты ВООЩЕ НАФИГ ОТЛЕТАЛИ при ударе. А после броска, чтоб он летел обратно к хозяину. Круто же? Я, правда, прямо так сходу не в курсе, как определить, в кого он попал...
Господа, снова без вашей помощи не обойтись. На прошлой странице я обращался за помощью по поводу скрипта, который должен оживлять мертвеца и при этом удалять у него указанный предмет. Как выяснилось, сам эффект оживления применяется только на себя, поэтому выбрать таргет не удавалось и скрипт работал неправильно. Далее я писал, что нашел решение в виде второго скриптового эффекта, но тут тоже осечка. Я не могу подобрать условия, что бы второй эффект работал именно как второй, т.е. только если первый сработал. Если указать в условиях проверку на наличие эффекта, то получается, что если уже такой эффект есть, не важно когда наложенный, то эффект на удаление предмета будет срабатываться независимо от первого, даже если кастовать в живого нпс или уже оживленного. Вводил глобальную переменную, в которую прибавлялось +1, если эффект оживления сработал. Тогда во втором эффекте происходила проверка глобальной переменной и только тогда срабатывал, а после команды удаления предмета снова обнулял её. Но почему-то несмотря на то, что значение переменной увеличивалось, второй эффект на это не реагировал. И только со второго раза, когда переменная уже была единицей заранее, второй эффект работал. И так было каждый раз. Т.е. видимо проверка переменной начинается раньше, чем она достигает требований. Как вообще можно добиться нужного результата? Прошу вашей помощи, т.к. своих идей уже нету. Спасибо за внимание.
PitrPokir, давай с начала: 1. Ты уверен, что второй эффект накладывается именно на труп? А первый - именно на игрока? 2. Если на первый эффект (реанимация) повесить условия типа "subject isdead", то на ком оно будут проверяться: на игроке или на цели? 3. Если на второй эффект повесить условия, на ком они будут проверяться?
Тебе ведь нельзя просто поднять трупак и удалить у него пыль. На эффекте поднятия должна быть проверка, что у трупа есть пыль. И если пыли нету, эффект не должен срабатывать, да? Как ты это сделал?
Добавлено (20 Января 2017, 15:26) ---------------------------------------------
Цитата Dsion
Давай, лучше, зафигарим "Молот Тора". Уникальный
Я думал такую фигню с Волендрангом провести... его же по легенде какой-то двемер зафигарил чёрт знает куда, и там образовали Хаммерфелл...
Добавлено (20 Января 2017, 15:27) --------------------------------------------- Но у меня ещё вопрос: а есть способ отследить, что была успешно проведена карманная кража?