allgamer955 Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 Вот что получилось со скриптом заклинания телепортации. Scriptname aDoTeleportScript extends activemagiceffect GlobalVariable Property gpHouse Auto ObjectReference Property PalaseDova Auto ObjectReference Property WorldDova Auto Event OnEffectStart(Actor akTarget, Actor akCaster) If gpHouse.GetValue() == 0 ; True ; Debug.MessageBox(gpHouse.GetValue()) ; Телепортация в дом. gpHouse.SetValue(1) WorldDova.MoveTo(Game.GetPlayer()) Game.GetPlayer().MoveTo( PalaseDova) Else ; False ; Debug.MessageBox(gpHouse.GetValue()) ; Телепортация из дома. gpHouse.SetValue(0) Game.GetPlayer().MoveTo( WorldDova) Endif EndEvent Скрипт прекрасно работает. Ещё бы заставить напарника телепортировался. Как это можно сделать? Кто знает подскажите пожалуйста
Azazellz Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 Напарник, по идее, сам переместиться должен - если в доме навмеши проложены, и если у него АИ-пакет на следование за игроком прописан.
allgamer955 Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 Навмеши есть. Фендел Не хочет телепортироваться. В двери идет, телепортироваться не хочет.
Azazellz Опубликовано 6 июля, 2018 Опубликовано 6 июля, 2018 (изменено) Ну тут уж хз. Когда я телепорты из Mark and Recall юзал - фолловеры за мной бегали. Может, не сразу, с небольшими задержками, но бегали. Главная трудность, имхо - определить, кто там сейчас в КуррентФолловерах находится. Можешь попробовать разобрать спелл "Лидерская Телепортация" из EFF. При использовании этот спелл перемещает к игроку всех активных фолловеров. Только вот в EFF своя система спутников, и я хз, как она устроена - ни разу в нее не лазил. Да и в ванильную тоже довольно поверхностно - если сможешь найти, куда там текущий спутник записывается (в аллиас квестовый какой-нибудь, например) то можно будет его оттуда и брать, а потом уже moveto на него использовать. Изменено 6 июля, 2018 пользователем Azazellz
mr Jyggalag Опубликовано 8 июля, 2018 Опубликовано 8 июля, 2018 Можно попробовать использовать в скрипте Game.FastTravel(HomeMarker) где HomeMarker это маркер, к которому будет телепортироваться игрокЭто принудительный фасттревел, так что, по идее, компаньоны и КО (призванные существа там всякие, компаньоны-животные, etc) должны повести себя стандартно, т.е телепортироваться вместе с игроком. Единственное "но" - я не помню, получится ли так телепортировать игрока в локацию, в настройках которой запрещена возможность фасттревела.
allgamer955 Опубликовано 9 июля, 2018 Опубликовано 9 июля, 2018 08.07.2018 09:11:16, mr Jyggalag сказал(-а):Это принудительный фасттревел, так что, по идее, компаньоны и КО (призванные существа там всякие, компаньоны-животные, etc) должны повести себя стандартно, т.е телепортироваться вместе с игроком. Единственное "но" - я не помню, получится ли так телепортировать игрока в локацию, в настройках которой запрещена возможность фасттревела. Фендел телепортируется и с улицы и из дома. Из пещеры пока не пробовал. Единственное, что не получилось, это чтобы спутник телепортировался на свой маркер. Не получается установить маркер возврата на место компаньона. Не принципиально. Спасибо.
Sharpcliff Опубликовано 16 августа, 2018 Опубликовано 16 августа, 2018 (изменено) Здравствуйте. Прошерстил топик с готовыми скриптами и не нашел тот, что мне нужен. Есть ли скрипт на "снятие зачарования" при использовании предмета, к примеру прочтения книги? Хочу сделать мод, в котором можно выучить зачарование, прочитав книгу, по аналогу с томами заклинаний. Насколько это осуществимо? Изменено 16 августа, 2018 пользователем Sharpcliff
Azazellz Опубликовано 16 августа, 2018 Опубликовано 16 августа, 2018 16.08.2018 14:19:43, Sharpcliff сказал(-а):Насколько это осуществимо? Осуществимо. Функция SetPlayerKnows из SKSE может такое делать.
rkirgizov Опубликовано 18 августа, 2018 Опубликовано 18 августа, 2018 Какой функцией можно применить эффекты яда на игрока? Вроде всё перекопал, должно ж просто быть а не соображу. Помогите, плз.
Azazellz Опубликовано 19 августа, 2018 Опубликовано 19 августа, 2018 18.08.2018 21:59:46, rkirgizov сказал(-а): Какой функцией можно применить эффекты яда на игрока? Вроде всё перекопал, должно ж просто быть а не соображу. Помогите, плз. Так как любой яд - это заклинание, то через Cast Spell
rkirgizov Опубликовано 20 августа, 2018 Опубликовано 20 августа, 2018 (изменено) Так пробовал, когда вызывапишет что "cast is not a function or does not exist". Уточнюсь, вызвать функцию надо из события OnItemRemoved скрипта "extends ReferenceAlias". Может в этом загвоздка? По идее эту функцию надо вызывать из заклинания, но как это заклинание вытащить из объекта akItemReference? mySpell.cast(myActivator, playerRef) ; myActivator has cast mySpell on the player! Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) akItemReference.cast (playerRef, playerRef) EndEvent Изменено 20 августа, 2018 пользователем rkirgizov
Azazellz Опубликовано 20 августа, 2018 Опубликовано 20 августа, 2018 (изменено) 20.08.2018 10:49:56, rkirgizov сказал(-а):По идее эту функцию надо вызывать из заклинания, но как это заклинание вытащить из объекта akItemReference? Эту функцию можно вызывать откуда угодно и как угодно. Конкретно у тебя надо сначала определить, какой итем и откуда ты собираешь удалять. Т.е. должны быть условия if, в которых будет это все прописано. Ну а дальше уже может быть что-то типа PoisonSpell.cast(PlayerRef, PlayerRef) Естественно, не забудь в проперти или как-то еще задать, какое именно заклинание ты собираешься кастить, и что такое PlayerRef (то бишь в скрипте нужно указать, что это игрок). А то в твоем варианте у тебя не заклинание кастуется, а референс предмета. Изменено 20 августа, 2018 пользователем Azazellz
rkirgizov Опубликовано 20 августа, 2018 Опубликовано 20 августа, 2018 20.08.2018 14:18:17, Azazellz сказал(-а): Эту функцию можно вызывать откуда угодно и как угодно. Конкретно у тебя надо сначала определить, какой итем и откуда ты собираешь удалять. Т.е. должны быть условия if, в которых будет это все прописано. Ну а дальше уже может быть что-то типа PoisonSpell.cast(PlayerRef, PlayerRef) Естественно, не забудь в проперти или как-то еще задать, какое именно заклинание ты собираешься кастить, и что такое PlayerRef (то бишь в скрипте нужно указать, что это игрок). А то в твоем варианте у тебя не заклинание кастуется, а референс предмета. На событии OnItemRemoved проверяю, что это именно применение яда на оружие, дальше убираю, если есть, текущий яд и ставлю его же, но со своим количеством зарядов.. При применении яда на оружие мне необходимо, чтобы случайным образом изредка яд применялся на самого игрока. Референс применяемого яда есть, akItemReference. Сам кусок скрипта - ниже. Вот как из этого применить Spell применяемого яда на игрока? Scriptname KelaPoisonProjectMain extends ReferenceAlias Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) If IsReallyApplyPoisonToWeapon(akBaseItem, akItemReference, akDestContainer) WornRemovePoison(kPlayer, 1) kPlayer.RemoveItem(akBaseItem as Potion, 1, True) WornSetPoison(kPlayer, 1, akBaseItem as Potion, GetMaxCharges()) kppPoisonUse.Play(kPlayer) elseIf !IsWeaponPoisoned(1) ; kPlayer.RemoveItem(akBaseItem as Potion, 1, True) WornSetPoison(kPlayer, 1, akBaseItem as Potion, GetMaxCharges()) kppPoisonUse.Play(kPlayer) endIf endIf ---- Вот здесь мне надо случайным образом применить яд на игрока endIf EndEvent
Azazellz Опубликовано 21 августа, 2018 Опубликовано 21 августа, 2018 (изменено) А, вот ты о чем. Я то думал, что тебе какой-то конкретный яд нужно на игрока применить. Тогда это надо каким-то образом получить тот тип яда, который игрок применяет на оружие (магический эффект или спелл), и уже его кастовать. Что-то похожее было в СКСЕ кажется, но сам я такое не применял никогда. Может кто из более опытных скриптеров подскажет. Для "рандомности" можно использовать https://www.creationkit.com/index.php?title=RandomInt_-_Utility int random = Utility.RandomInt(0, 10) if random <= 5 ;do stuff else ;do nothing endif Как-то так. Изменено 21 августа, 2018 пользователем Azazellz
Azazellz Опубликовано 22 августа, 2018 Опубликовано 22 августа, 2018 (изменено) Если еще актуально, то, собственно, вот. Правильно я помнил, что в СКСЕ есть такая штука, которая позволяет "снять" эффекты с зелий (а заодно и с зачарований, и прочих штук). Только надо придумать, как на игрока эти эффекты сбросить - ибо Cast работает только со спеллами, а не с эффектами. Изменено 22 августа, 2018 пользователем Azazellz
rkirgizov Опубликовано 22 августа, 2018 Опубликовано 22 августа, 2018 22.08.2018 13:10:47, Azazellz сказал(-а): Если еще актуально, то, собственно, вот. Правильно я помнил, что в СКСЕ есть такая штука, которая позволяет "снять" эффекты с зелий (а заодно и с зачарований, и прочих штук). Только надо придумать, как на игрока эти эффекты сбросить - ибо Cast работает только со спеллами, а не с эффектами. Актуально, вроде доделываю, остался как раз этот момент нереализованным из задуманного. Спасибо за ссылку, покопаюсь.
Vita2016 Опубликовано 28 августа, 2018 Опубликовано 28 августа, 2018 (изменено) Подскажите пожалуйста, как написать скрипт, который заставил бы снять с персонажа игрока броню и передать ее в инвентарь npc (как фрагмент скрипта, прикрепленный к диалогу)? Верcия оригинал (не SKSE) Изменено 28 августа, 2018 пользователем Vita2016
mr Jyggalag Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 28.08.2018 22:38:11, Vita2016 сказал(-а): Подскажите пожалуйста, как написать скрипт, который заставил бы снять с персонажа игрока броню и передать ее в инвентарь npc (как фрагмент скрипта, прикрепленный к диалогу)? Верcия оригинал (не SKSE) В SSE есть возможность определить какой предмет "надет" в определённом слоту у персонажа: GetEquippedArmorInSlot() - в SLE такого нет. Есть функция UnequipItemSlot(), благодаря которой можно просто снять вещь из занимаемого ей слота. Есть функция UnequipItem(), но для неё нужно знать, какой предмет снимать. С помощью IsEquipped() можно узнать, какой конкретный предмет экипирован. Иначе говоря, либо нужно SSE, либо придётся корячиться на SLE. Если на SLE надо снимать определённую броню (скажем, уникальную) то это довольно просто. В противном случае можно легко её снять, но вот только с помощью костылей удастся передать её NPC. Можно проверить один раз инвентарь игрока на наличие предметов с кейвордом "Броня" (условный кейворд), затем добавить полученные результаты в массив, элементы которого ты далее проверишь на "экипирование" игроком. Эти "проверенные" элементы ты потом снимаешь и отдаёшь NPC.
Azazellz Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 (изменено) Вообще, есть ивент OnObjectUnequipped - Actor Вызывается каждый раз, как с игрока (или другого актера, на котором нужный скрипт висит) де-экипируется что-нибудь. С его помощью можно это "что-нибудь" передавать в соответствующий контейнер - сундук или инвентарь спутника, даже не зная, чем конкретно это "что-нибудь" было. Изменено 29 августа, 2018 пользователем Azazellz
Vita2016 Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 29.08.2018 15:12:45, Azazellz сказал(-а): Вообще, есть ивент OnObjectUnequipped - Actor Вызывается каждый раз, как с игрока (или другого актера, на котором нужный скрипт висит) де-экипируется что-нибудь. С его помощью можно это "что-нибудь" передавать в соответствующий контейнер - сундук или инвентарь спутника, даже не зная, чем конкретно это "что-нибудь" было. Спасибо, вот я попытался вставить такой скрипт: Game.GetPlayer().UnequipItemSlot(30) Event OnObjectUnequipped(Form akBaseObject, ObjectReference akReference) MyNPC.GetReference().AddItem(akBaseObject.GetReference()) EndEvent Компилятор выдал ошибку: mismatched input 'Event' expecting ENDFUNCTION missing EOF at 'EndFunction'
Azazellz Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 Вот тут уж хз. С фрагментами я совсем мало работал, как у них там синтаксис устроен - не в курсе. Могу предложить сделать "служебный" квест или магический эффект, со скриптов которого вся эта передача вещей и будет работать. Фрагмент в этом случае будет "пусковым механизмом" - будет запускать квест или кастовать магический эффект.
Vita2016 Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 29.08.2018 21:04:22, Azazellz сказал(-а): Вот тут уж хз. С фрагментами я совсем мало работал, как у них там синтаксис устроен - не в курсе. Могу предложить сделать "служебный" квест или магический эффект, со скриптов которого вся эта передача вещей и будет работать. Фрагмент в этом случае будет "пусковым механизмом" - будет запускать квест или кастовать магический эффект. Я вообще нуб, может глупый вопрос, а как запускать событие не через фрагмент? Ну вот у меня есть квест, там диалог, я просто тупо вставляю в окне диалога где begin и end эти фрагменты и что-то происходит. А как это делать не через фрагменты?
Azazellz Опубликовано 29 августа, 2018 Опубликовано 29 августа, 2018 29.08.2018 21:31:44, Vita2016 сказал(-а):Я вообще нуб, может глупый вопрос, а как запускать событие не через фрагмент? Ну вот у меня есть квест, там диалог, я просто тупо вставляю в окне диалога где begin и end эти фрагменты и что-то происходит. А как это делать не через фрагменты? Если я правильно понимаю систему этих фрагментов, весь код в них стартует либо на запуске диалога, либо на завершении. Т.е. имеет встроенные Event'ы, и других в себе не поддерживает (хз, так ли это на самом деле, но звучит вроде логично). И чтоб запускать другие евенты - надо писать полноценные скрипты. Рекомендую начать отсюда (список всего, что есть по скриптингу на СК вики). Но если ты уже скрипты пишешь - то часть их этого тебе должна быть знакома. А вот серия более "практических" туториалов. Там подробно описано, что это за ивенты такие, и как скрипты к объектам прикреплять.
Vita2016 Опубликовано 30 августа, 2018 Опубликовано 30 августа, 2018 29.08.2018 22:15:23, Azazellz сказал(-а): Если я правильно понимаю систему этих фрагментов, весь код в них стартует либо на запуске диалога, либо на завершении. Т.е. имеет встроенные Event'ы, и других в себе не поддерживает (хз, так ли это на самом деле, но звучит вроде логично). И чтоб запускать другие евенты - надо писать полноценные скрипты. Рекомендую начать отсюда (список всего, что есть по скриптингу на СК вики). Но если ты уже скрипты пишешь - то часть их этого тебе должна быть знакома. А вот серия более "практических" туториалов. Там подробно описано, что это за ивенты такие, и как скрипты к объектам прикреплять. Я создал скрипт на вкладке Gameplay. Скомпилировал. Но не понял, как его запустить из квеста... Например, есть стадия квеста 10. Как из нее вызвать этот скрипт?
mr Jyggalag Опубликовано 30 августа, 2018 Опубликовано 30 августа, 2018 30.08.2018 00:05:22, Vita2016 сказал(-а): Я создал скрипт на вкладке Gameplay. Скомпилировал. Но не понял, как его запустить из квеста... Например, есть стадия квеста 10. Как из нее вызвать этот скрипт? Скрипт прикрепляешь к квесту, скрипт должен быть типа Conditional. Далее, внутри скрипта создаёшь функцию (к примеру - UnequipArmor(); как создавать свои функции написано здесь), которую будешь вызывать на определённой стадии квеста. Всё сделано? Идём далее - в Quest Stges, в своём квесте, ты создаёшь нужный этап квеста (10), а далее в таблице с надписью в верхней части "Log Entry" и выбираешь пункт "New" Закрываешь квест через кнопку "Ок", сохраняешь плагин. ДАлее заново открываешь квест, заходишь в этапы квеста, открываешь нужный этап и в поле Papyrus Fragment в "kmyQuest" выбираешь твой скрипт. Далее, в этом же окошке прописываешь код, а нужную функцию вызываешь через "kmyQuest.UnequipArmor()"
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти