На днях начал знакомство с CK и некоторые вещи слабо понимаю. Благо инфы немало, но иногда даже неясно в какую сторону искать. Я бы хотел реализовать небольшое меню после нажатия кнопки действия на труп или применения заклинания. Например, как выбор поедание трупа или обыскать у каннибалов или питание у вампиров, только желательно в несколько вариантов действий, поболее двух. Это реально? Хотел бы знать какие элементы использовать для этого, если реально.
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №2
| Тема: Вопросы по Creation Kit SE
написано: 8 января 2017, 18:18
| Отредактировано: PitrPokir - 10 января 2017, 13:55
snnut, спасибо за ссылки и информацию. Начал знакомство в СК64, потому что сам играю в SSE и неохота возвращаться на SLE. Не то что бы грандиозные планы, просто хочу несколько фич сделать. Буду надеяться, что этого СК хватит
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №3
| Тема: Вопросы по скриптам Papyrus
написано: 8 января 2017, 21:39
| Отредактировано: PitrPokir - 8 января 2017, 21:40
Господа, подскажите, почему в игре указанный предмет пропадает у Caster'a, а не у Target'a? Более того, предмет в обоих вариантах удаляется у игрока из инвентаря, а не у цели, на ком бы функция не работала. Весь день ковыряюсь в этих строчках, ума не приложу в чем беда.
Kepper, у меня в логах папируса почему-то одинаковый ID и у цели, и у кастера. В чем может быть проблема? Скрипт лежит в эффекте "Оживление трэлла". Я его дублировал, назвал по-своему и добавил этот скрипт. Спелл тоже почти не менял, разве что оставил только этот маг.эффект и длительность урезал, что бы не убивать раз за разом оживленный труп. Игру и СК переустанавливал, плагин заново создавал, всё тоже самое. P.S.Может дело в самом маг.эффекте? Трэлл же типа принадлежит игроку, может поэтому и ссылается на него. Но даже если так, я не знаю что с этим делать P.P.S. игра чистая, только официальные DLC
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №6
| Тема: Вопросы по скриптам Papyrus
написано: 10 января 2017, 12:34
| Отредактировано: PitrPokir - 10 января 2017, 12:35
Lexo, а сработает, если создать какой-то эффект на цель, типа захвата душ, который и удалит предметы с трупа, а после него что бы активировался скрипт оживления? Подскажите, пожалуйста, как выглядит команда на добавление эффекта? Или AddSpell подойдет?
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №7
| Тема: Вопросы по скриптам Papyrus
написано: 12 января 2017, 13:44
| Отредактировано: PitrPokir - 10 января 2017, 17:40
Kepper, повесил на огненную стрелу. Мертвых фаербол просто швыряет, никаких эффектов. Ни удаление предмета, ни оживление, несмотря на скрипт. На живых работает полностью. Сначала летит фаербол, потом при попадании вылетает спелл на оживление. Предметы тоже удаляются. Сделал отдельно заклинание оживления без скрипта на удаление предметов и отдельно фаербол на удаление предметов. На живых и оживленных фаербол работает как надо, удаляет предметы и у тех, и у других. Пробовал так же делать заклинание с двумя эффектами, первый оживляет, а второй повышает атрибут, на нем же висит скрипт на удаление предмета. В итоге труп вообще не оживлялся, вылезало сообщение, что "избегает воздействия"... Чую, что у этой механики оживления кучу подводных камней, по крайней мере в самом процессе накладывании эффекта. ЗАРАБОТАЛО! Прошу прощение за дезинформацию в вышесказанном, это моя невнимательность. Вариант с двумя маг.эффектами в одном заклинании как раз рабочий. Один эффект - само оживление, другой же пуст, но на нем висит скрипт на удаление предмета (еще я там выбирал в Effect Archetype вариант Script, но я не уверен, что это имеет влияние в данном случае). Таким способом работает. Просто я не обратил внимание и не убрал кривой перк в условии, оно не давало эффекту запуститься. Всем большое спасибо за помощь.
Добавлено (12 Января 2017, 16:44) --------------------------------------------- Подскажите, пожалуйста, как в папирусе выглядит функция или команда, которая повышает лимит призванных существ? В перках есть строчка "modify commanded actor limit", но доступные на выбор функции не дают достаточной гибкости. Как это вообще можно с помощью скрипта реализовать?
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №8
| Тема: Вопросы по скриптам Papyrus
написано: 13 января 2017, 00:02
| Отредактировано: PitrPokir - 13 января 2017, 00:15
Dsion, не совсем то, что мне надо, но способ учту, спасибо.
Lexo, я ввел дополнительную ветку в колдовство и несколько новых существ для призыва, некоторые перки повышают лимит этих суммонов, но дефолтных не трогают. Тем не менее, они все-равно имеют негативное влияние. Если превысить их лимит, то уничтожаются сразу все мои суммоны, что не может не огорчать и доставлять много неудобств в самой игре. Если я плохо выразился, то приведу пример. Допустим, я оживил или призвал 5 скелетов из своего мода и 1 дефолтного огненного атронаха. Нежить связана ключевыми словами с новыми перками на повышение лимита, а атронах не тронут, его лимит дефолтный. Я призываю еще одного атронаха и почему-то при превышении лимита взамен уничтожается не атронах, не один скелет, а сразу все. Понятное дело, что 2 атронаха без перка "парные души" быть не может, но и ломать всех моих ребят за раз тоже как-то не вежливо. Я хотел как-то сделать, что бы дефолтные существа при призыве записывались в какую-то отдельную переменную и заменяли друг друга, а не всех моих сразу. Ну или хотя бы по одному. Но пока не добился в этом успеха. Еще думал на призыв существ с дефолтными ключевыми словами прицепить скрипт, который будет сам уничтожать уже призванного дефолтного суммона и тем самым освобождать место для нового до того, как игра решит устроить геноцид всей моей нежити. Но в силу своей неопытности пока только думаю как это реализовать.
Dsion, а нельзя просто повесить скрипт на перк, который будет контролировать количество дефолтных суммонов? Т.е. код, который будет убивать/завершать эффект дефолтного суммона, если игрок призывает нового. Лимит при этом можно задать сразу всем и не будет конфликта, о котором я писал. Ну, это, конечно, в теории. Я просто плохо знаю папирус и у меня на реализацию этого минимум день уйдет, поэтому не могу сразу все проверить.
Господа, снова без вашей помощи не обойтись. На прошлой странице я обращался за помощью по поводу скрипта, который должен оживлять мертвеца и при этом удалять у него указанный предмет. Как выяснилось, сам эффект оживления применяется только на себя, поэтому выбрать таргет не удавалось и скрипт работал неправильно. Далее я писал, что нашел решение в виде второго скриптового эффекта, но тут тоже осечка. Я не могу подобрать условия, что бы второй эффект работал именно как второй, т.е. только если первый сработал. Если указать в условиях проверку на наличие эффекта, то получается, что если уже такой эффект есть, не важно когда наложенный, то эффект на удаление предмета будет срабатываться независимо от первого, даже если кастовать в живого нпс или уже оживленного. Вводил глобальную переменную, в которую прибавлялось +1, если эффект оживления сработал. Тогда во втором эффекте происходила проверка глобальной переменной и только тогда срабатывал, а после команды удаления предмета снова обнулял её. Но почему-то несмотря на то, что значение переменной увеличивалось, второй эффект на это не реагировал. И только со второго раза, когда переменная уже была единицей заранее, второй эффект работал. И так было каждый раз. Т.е. видимо проверка переменной начинается раньше, чем она достигает требований. Как вообще можно добиться нужного результата? Прошу вашей помощи, т.к. своих идей уже нету. Спасибо за внимание.
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №11
| Тема: Вопросы по скриптам Papyrus
написано: 20 января 2017, 15:47
| Отредактировано: PitrPokir - 20 января 2017, 16:09
Dsion, вот 2 скрина и 2 кода их скриптов. Возможно, так будет проще избежать недопонимания в дальнейшем и не придется читать так много моих нубских объяснений)
Event OnEffectFinish(Actor akTarget, Actor akCaster) akCaster.ModActorValue("Magicka", necroMana) EndEvent
Касательно вопросов: 1) Ты уверен, что второй эффект накладывается именно на труп? А первый - именно на игрока? - Насчет первого уверен. Я проверял лог папируса, с трудом нашел нужную строчку из всего хлама, но там в Таргете и Кастере было ID игрока и предмет удаляется у него. А вот второй работает на оживленного мертвеца, как я понял. Ранее я делал отдельный спелл на удаление предметов и он на трупов не работал. 2) Если на первый эффект (реанимация) повесить условия типа "subject isdead", то на ком оно будут проверяться: на игроке или на цели? - Думаю, что на цели, потому что есть условие проверки ингредиента и проверяет именно у цели. 3) Если на второй эффект повесить условия, на ком они будут проверяться? - Проверяются на том, что указано.
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №12
| Тема: Вопросы по скриптам Papyrus
написано: 20 января 2017, 17:15
| Отредактировано: PitrPokir - 20 января 2017, 17:23
Dsion, скрины поправил, предложенную проверку сделал. 1. Да. Игрок и игрок. 2. ID трупа и ID таргета совпадают, так что осмелюсь предположить, что работает таки на труп. Да. 3. Да. Сейчас проверю.
Добавлено (20 Января 2017, 20:15) --------------------------------------------- Наконец-то, работает как надо! Может, конечно, если поизвращаться, то можно будет найти такое состояние цели, когда реанимация не сработает, а удаление предмета сработает, но я ничего не могу придумать Спасибо большое за помощь, я почему-то недосмотрел все условия, начал какие-то глобальные переменные вводить, а ведь истина была близко. Еще сбило с толку то, что отдельное заклинание с удалением предмета не работало на трупы. До сих пор не могу понять почему, может архетип заклинания опять был неподходящий, то ли в условиях ошибся... ну да ладно. Еще раз спасибо.
Как можно при клонировании актера выделить клона, что бы проводить над ним дальнейшие операции, а не над целью, которую клонировали? Хотелось бы наложить несколько эффектов на клона. Использую функцию PlaceActorAtMe, альтернатив не встречал:
Код
Actor Property GhostActor Auto ActorBase Property GhostActorBase Auto
Event OnEffectStart(Actor Target, Actor Caster) GhostActor = Target GhostActorBase = GhostActor.GetBaseObject() as ActorBase GhostActor.PlaceActorAtMe(GhostActorBase) EndEvent
И реально ли сделать клон с такой же внешностью, экипировкой и параметрами, как и у цели? Если клонировать уникального НПС, то так и работает, а если какого-то бандита или драугра, то клон другой.
Не могу разобраться, что я сделал не так? Цель за мной не следует, никого не атакует, даже если бьют ее. Ходят просто по своему маршруту с обнаженным оружием.
Dsion, мне надо призвать духа указанной цели и заставить его следовать за игроком, сражаться за игрока. Пока что я сделал тестовое заклинание на копию актера с накладыванием на него визуальных эффектов призрака и второе заклинание на подчинение, а вот оно работает непонятно как. Ни помощи в бою, ни следования. Во фракцию он попадает, т.к. он тоже становится врагом моих врагов (ну или это не из-за фракции, не знаю точно), а вот сам он какой-то пофигист. В описании функции SetPlayerTeammate() сказано, что актер будет следовать и повторять некоторые действия за игроком, но в игре я этого не наблюдаю
П.С. с квестом как-то странно получается. У меня в планах, что бы у игрока была возможность делать несколько таких призраков и выходит, что к каждому будет квест начинаться? Или я не совсем понял. Но скриптики гляну, спасибо за наводку
Dsion, да, верно. Я в описании воспринял "following" как "следование", а там имеется ввиду "следующее", лол. А с алиасами и квестами вообще дел не имел. Можете вкратце написать как это реализуется?
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №17
| Тема: Вопросы по скриптам Papyrus
написано: 4 февраля 2017, 01:00
| Отредактировано: PitrPokir - 4 февраля 2017, 01:20
Dsion, скопировал и немного переделал квест на спутников, но я слабовато понимаю что делаю. Квест должен начинаться благодаря строчке с функцией Start в скрипте заклинания, а цель запихнуть в алиас при помощи ForceRefTo? Или хватит чего-то одного? И достаточно ли будет одного алиаса, если потребуется "подчинить" много целей поочередно? Так же есть вкладка Scripts и я не знаю, туда ли кидать скрипт "подчинения" или в сам алиас/-ы. Хотелось бы знать как вообще выглядит это все. Начинается какой-то невидимый квест пока у меня в алиасах будет нпс/существо, а когда алиас/-ы опустеют, то квест завершиться? Прошу прощение за навязчивость и глупые вопросы, но для меня эта тема довольно темна и я смутно понимаю как это работает в рамках квеста, а вопрос как-то решить надо :с
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №18
| Тема: Вопросы по скриптам Papyrus
написано: 5 февраля 2017, 01:54
| Отредактировано: PitrPokir - 5 февраля 2017, 02:05
Dsion, спасибо большое, с этим разобрался. Почти... Вешаю скрипт "подчинения" на алиас, все месседжи кроме первого появляются, т.е. все функции отработали как надо, актер за мной бегает, но как только я нарушаю закон в городе, он сразу становится моим врагом.
Код
Scriptname NecroGhostSlave extends ReferenceAlias
Faction Property Whiterun Auto Faction Property NecroUndead Auto
Event OnEffectStart(Actor Target, Actor Caster) Target.RemoveFromAllFactions() NecroFollowerAlias.ForceRefTo(Target) EndEvent
На алиасе висит пакет следования, абилка на внешность призрака и созданная фракция для нежити. У созданной фракции в союзниках сама фракция и фракция игрока, там тоже от безысходности разрешил любые нарушения закона, но ничего не помогает. Проверял на жителях Вайтрана, стражниках и драуграх в ветреном пике. Что интересно, потенциальные компаньоны и всякие существа остаются на моей стороне, даже во время боя будучи моими врагами можно их "околдовать", а жители и стражники лишь на мгновение прекращают бой, потом снова бить начинают. Можно, конечно, просто забить на них и не иметь с ними дел, но тут могут быть неудобности, ведь в некоторых ситуациях заранее не знаешь кто к какому городу или деревушке относится и быть внезапно атакованным из-за убитой курицы как-то не круто :/ Буду очень признателен, если вы поделитесь какими-то мыслями на этот счет.
Dsion, сработало Но сначала эффект почему-то заключался лишь в том, что они просто не вступали в бой. Потом пришлось сменить ивент, а то OnHit в данном случае не очень подходил, поменял на OnLoad и добавил в заклинание помещения цели в алиас 2 строчки с функциями Disable и Enable. И актеры вдруг начали мне еще и помогать в бою, удивительно. Наконец-то! Вот только стражники, видимо, не люди. На них не действует Disable, как это вообще?
P.S. а какой вообще ивент лучше использовать? OnLoad срабатывает не сразу, надо как-то заставлять объект загружаться.
Изменение репутации для пользователя PitrPokir
PitrPokirOffline
Сообщение №20
| Тема: Вопросы по скриптам Papyrus
написано: 6 февраля 2017, 18:24
| Отредактировано: PitrPokir - 6 февраля 2017, 18:30
Dsion, ну, задумка не совсем такая, это я пока тестирую. Так-то много еще чего надо сделать.
просто вызываешь эту функцию на своем квесте одним из двух способов на выбор:
Функцию вызвать не получилось, ошибки. В первом варианте пишет, что квест нельзя скастовать или что-то в этом роде. Во-втором сразу 3 и я их почти не запомнил. Не хотелось вас мучить дополнительными вопросами. Просто поместил этот код сразу в заклинание, пока все работает как надо. Мне, в принципе, пока такой вариант подходит. Большое спасибо за помощь, не знаю даже сколько бы я еще потратил времени, что бы дойти до работоспособного варианта.
Единственное, что я до сих пор не могу понять, так это ошибку в таком банальном кусочке кода:
Dsion, ну, с использованием таких функций позже разберусь, если потребуется. Пока работает и ладно, буду двигаться дальше. А за ссылку спасибо Про Dispel не совсем понял. Мой скрипт же наследует ActiveMagicEffect, про который вы написали, Dispel так же применялся непосредственно и на магический эффект, не только на заклинание, указанное в предоставленном коде. Что ему еще надо?
Dsion, какое узкое применение у этого диспела, однако. Я уж обрадовался сколько пользы от него будет, а оно вот как... Как же тогда убрать один эффект, по завершении другого, если время заранее неизвестно? DispelSpell же сразу все эффекты рубит
Dsion, речь все о тех же призраках. При подчинении призрака игроку добавляется пустой эффект, который висит в активных эффектах и позволяет понять, что призрак еще на его стороне и сколько их вообще. И естественно, эффект должен спадать вместе с эффектом подчинения, а поскольку он длится 999 дней, то ориентироваться надо по смерти призрака. А когда это будет - неизвестно)
Multigone, вот это танцы с бубнами Я даже не до конца понимаю что к чему. Но за код спасибо, попробую
Dsion, да нет, все так, как я сказал. Просто попытка сделать заклинание внешне похожим на дефолтные призыв и оживление. Что бы если у меня были оживленные трупы, то призраки были с ними наравне в списке эффектов и я мог сразу определить их наличие и количество. В общем косметический эффект, так сказать. Может в дальнейшем захочется как-то улучшить эффект, что бы он более ощутимую пользу или вред заклинателю приносил, но пока что так. Но меня больше удивило то, что диспел не работал, ведь были на него планы. Т.е. он работает, но в описании как-то коряво объяснили его принцип
Dsion, а если вешать скрипт на алиас с ивентом OnDeath, то как сделать, что бы конкретно данный алиас очищал себя? "SELF.GetReference().Clear()"? Прост у меня не менее 20ти алиасов, для каждого делать индивидуальный скрипт как-то жирно получается. И не будет ли OnUpdate оказывать сильное влияние на производительность? Ну относительно сильное. Допустим, если засунуть в ивент цикл на проверку смерти и очищать. Хотя первый вариант получше, если его можно реализовать.
P.S. а почему важно отключать и удалять трупы? В игре же по дефолту они остаются после битв и прочего. Если речь о том, что бы именно призрак исчезал, то я добавил дефолтный скрипт по превращению в "остатки призрака", а если применять отключение и удаление, то остатки тоже исчезают.
Добавлено (13 Февраля 2017, 00:09) --------------------------------------------- Проверил вариант с OnDeath, вроде исправно работает при помощи "SELF.Clear()".
Добавлено (13 Февраля 2017, 02:46) --------------------------------------------- Что-то я немного застрял с заполнением алиаса. В чем может быть ошибка? (Оставил строчки имеющие отношение к циклу)
Alias[] Property AliasArray Auto ReferenceAlias Property NecroFollowerAlias Auto
Bool Slave = false Int Num Alias aElement
Event OnEffectStart(Actor Target, Actor Caster)
Num = AliasArray.Length While Num > 0 Num -= 1 aElement = AliasArray [Num]if (aElement.ForceRefIfEmpty(Ghost) == true) Slave = true Num = 0 endif EndWhile
(25,15): ForceRefIfEmpty is not a function or does not exist (25,38): cannot compare a none to a bool (cast missing or types unrelated)
P.S. Если переменную aElement объявить как ReferenceAlias или прописать её в свойствах, то ошибка:"type mismatch while assigning to a referencealias (cast missing or types unrelated)"
P.P.S. что странно, вне цикла на конкретном алиасе NecroFollowerAlias условие if работает как надо. Я так понял, дело в переменной aElement, но что именно с ней не так?