Sevrat Опубликовано 28 сентября, 2017 Опубликовано 28 сентября, 2017 (изменено) Имеются 4 локации (в будущем будет больше) и имеется портал.. только вот нужно чтобы портал работал рандомно (рандомно выбирал в какую локацию переместить или еще лучше чтобы рандомные маркеры выбирал) Например имеется 8 точек появления на четырех созданных мною локациях.. вхожу в портал и не знаю где появлюсь... Не могу придумать как описать лучше. Помогите со скриптом. Пытаю этот скрипт но ничего не выходит.ObjectReference Property TeleportMarker auto Event OnActivate(ObjectReference akActionRef) Game.GetPlayer().MoveTo(TeleportMarker) EndEvent Изменено 28 сентября, 2017 пользователем Sevrat Однажды в правильном месте наступит нужный час.
Azazellz Опубликовано 29 сентября, 2017 Опубликовано 29 сентября, 2017 28.09.2017 21:08:09, Sevrat сказал(-а):Пытаю этот скрипт но ничего не выходит. Что не выходит? Не телепортирует? Или телепортирует, но четко в одно место?
Sevrat Опубликовано 29 сентября, 2017 Опубликовано 29 сентября, 2017 (изменено) 29.09.2017 11:47:45, Azazellz сказал(-а): Что не выходит? Не телепортирует? Или телепортирует, но четко в одно место? Работает тот скрипт, пытался его модифицировать но видимо моих мозгов не достаточно, для этого... Потому и попросил помочь... Изменено 29 сентября, 2017 пользователем Sevrat Однажды в правильном месте наступит нужный час.
Azazellz Опубликовано 29 сентября, 2017 Опубликовано 29 сентября, 2017 29.09.2017 16:22:47, Sevrat сказал(-а): Работает тот скрипт, пытался его модифицировать но видимо моих мозгов не достаточно, для этого... Потому и попросил помочь... Отличный ответ. Четко и точно по заданному вопросу. Ты хоть видел, что я тебя спросил?
werr Опубликовано 29 сентября, 2017 Опубликовано 29 сентября, 2017 28.09.2017 21:08:09, Sevrat сказал(-а):Помогите со скриптом.Если портал представляет из себя херню-активатор, по которой надо нажимать, чтоб телепортировало, то вот. Если же ты хочешь заходить в триггер и таким образом телепортироваться, нужен другой ивент. Сам кодСпойлер... Actor property PlayerREF auto ObjectReference[] property DestinationPos auto Event OnActivate(ObjectReference akActivatorRef) if akActivatorRef == PlayerREF TeleportAssistant() endif EndEvent Function TeleportAssistant() int k = Utility.RandomInt(0, DestinationPos.length - 1) PlayerREF.MoveTo(DestinationPos[k]) EndFunction PlayerREF — это игрок. Данное проперти заполнится автоматически если ты ткнешь "auto-fill all".DestinationPos — это массив XMarkerHeading-ов, к которым и предлагается телепортация. Заполнишь этот массив своими точками спауна, предлогаемый UI при заполнении пропертей интуитивно понятен, объяснять смысла не вижу. Прелесть такого подхода (через массив) в том, что когда ты дополнишь свой мод новыми точками спауна, тебе не придется редактировать код, просто добавишь ячеек массиву. Всего в массив влезет 128 позиций.От себя. Я бы добавил всяких вау-эффектов, свистелок-перделок, шейдеров по порталу, по модели игрока, киношного затемнения экрана, может быть, переключения на третье лицо и воспроизведения игроком анимации. A Random Dude's Story
Sevrat Опубликовано 29 сентября, 2017 Опубликовано 29 сентября, 2017 29.09.2017 18:28:48, werr сказал(-а): Если портал представляет из себя херню-активатор, по которой надо нажимать, чтоб телепортировало, то вот. Если же ты хочешь заходить в триггер и таким образом телепортироваться, нужен другой ивент. Сам код Спойлер ... Actor property PlayerREF auto ObjectReference[] property DestinationPos auto Event OnActivate(ObjectReference akActivatorRef) if akActivatorRef == PlayerREF TeleportAssistant() endif EndEvent Function TeleportAssistant() int k = Utility.RandomInt(0, DestinationPos.length - 1) PlayerREF.MoveTo(DestinationPos[k]) EndFunction PlayerREF — это игрок. Данное проперти заполнится автоматически если ты ткнешь "auto-fill all". DestinationPos — это массив XMarkerHeading-ов, к которым и предлагается телепортация. Заполнишь этот массив своими точками спауна, предлогаемый UI при заполнении пропертей интуитивно понятен, объяснять смысла не вижу. Прелесть такого подхода (через массив) в том, что когда ты дополнишь свой мод новыми точками спауна, тебе не придется редактировать код, просто добавишь ячеек массиву. Всего в массив влезет 128 позиций. От себя. Я бы добавил всяких вау-эффектов, свистелок-перделок, шейдеров по порталу, по модели игрока, киношного затемнения экрана, может быть, переключения на третье лицо и воспроизведения игроком анимации. Спасибо, буду экспериментировать. Однажды в правильном месте наступит нужный час.
mr Jyggalag Опубликовано 2 октября, 2017 Опубликовано 2 октября, 2017 (изменено) - Изменено 9 октября, 2017 пользователем wdsaasdw
Azazellz Опубликовано 9 октября, 2017 Опубликовано 9 октября, 2017 (изменено) Нужен скрипт, который сможет определить, с какой высоты падает персонаж. Пока остановил свой выбор на отслеживании AnimationEvent'ов (JumpFall и JumpDown), и вычислении разницы по Z координате между ними, но оно как-то не слишком стабильно работает, особенно от первого лица. Сам скрипт пока такой. Спелл в конце для того, чтоб понять, прошло все правильно, или расчет был кривой. И от первого лица он как раз обычно "кривой". Event OnAnimationEvent(ObjectReference akSource, string EventName) if (eventName == "JumpFall") Zpos1 = PlayerRef.GetPositionZ() elseif (eventName == "JumpDown") Zpos2 = PlayerRef.GetPositionZ() Zpos3 = math.abs (Zpos1 - Zpos2) if (Zpos3 > 250) LandingSpell.Cast(PlayerRef, PlayerRef) endif endif endEVENT Есть у кого-нибудь идеи, как это более стабильно можно делать? Скай урон от падения же очень быстро считает. Изменено 9 октября, 2017 пользователем Azazellz
mr Jyggalag Опубликовано 9 октября, 2017 Опубликовано 9 октября, 2017 Вопрос - как сделать так, чтобы после определённого этапа квеста должен "выключаться" определённый объект?
tobikun2510 Опубликовано 15 октября, 2017 Опубликовано 15 октября, 2017 Привет.) 1)Пожалуйста сделайте скрипт который запрещает вампирам лечиться от еды, зелий и магии исцеления(любой кроме некромантского лечения и лечения нежити). 2)И еще один скрипт для безшумных убийств укусом.Типа скрытно подходишь нажимаешь "E" на врага а там меню "Убить" "Питаться" "Украсть". 3)Скрипт на дикую регенерацию здоровья от вампирского укуса("Убить" и "Питаться") 4)Скрипт отравления от чеснока Х урона в течений 60 секунд.И дикий дебаф на регенерацию здоровья в процентах эти 60 секунд. 5)Скрипт отравления серебром Х урона пока серебряное оружие в руке.И так же дикий дебаф на регенерацию здоровья в процентах пока оружие в руке. Скажите регенерация может быть отрицательной во время игры? Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет?Я думаю что регенерация во время игры отрицательной быть не может.Он просто будет нулевым.Но это только догадки.)
Azazellz Опубликовано 15 октября, 2017 Опубликовано 15 октября, 2017 15.10.2017 06:18:37, tobikun2510 сказал(-а): Скажите регенерация может быть отрицательной во время игры? Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет? Врядли. За урон другие параметры отвечают. И зачем -5000%? Не проще просто установить на ноль? 1
tobikun2510 Опубликовано 15 октября, 2017 Опубликовано 15 октября, 2017 Что бы игроки потом не использовали предметы с регенарацией.Я хочу что бы регена на было на солнце для вампиров.
call_o_bock Опубликовано 25 октября, 2017 Опубликовано 25 октября, 2017 Здравствуйте! Нужна ваша помощь, товарищи. Есть npc1, который умерщвляет некоторого npc2. Задача сделать так, чтобы npc2 после этого призывался в качестве зомби npc1. Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1. Короче, можно ли создать скрипт, который бы приводил к событию, описанному выше, но целью может быть любой npc, которого атакует npc1? Как такой скрипт должен выглядеть? P.S. Я пробовал выдать данному персонажу меч, зачарованный этим самым заклинанием реанимации, но дело в том, что оно, очевидно, работает только на "мертвых" npc, если заклинание наложить на живого, то после его "убийства" последний не "оживет", даже если в Magic Effect в категории flags стоит галка No Death Dispel, т.е. очевидно заклинание нужно наложить заново уже на "мертвого" npc. А идея как раз в том, чтобы npc1 никакого заклинания не кастовал, а "убиенные" им "вставали" как бы сами.
Azazellz Опубликовано 25 октября, 2017 Опубликовано 25 октября, 2017 25.10.2017 10:10:31, call_o_bock сказал(-а):Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1. Для каста спеллов есть функция Cast (и многие другие, смотри по ссылке). Для определения смерти есть эвент OnDeath Делаешь твоему npc1 перк, который будет использовать фичу с apply combat spell, в этот КомбатСпелл ставишь заклинание со скриптовым эффектом, в котором прописан OnDeath эвент. В OnDeath уже программируешь cast (или другие функции), где "источником" заклинания будет указан AkKiller из OnDeath ивента. Туда же можно записать задержку в секунду-две, чтоб спелл сразу не вылетал. 1
call_o_bock Опубликовано 25 октября, 2017 Опубликовано 25 октября, 2017 (изменено) 25.10.2017 11:00:42, Azazellz сказал(-а): Для каста спеллов есть функция Cast (и многие другие, смотри по ссылке). Для определения смерти есть эвент OnDeath Делаешь твоему npc1 перк, который будет использовать фичу с apply combat spell, в этот КомбатСпелл ставишь заклинание со скриптовым эффектом, в котором прописан OnDeath эвент. В OnDeath уже программируешь cast (или другие функции), где "источником" заклинания будет указан AkKiller из OnDeath ивента. Туда же можно записать задержку в секунду-две, чтоб спелл сразу не вылетал. Спасибо за ответ. Пытаюсь разобраться в папирусе, пока что много неясностей. Можно на конкретном примере разобрать? Scriptname MyScript extends Actor ;нужно обозначить участников? ;далее втыкать событие? Event OnDeath(Actor akKiller) ;как указать задержку и в какой строке? if (akKiller == Game.GetPlayer()) ;что здесь писать? ;теперь функция? Function cast (actor akSource, actore akTarget = ?) native ;как указать цель? endIf endEvent Изменено 25 октября, 2017 пользователем call_o_bock
Azazellz Опубликовано 25 октября, 2017 Опубликовано 25 октября, 2017 (изменено) Нет. Неверно.Actor - это скрипт актера, должен крепиться только к НПСам. Другими словами, если ты используешь там эвент onDeath - этот скрипт надо будет прилепить ко всем неписям, которых ты планируешь таким образом воскрешать.А вот скрипты, которые расширяют ActiveMagicEffect ловят ивенты с тех актеров, на которых эти эффекты в данный момент висят.Типа такого что-то. Scriptname MyScript extends ActiveMagicEffect Spell Property ReanimateSpell Auto ;это твой спелл, который будет подымать труп Actor Property PlayerRef Auto ;это игрок - так задать его быстрее, чем через game-скрипт. Actor SpellTarget ;это цель для воскрешения, определяться будет в момент использования основного заклинания Event OnEffectStart(Actor akTarget, Actor akCaster) SpellTarget = AkTarget ;на НПСА применяется спелл, который задает цель endEvent Event OnDeath(Actor akKiller) utility.wait (1) ;ждем секунду ReanimateSpell.cast (akKiller, SpellTarget) ;кастуем спелл воскрешения endEvent Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет.Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть. Изменено 25 октября, 2017 пользователем Azazellz 1
call_o_bock Опубликовано 26 октября, 2017 Опубликовано 26 октября, 2017 Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет. Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть. Благодарю, буду тестировать.
Azazellz Опубликовано 26 октября, 2017 Опубликовано 26 октября, 2017 26.10.2017 09:01:19, call_o_bock сказал(-а):Благодарю, буду тестировать. Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда. 1
mr Jyggalag Опубликовано 30 октября, 2017 Опубликовано 30 октября, 2017 Вопрос - как мне заставить NPC превращаться в кучку пепла, как, например, после "окончания срока жизни" мертвецы разрушаются? И ещё, могу ли я сделать NPC призраком, но определённым - фиолетовым, как в Карине душ (или где-то ещё; я просто помню, что такой "вид" призраков есть, но не посню, конкретно где)?
Azazellz Опубликовано 30 октября, 2017 Опубликовано 30 октября, 2017 Посмотри на скрипты молний\подъема трупов. В них дезинтеграция тела прописана.За цвет призраков отвечает их пассивная способность. Открой любого призрака-НПСа и посмотри на лист его эффектов. Там будет нужное (обычно с FX в названии).
Al Sin Опубликовано 1 ноября, 2017 Опубликовано 1 ноября, 2017 Имеется скрипт висящий на активаторе силовой брони в Fallout 4: Scriptname SystemPowerArmorScript extends Quest Race myPlayerRace Race Property PowerArmorRace Auto Int myBatteryLife Int myMaxBatteryLife ObjectReference Property myPowerArmorRef Auto ;TEMP Properties to give player Machine Gun Weapon Property MachineGun01 Auto ;All the battery life data lives on the Power Armor Activator. So we pass the data from the activator into the Power Armor system, and then pass that data back when we're done Function PowerArmorStartUp (ObjectReference PowerArmorRef, Int CurrentBatteryLife, Int MaxBatteryLife) ;make sure debug logs are catching relevent data debug.trace(self + " Power Armor System Online.") debug.trace(self + " Player is in Power Armor Object Reference: " + PowerArmorRef) debug.trace(self + " Power Armor Battery Life is: " + CurrentBatteryLife) debug.trace(self + " Power Armor Maximum Battery Life is: " + MaxBatteryLife) ;Store the player's race so we can swap it later myPlayerRace = Game.GetPlayer().GetRace() Game.GetPlayer().SetRace(PowerArmorRace) Debug.MessageBox("You step into the Power Armor") ;store activator reference myPowerArmorRef = PowerArmorRef ;store power armor battery life myBatteryLife = CurrentBatteryLife myMaxBatteryLife = MaxBatteryLife debug.notification("Current Power Armor Charge: " + myBatteryLife) ;TEMP -- Give the player the machine gun since we don't have the Pipboy. Game.GetPlayer().EquipItem(MachineGun01) EndFunction Function PowerArmorRecharge (int RechargeAmount) myBatteryLife = myBatteryLife + RechargeAmount If myBatteryLife > myMaxBatteryLife myBatteryLife = myMaxBatteryLife EndIf debug.notification("Current Power Armor Charge: " + myBatteryLife) EndFunction Function PowerArmorShutdown() debug.trace(self + " Power Armor System Offline.") ;output data back to the Power Armor Activator (myPowerArmorRef as PowerArmorActivatorScript).PowerArmorSystemSync(myBatteryLife, myMaxBatteryLife) ;clear the Power Armor Activator Reference myPowerArmorRef = none Game.GetPlayer().SetRace(myPlayerRace) debug.messagebox("You exit the Power Armor") EndFunction Часть строк определенно относится к наличию батареи в силовой броне, часть закоментирована к возможности поднимать тяжелое оружие, а часть должна к активации анимации входа в броню. Поставил цель переписать скрипт под реалии скайрима, в идеале без потребности в батареях и проверке их наличия (в крайнем случае можно будет заменить неким предметом аналогичным, но это усложнит общий процесс). Главное восстановить процесс активации анимированного входа в броню. Может кто то помочь с выделением нужных строк и, возможно, с переводом под потребности Skyrim.
Azazellz Опубликовано 1 ноября, 2017 Опубликовано 1 ноября, 2017 Технически силовая броня - это та же трансформация в вервольфа или вампира-лорда. Только запускается не из меню способностей, а по нажатию на силовую броню. Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно. Анимация проигрывается отдельным скриптом (или вообще привязана к объекту, как к креслу, например). Ее тут нет. Вход. myPlayerRace = Game.GetPlayer().GetRace() Game.GetPlayer().SetRace(PowerArmorRace) Выход. Game.GetPlayer().SetRace(myPlayerRace) Остальное - сугубо технические строки, связанные с батарейками и привязкой текущего силового каркаса как той брони, что использует игрок (ради маркера на карте, как я понимаю). Решил силовую броню попробовать сделать? Я уже давно хочу такое реализовать, но несколько в ином виде, без смены расы, а через экипировку каркаса как обычной "нательной" брони (с деформацией скелета, если надо - для этого есть NiOTransform), с запретом некоторых функций (подкрадывание) и смены анимации движения (потому что здоровенный робот, бегающий как женщина - это комично). Только вот анимаций под это дело нет. Можно, конечно, мужские использовать, но это не совсем то. Делать трансформ в центуриона (или что-то похожее) и использовать его анимации - тоже не совсем верно, ибо центурион ограничен в своих возможностях (да и двигается медленно, играть таким запаришься), а подвесить анимации центуриона к человеческому скелету, дополнив ими базовые - не выйдет (кости в скелете разные). 1
Al Sin Опубликовано 1 ноября, 2017 Опубликовано 1 ноября, 2017 01.11.2017 05:45:25, Azazellz сказал(-а):Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно. Вход.myPlayerRace = Game.GetPlayer().GetRace() Game.GetPlayer().SetRace(PowerArmorRace)Выход.Game.GetPlayer().SetRace(myPlayerRace)Если грубо, тело скрипта сокращается до:Scriptname SystemPowerArmorScript extends QuestRace myPlayerRaceRace Property PowerArmorRace Auto;Store the player's race so we can swap it latermyPlayerRace = Game.GetPlayer().GetRace()Game.GetPlayer().SetRace(PowerArmorRace)Debug.MessageBox("You step into the Power Armor");store activator referencemyPowerArmorRef = PowerArmorRefEndFunctionFunction PowerArmorShutdown()debug.trace(self + " Power Armor System Offline.");clear the Power Armor Activator ReferencemyPowerArmorRef = noneGame.GetPlayer().SetRace(myPlayerRace)debug.messagebox("You exit the Power Armor")EndFunctionА что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?
Azazellz Опубликовано 1 ноября, 2017 Опубликовано 1 ноября, 2017 01.11.2017 06:28:25, Al Sin сказал(-а):А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем? А этого уже в данном скрипте нет =) Судя по всему где-то в ином месте реализовано, как и анимации, и прочее.
call_o_bock Опубликовано 23 ноября, 2017 Опубликовано 23 ноября, 2017 26.10.2017 09:04:42, Azazellz сказал(-а): Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда. Приветствую! Спустя месяц, решил вернуться таки к моду. В тот раз ничего толком не вышло, в creation kit открыть редактор скриптов не получалось - вылет, скачал сторонний "SkyrimScriptCompilerProSE" с нексуса, но и тут скрипт не компилировался, "compile failed" и все тут, вероятно синтаксическая ошибка. Спасибо за содействие. А мне теорию по скриптам надо как-то подучить. На вики все достаточно мутно для меня, может кто-то уже накатал гайд на русском?
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти