Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Вот что получилось со скриптом заклинания телепортации.

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

Скрипт прекрасно работает.

Ещё бы заставить напарника телепортировался. Как это можно сделать?

Кто знает подскажите пожалуйста

  • Ответов 840
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано

Напарник, по идее, сам переместиться должен - если в доме навмеши проложены, и если у него АИ-пакет на следование за игроком прописан.

Опубликовано (изменено)

Ну тут уж хз. Когда я телепорты из Mark and Recall юзал - фолловеры за мной бегали. Может, не сразу, с небольшими задержками, но бегали.

 

Главная трудность, имхо - определить, кто там сейчас в КуррентФолловерах находится.

Можешь попробовать разобрать спелл "Лидерская Телепортация" из EFF. При использовании этот спелл перемещает к игроку всех активных фолловеров. Только вот в EFF своя система спутников, и я хз, как она устроена - ни разу в нее не лазил. Да и в ванильную тоже довольно поверхностно - если сможешь найти, куда там текущий спутник записывается (в аллиас квестовый какой-нибудь, например) то можно будет его оттуда и брать, а потом уже moveto на него использовать.

Изменено пользователем Azazellz
Опубликовано
Можно попробовать использовать в скрипте
Game.FastTravel(HomeMarker)

где HomeMarker это маркер, к которому будет телепортироваться игрок
Это принудительный фасттревел, так что, по идее, компаньоны и КО (призванные существа там всякие, компаньоны-животные, etc) должны повести себя стандартно, т.е телепортироваться вместе с игроком.
Единственное "но" - я не помню, получится ли так телепортировать игрока в локацию, в настройках которой запрещена возможность фасттревела.
Опубликовано
08.07.2018 09:11:16, mr Jyggalag сказал(-а):
Это принудительный фасттревел, так что, по идее, компаньоны и КО (призванные существа там всякие, компаньоны-животные, etc) должны повести себя стандартно, т.е телепортироваться вместе с игроком.
Единственное "но" - я не помню, получится ли так телепортировать игрока в локацию, в настройках которой запрещена возможность фасттревела.

 

 

Фендел телепортируется и с улицы и из дома. Из пещеры пока не пробовал.

Единственное, что не получилось, это чтобы спутник телепортировался на свой маркер.

Не получается установить маркер возврата на место компаньона. Не принципиально.

 

Спасибо.

  • 1 месяц спустя...
Опубликовано (изменено)

Здравствуйте. Прошерстил топик с готовыми скриптами и не нашел тот, что мне нужен. Есть ли скрипт на "снятие зачарования" при использовании предмета, к примеру прочтения книги? Хочу сделать мод, в котором можно выучить зачарование, прочитав книгу, по аналогу с томами заклинаний. Насколько это осуществимо?

Изменено пользователем Sharpcliff
Опубликовано

Какой функцией можно применить эффекты яда на игрока?

 

Вроде всё перекопал, должно ж просто быть а не соображу.

Помогите, плз.

Опубликовано
18.08.2018 21:59:46, rkirgizov сказал(-а):

Какой функцией можно применить эффекты яда на игрока?

 

Вроде всё перекопал, должно ж просто быть а не соображу.

Помогите, плз.

Так как любой яд - это заклинание, то через Cast Spell

Опубликовано (изменено)

Так пробовал, когда вызывапишет что "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

Изменено пользователем rkirgizov
Опубликовано (изменено)
20.08.2018 10:49:56, rkirgizov сказал(-а):
По идее эту функцию надо вызывать из заклинания, но как это заклинание вытащить из объекта akItemReference?

Эту функцию можно вызывать откуда угодно и как угодно.

Конкретно у тебя надо сначала определить, какой итем и откуда ты собираешь удалять.

Т.е. должны быть условия if, в которых будет это все прописано.

Ну а дальше уже может быть что-то типа

PoisonSpell.cast(PlayerRef, PlayerRef)

Естественно, не забудь в проперти или как-то еще задать, какое именно заклинание ты собираешься кастить, и что такое PlayerRef (то бишь в скрипте нужно указать, что это игрок).

 

А то в твоем варианте у тебя не заклинание кастуется, а референс предмета.

Изменено пользователем Azazellz
Опубликовано
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

Опубликовано (изменено)

А, вот ты о чем. Я то думал, что тебе какой-то конкретный яд нужно на игрока применить.

Тогда это надо каким-то образом получить тот тип яда, который игрок применяет на оружие (магический эффект или спелл), и уже его кастовать.

Что-то похожее было в СКСЕ кажется, но сам я такое не применял никогда. Может кто из более опытных скриптеров подскажет.

 

Для "рандомности" можно использовать https://www.creationkit.com/index.php?title=RandomInt_-_Utility

int random = Utility.RandomInt(0, 10)
if random <= 5
	;do stuff
else
	;do nothing
endif

Как-то так.

Изменено пользователем Azazellz
Опубликовано (изменено)

Если еще актуально, то, собственно, вот.

Правильно я помнил, что в СКСЕ есть такая штука, которая позволяет "снять" эффекты с зелий (а заодно и с зачарований, и прочих штук).

Только надо придумать, как на игрока эти эффекты сбросить - ибо Cast работает только со спеллами, а не с эффектами.

Изменено пользователем Azazellz
Опубликовано
22.08.2018 13:10:47, Azazellz сказал(-а):

Если еще актуально, то, собственно, вот.

Правильно я помнил, что в СКСЕ есть такая штука, которая позволяет "снять" эффекты с зелий (а заодно и с зачарований, и прочих штук).

Только надо придумать, как на игрока эти эффекты сбросить - ибо Cast работает только со спеллами, а не с эффектами.

 

Актуально, вроде доделываю, остался как раз этот момент нереализованным из задуманного.

Спасибо за ссылку, покопаюсь.

Опубликовано (изменено)

Подскажите пожалуйста, как написать скрипт, который заставил бы снять с персонажа игрока броню и передать ее в инвентарь npc (как фрагмент скрипта, прикрепленный к диалогу)? Верcия оригинал (не SKSE)

Изменено пользователем Vita2016
Опубликовано
28.08.2018 22:38:11, Vita2016 сказал(-а):

Подскажите пожалуйста, как написать скрипт, который заставил бы снять с персонажа игрока броню и передать ее в инвентарь npc (как фрагмент скрипта, прикрепленный к диалогу)? Верcия оригинал (не SKSE)

В SSE есть возможность определить какой предмет "надет" в определённом слоту у персонажа: GetEquippedArmorInSlot() - в SLE такого нет. Есть функция UnequipItemSlot(), благодаря которой можно просто снять вещь из занимаемого ей слота. Есть функция UnequipItem(), но для неё нужно знать, какой предмет снимать. С помощью IsEquipped() можно узнать, какой конкретный предмет экипирован.

Иначе говоря, либо нужно SSE, либо придётся корячиться на SLE. Если на SLE надо снимать определённую броню (скажем, уникальную) то это довольно просто. В противном случае можно легко её снять, но вот только с помощью костылей удастся передать её NPC.

Можно проверить один раз инвентарь игрока на наличие предметов с кейвордом "Броня" (условный кейворд), затем добавить полученные результаты в массив, элементы которого ты далее проверишь на "экипирование" игроком. Эти "проверенные" элементы ты потом снимаешь и отдаёшь NPC.

Опубликовано (изменено)

Вообще, есть ивент OnObjectUnequipped - Actor

Вызывается каждый раз, как с игрока (или другого актера, на котором нужный скрипт висит) де-экипируется что-нибудь. С его помощью можно это "что-нибудь" передавать в соответствующий контейнер - сундук или инвентарь спутника, даже не зная, чем конкретно это "что-нибудь" было.

Изменено пользователем Azazellz
Опубликовано
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'

Опубликовано

Вот тут уж хз.

С фрагментами я совсем мало работал, как у них там синтаксис устроен - не в курсе.

 

Могу предложить сделать "служебный" квест или магический эффект, со скриптов которого вся эта передача вещей и будет работать.

Фрагмент в этом случае будет "пусковым механизмом" - будет запускать квест или кастовать магический эффект.

Опубликовано
29.08.2018 21:04:22, Azazellz сказал(-а):

Вот тут уж хз.

С фрагментами я совсем мало работал, как у них там синтаксис устроен - не в курсе.

 

Могу предложить сделать "служебный" квест или магический эффект, со скриптов которого вся эта передача вещей и будет работать.

Фрагмент в этом случае будет "пусковым механизмом" - будет запускать квест или кастовать магический эффект.

Я вообще нуб, может глупый вопрос, а как запускать событие не через фрагмент? Ну вот у меня есть квест, там диалог, я просто тупо вставляю в окне диалога где begin и end эти фрагменты и что-то происходит.  А как это делать не через фрагменты?

Опубликовано
29.08.2018 21:31:44, Vita2016 сказал(-а):
Я вообще нуб, может глупый вопрос, а как запускать событие не через фрагмент? Ну вот у меня есть квест, там диалог, я просто тупо вставляю в окне диалога где begin и end эти фрагменты и что-то происходит.  А как это делать не через фрагменты?

Если я правильно понимаю систему этих фрагментов, весь код в них стартует либо на запуске диалога, либо на завершении. Т.е. имеет встроенные Event'ы, и других в себе не поддерживает (хз, так ли это на самом деле, но звучит вроде логично).

И чтоб запускать другие евенты - надо писать полноценные скрипты.

 

Рекомендую начать отсюда (список всего, что есть по скриптингу на СК вики). Но если ты уже скрипты пишешь - то часть их этого тебе должна быть знакома.

А вот серия более "практических" туториалов. Там подробно описано, что это за ивенты такие, и как скрипты к объектам прикреплять.

Опубликовано
29.08.2018 22:15:23, Azazellz сказал(-а):

Если я правильно понимаю систему этих фрагментов, весь код в них стартует либо на запуске диалога, либо на завершении. Т.е. имеет встроенные Event'ы, и других в себе не поддерживает (хз, так ли это на самом деле, но звучит вроде логично).

И чтоб запускать другие евенты - надо писать полноценные скрипты.

 

Рекомендую начать отсюда (список всего, что есть по скриптингу на СК вики). Но если ты уже скрипты пишешь - то часть их этого тебе должна быть знакома.

А вот серия более "практических" туториалов. Там подробно описано, что это за ивенты такие, и как скрипты к объектам прикреплять.

Я создал скрипт на вкладке Gameplay. Скомпилировал. Но не понял, как его запустить из квеста... Например, есть стадия квеста 10. Как из нее вызвать этот скрипт?

Опубликовано
30.08.2018 00:05:22, Vita2016 сказал(-а):

Я создал скрипт на вкладке Gameplay. Скомпилировал. Но не понял, как его запустить из квеста... Например, есть стадия квеста 10. Как из нее вызвать этот скрипт?

Скрипт прикрепляешь к квесту, скрипт должен быть типа Conditional. Далее, внутри скрипта создаёшь функцию (к примеру - UnequipArmor(); как создавать свои функции написано здесь), которую будешь вызывать на определённой стадии квеста. Всё сделано? Идём далее - в Quest Stges, в своём квесте, ты создаёшь нужный этап квеста (10), а далее в таблице с надписью в верхней части "Log Entry" и выбираешь пункт "New" Закрываешь квест через кнопку "Ок", сохраняешь плагин. ДАлее заново открываешь квест, заходишь в этапы квеста, открываешь нужный этап и в поле Papyrus Fragment в "kmyQuest" выбираешь твой скрипт.

Далее, в этом же окошке прописываешь код, а нужную функцию вызываешь через "kmyQuest.UnequipArmor()"

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...