• Прежде, чем задать вопрос, пожалуйста, убедитесь, что такой вопрос не задавался раньше. Старайтесь описать суть вопроса как можно подробней. • Прежде, чем опубликовать ответ на вопрос, пожалуйста, убедитесь, что обладаете необходимыми для этого знаниями. Старайтесь cформулировать суть ответа как можно лаконичней. • При желании ответить в приватном порядке, пожалуйста, воспользуйтесь ЛС. • При желании поблагодарить ответившего, пожалуйста, воспользуйтесь кнопкой "+" полезного сообщения.
Сообщения, не относящиеся к вопросам по скриптам Papyrus, ответам на них или уточнениям, являются оффтопом и могут быть удалены.
Красное солнце Есть вопросы по скриптам Papyrus? Пиши не в ЛС, а в эту тему.
эффект немоты для ГГ, при котором он не сможет пользоваться криками
Это не в раздел скриптов писать надо...
Создаёшь перк, в котором выбираешь Entry Point - Mod Shout OK, выставляешь Set Value = 0.
Создаёшь магический эффект, архитип не важен, поэтому можно скрипт... в разделе Perk To Apply выставляешь созданный выше перк и всё - по-идее должно помочь.
Добавлено (06 Августа 2016, 21:43) --------------------------------------------- Но у меня самого вопрос:
Создаём эффект превращения из одного существа в другое... вот скрипт:
idle property IdleVampireTransformation auto actor property TransformActor auto actor property selfRef auto hidden explosion property FXVampChangeExplosion auto float property DragoLifeTime auto
Event OnEffectStart(actor Target, actor Caster) selfRef = caster
if Target == none return endIf ;actor CombatTarget = Target.GetCombatTarget() Target.placeatme(FXVampChangeExplosion as form, 1, false, false) Target.disable(false) TransformActor.MoveTo(Target as objectreference, 0 as Float, 0 as Float, 10 as Float, true) TransformActor.Enable(false) ;if CombatTarget != none ;TransformActor.StartCombat(CombatTarget) ;endIf
endFunction
Function TransformBack(actor Target)
TransformActor.placeatme(FXVampChangeExplosion as form, 1, false, false) TransformActor.Disable(false) Target.MoveTo(TransformActor as objectreference, 0 as Float, 0 as Float, 10 as Float, true) Target.Enable(false)
EndFunction
Превращение происходит, взрыв наблюдается, спустя определённое время обратное превращение тоже происходит... но есть 2 проблемы: Во-первых, не происходит анимация вампира (которая там написана)... Во-вторых появляющийся чудик начинает сразу сражаться со стражниками... так же он сражался и с модовскими спутниками, но после добавления им фракции Игрока он перестал это делать... но со стражниками проблема остаётся... пробовали поставить это существо просто рядом со стражником - всё спокойно... но как только появляется с помощью скрипта - агрессивный... в чём может быть проблема?.. заранее благодарен...
Я не знаю почему но у меня перестали работать диалоги у персонажа NPC, озвучка не работает, персонаж молчит, не говорит, хотя всё подключено.
Внимание уважаемые! все те кто задаёт себе вопросы оставленные мной в качестве примера выше, я знаю в чём может заключаться ваша проблема! я уже не раз сталкивался с подобным сам, и вчера наконец всё таки нашел причину этого бага, возможно я кому то помогу с этим и у вас тоже заработают диалоги снова, в общем не спешите возвращаться к старой esp с работающей версией вашего мода итак вот решение:
Я не знаю по каким причинам это происходит но при условии правильно подключенных esp и с прописанным скриптом:
Quest Property TFQuest Auto Event OnInit() TFQuest.Start() EndEvent
По каким то причинам прописанные условия появления диалогов у NPC перестают работать, и ошибок больше не в чём нет! алиасы есть всё есть, но если у вас по прежнему не работают диалоги просто зайдите в ветку с ключевым топиком вашего квеста, и снова измените условия появления диалога удивительно но именно эта мелочь и поможет вам, мне помогла и у меня вновь всё заработало.
Я несколько десятков раз проверял эту причину, и анализировал данные, и мне получилось выяснить что при сохранении esp условия появления диалогов во вкладке Conditions из за чего то бьются, но вы возможно как и я не знаете этого ( редактор ведь об этом нам не сообщит ) и вы берете и копируете битое условие и вставляете в другой топик для экономии времени - но таким образом вы и распространяете невидимый баг в своём квесте, так что имейте это теперь ввиду, лучше всего не копировать значения Conditions а создавать их с нуля через функцию new - но даже в этом случае, помните что функции созданные таким образом тоже могут разрушиться при сохранении esp, я не знаю почему такое происходит но это именно так будьте уверены.
Поэтому в этом трудно поверить но лично у меня весь баг с квестами заключался вот именно в нескольких первых значениях условий главного топика квеста, я удалил их, просто удалил, создал новые, прописал те же самые значения, сохранил мод и мой персонаж заговорил! наконец то, а я долгие дни перепроверял всякие там алиасы и косился на свои игровые сохранения, но баг заключался вовсе не в них, вот так то коллеги модмейкеры.
PS. друзья, возможно вы тоже самостоятельно нашли ответ на свой вопрос сами, пожалуйста не ленитесь и пишите как вы это сделали на нашем форуме, не думайте что ваш вопрос никому не интересен, я уверен что с вашим возникшим багом встретятся многие модмекеры и вы очень поможете написал сюда как вы справились со своей задачей.
Спасибо всем тем кто помогал и мне решить мои задачи в моддинге, давайте продолжать развиваться вместе помогая друг другу, всего доброго :)Модераторам - этот пост можно прикрепить думаю в FAQ CREATION KIT - он будет очень полезен так как подобные ошибки в квестах встречаются достаточно часто.
Изменение репутации для пользователя MaxwellDemon
MaxwellDemonOffline
Сообщение №2194
написано: 22 августа 2016, 17:28
| Отредактировано: MaxwellDemon - 22 августа 2016, 04:27
Привет "скайримщикам"! Тут такое дело ... после скриптов Fallout 3 / Fallout NV - дай, думаю, поковыряюсь в Skyrim. Я думал, что разницы нет, а оказывается - тут всё не совсем так ... или даже совсем не так.
Люди, помогите вникнуть, на простом и конкретном примере:
Нужен скрипт "спамер" - что бы повторялся, ну скажем, каждую секунду. Если в игре нет призванного игроком, ну например, огненного атронаха - вызвать его.
Может кто нибудь написать этот скрипт и чуть-чуть разжевать как его создать?
Добавлено (22 Августа 2016, 17:51) --------------------------------------------- Один "пустой" квест, один скрипт, три переменных.
Код
Scriptname ModPetSCRIPT extends Quest
MagicEffect Property ModPetEFFECT Auto
SPELL Property ModPetSPELL Auto
Actor Property ModPetPLAYER Auto
Event OnInit()
RegisterForSingleUpdate(1.0)
EndEvent
Event OnUpdate()
If ModPetPLAYER.HasMagicEffect(ModPetEFFECT) == false ModPetSPELL.Cast(ModPetPLAYER, ModPetPLAYER) EndIf
RegisterForSingleUpdate(1.0)
EndEvent
Добавлено (22 Августа 2016, 20:28) --------------------------------------------- Такой вот вопросик - как получить переменную из "горячих" клавиш? Не могу найти команду, нужно что то вроде команды из Fallout GetHotkeyItem.
FormList Property DisenchantList Auto ObjectReference item
Event OnActivate(ObjectReference akActivator) Form akBaseItem= item.GetBaseObject() If akActivator == Game.GetPlayer() if (akBaseItem as Armor) || (akBaseItem as Weapon) if !(akBaseItem as Armor).GetEnchantment() && !(akBaseItem as Weapon).GetEnchantment() DisenchantList.AddForm(akBaseItem) endif endIf Game.GetPlayer().ShowGiftMenu(True, DisenchantList) EndIf EndEvent
Изменение репутации для пользователя Multigone
MultigoneOffline
Сообщение №2198
написано: 22 сентября 2016, 13:04
| Отредактировано: Multigone - 22 сентября 2016, 13:04
при активации открывалась GiftMenu только зачарованными вещами
Добавлено (22 Сентября 2016, 16:39) --------------------------------------------- Multigone, при активации открывалась GiftMenu только зачарованными вещами из инвентаря ГГ
AlexeyVN, я правильно понимаю, что при активации алтаря должно появляться меню, где игрок может подарить зачарованный предмет? Вот только кому, самому себе, что ли? Непонятно. Я же просил описать подробности.
Ладно, предположим, нам нужно, чтобы игрок мог перемещать только зачарованный(-ые) предмет(-ы) из своего инвентаря в некий контейнер при активации алтаря через GiftMenu. Нам понадобится: любой актер как посредник (кому будем отдавать предметы через меню, спрятан в любом месте), скрипт на алтаре. При активации алтаря перебираем все до единого предмета в инвентаре игрока и формируем лист из подходящих предметов, открываем меню подарков с НПС. После закрытия меню отправляем все предметы из инвентаря НПС в конечный контейнер.
Если я угадал, могу написать.
Изменение репутации для пользователя AlexeyVN
AlexeyVNOffline
Сообщение №2201
написано: 22 сентября 2016, 15:04
| Отредактировано: Multigone - 23 апреля 2020, 14:47
AlexeyVN, не совсем понял, что происходит с предметом после того, как будет помещен в меню подарков. Меню закрывается, он возвращается (?) игроку, и...?
Вот примерные версии (названия другие, т.к. тестировал на компиляцию). См. комменты:
_TESTTEST16 Property L Auto ; Важно! Вместо _TESTTEST16 указать реальное название скрипта, который прикреплен к алиасу игрока, иначе не будет компилировать. ;В СК заполнить эту переменную прикрепленным скриптом из алиаса! FormList Property DisenchantList Auto
Event OnActivate(ObjectReference akActivator) GoToState("S") ; Пока не будет обработан текущая активация, все следующие пропускаются. If akActivator == Game.GetPlayer() DisenchantList.Revert() Int iC = akActivator.GetNumItems() - 1 WHILE iC >= 0 Form xF = akActivator.GetNthForm(iC) if (xF as Weapon && (xF as Weapon).GetEnchantment()) || (xF as Armor && (xF as Armor).GetEnchantment()) DisenchantList.AddForm(xF) endIf iC -= 1 ENDWHILE IF DisenchantList.GetAt(0) L.bL = true (akActivator AS Actor).ShowGiftMenu(True, DisenchantList) ELSE Debug.Notification("Игрок не имеет зачарованных предметов!") ENDIF EndIf GoToState("") EndEvent
STATE S Event OnActivate(ObjectReference akActivator) EndEvent ENDSTATE
ObjectReference Property DisenchantAltar Auto Message Property AlexDisenchantMessage Auto Bool Property bL Auto Hidden ; Упрощает проверку и предупреждает срабатывание скрипта при любом открытом меню подарков.
Event OnItemRemoved(Form akBaseItem, Int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) if bL ; Определяем, был ли активирован алтарь, ибо меню подарков может быть открыто во многих случаях. akItemReference = akDestContainer.DropObject(akBaseItem, 1) ; Используем имеющуюся переменную вместо создания новой. if !AlexDisenchantMessage.Show(1, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) input.TapKey(1) akItemReference.SetMotionType(akItemReference.Motion_Keyframed) akItemReference.SetAngle(DisenchantAltar.GetAngleX() + 80.0, DisenchantAltar.GetAngleY(), DisenchantAltar.GetAngleZ()) Else Game.GetPlayer().AddItem(akBaseItem, 1, true) ; ? endIf endIf endEvent
Здравствуйте фишка такая: есть мод kadji.bsa и kadji.esp открываем esp в редакторе и при любом изменении скриптов в моде персонажи отказываются говорить, с чем это может быть связано? нужно ли распаковывать архив bsa что бы вносить изменения в мод? раньше не запаковывал поэтому работал я с открытыми папками и файлами meshes и так далее, но что происходит с квестом и диалогами когда я изменяю скрипт распакованный из bsa, вот вношу изменения, по логике скрипт должен подгружаться не из bsa а из директории data по такому же пути что и был в архиве bsa, но всё перестаёт работать.. не могу проследить логику, скрипт отношения к диалогам не имеет..помогите пожалуйста понять почему это происходит.
> Хм оказалось скрытия npc влияет на цикл квеста и он не начинается судя по всему, кстати а можно ли скриптом включить для персонажа (не главного героя) что бы его убить нельзя было а потом отключить?
По квесту просто в стадии если до нужной стадии убиваешь персонажа, то порядок стадий сбивается и баги | начинаются... нажо бы как нибудь сделтать неубиваемым персонажа в определенной стадии квеста, что кто предложит? какие есть варианты?
Aksyonov, у персонажей есть несколько флагов, один из них отвечает за неубиваемость. Он стоит у всех важных квестовых персонажей, например, у ярлов. Вот этот атрибут и надо ставить и убирать.
Aksyonov, у персонажей есть несколько флагов, один из них отвечает за неубиваемость. Он стоит у всех важных квестовых персонажей, например, у ярлов. Вот этот атрибут и надо ставить и убирать.
Да я в курсе этого, но этот флаг мне нужно убрать в определенной стадии квеста можно ли сделать это при помощи скрипта назначить неузнаваемость? сейчас персонажа убивают до нужной стадии и квест не продолжается так как в условие сказано - что для продолжения нужна стадия когда убиваешь персонажа + стадия действующая, то есть нужно убит npc строго в определенную стадию после покупки вещей, я если сделать флаг активных его нельзя убить, а мне необходимо что бы он реально погиб, а не ползал на коленях.
Lexo, проблема в том, что 1) в инвентаре предметы не имеют референсов, 2)сворованные и "чистые" предметы складываются как попало в один стек, 3) никак нельзя определить, что предмет, уже находящийся в инвентаре, сворован.
Есть вариант с побочными эффектами. Основывается на следующем: исследуются условия, при которых в инвентарь игрока попадают предметы. Когда обстановка потенциально соответствует краже (т.е. игрок непосредственно перед этим смотрел на чей-то предмет или контейнер, или открыто контейнер-меню с живым персонажем), все предметы такой же базовой формы, что и добавленный, удаляются из инвентаря игрока и ему возвращаются новые в таком же количестве. Недостаток же, что могут удалиться: заточенные предметы, заполненные камни душ, предметы, зачарованные игроком.
Вот примерная версия (на алиас игрока, не проверял, нужен СКСЕ):
Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) IF akSourceContainer AS Actor IF (akSourceContainer AS Actor).IsDead() || !ui.IsMenuOpen("ContainerMenu") RETURN ENDIF ELSEIF !bD RETURN endIf Actor xA = GetActorRef() Int iC = xA.GetItemCount(akBaseItem) xA.RemoveItem(akBaseItem, iC, true) xA.AddItem(akBaseItem, iC, true) endEvent
Есть вариант с OnStoryAddToPlayer, который позволяет более точно установить, каким образом предмет попал в инвентарь игрока, но там все печально.
Если тупо почитерить, то можно добавить себе золота побольше, а потом продать предмет скупщику краденого и купить обратно - это снимает статус украденности. Ну или выбросить на землю и убрать владельца через консоль.
А если для дела, то можно еще несколько вариантов рассмотреть, в зависимости от задачи... Через перк, например. Создаем перк, в нем две Entry Point для перехвата активации предметов и NPC. Первая будет активации предметов, которые можно взять, - нужно навешать соответствующих условий. И скрипт такого типа:
Multigone, но ведь консоль это делает! Когда-то давно облюбовал один мод на манекены. Там из меню управления можно менять расу манекена. Автор обещал сделать и смену пола. Уж много лет прошло, а он обещание так и не выполнил. Решил я сам туда залезть, и вот такой облом.
Здравствуйте, уважаемые, мне нужна ваша помощь, я тут задумал заклинание сделать, но мне нужен скрипт, что бы при использовании заклинания у игрока оставалось по 1% жизней и маны. Возможно ли это сделать, и если возможно, то как? К слову, в скриптах я полный ноль...
Dsion, там перед тем, как дать подарок, создается лист из зачарованных вещей, находящихся в инвентаре игрока. Проблема в том, что при переборе вещей те из них, что зачарованы самостоятельно, не могут определиться как имеющие чары через GetEnchantment().