Тема для вопросов по скриптингу.
Функции папируса:
На английском
На русском (не все, но базис)
#161
Отправлено
- werr, Chesh¡re и Olechkafum нравится это
#162
Отправлено
Скажите регенерация может быть отрицательной во время игры?Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет?
Врядли.
За урон другие параметры отвечают.
И зачем -5000%? Не проще просто установить на ноль?
- tobikun2510 это нравится
#164
Отправлено
Здравствуйте! Нужна ваша помощь, товарищи.
Есть npc1, который умерщвляет некоторого npc2. Задача сделать так, чтобы npc2 после этого призывался в качестве зомби npc1. Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1.
Короче, можно ли создать скрипт, который бы приводил к событию, описанному выше, но целью может быть любой npc, которого атакует npc1? Как такой скрипт должен выглядеть?
P.S. Я пробовал выдать данному персонажу меч, зачарованный этим самым заклинанием реанимации, но дело в том, что оно, очевидно, работает только на "мертвых" npc, если заклинание наложить на живого, то после его "убийства" последний не "оживет", даже если в Magic Effect в категории flags стоит галка No Death Dispel, т.е. очевидно заклинание нужно наложить заново уже на "мертвого" npc. А идея как раз в том, чтобы npc1 никакого заклинания не кастовал, а "убиенные" им "вставали" как бы сами.
#165
Отправлено
Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1.
Для каста спеллов есть функция Cast (и многие другие, смотри по ссылке).
Для определения смерти есть эвент OnDeath
Делаешь твоему npc1 перк, который будет использовать фичу с apply combat spell, в этот КомбатСпелл ставишь заклинание со скриптовым эффектом, в котором прописан OnDeath эвент. В OnDeath уже программируешь cast (или другие функции), где "источником" заклинания будет указан AkKiller из OnDeath ивента.
Туда же можно записать задержку в секунду-две, чтоб спелл сразу не вылетал.
- call_o_bock это нравится
#166
Отправлено
Для каста спеллов есть функция 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
Сообщение отредактировал call_o_bock: 25 октября 2017 - 12:43
#167
Отправлено
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Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет.
Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть.
Сообщение отредактировал Azazellz: 25 октября 2017 - 13:21
- call_o_bock это нравится
#168
Отправлено
Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет.
Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть.
Благодарю, буду тестировать.
#169
Отправлено
Благодарю, буду тестировать.
Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда.
- call_o_bock это нравится
#170
Отправлено
#172
Отправлено
Имеется скрипт висящий на активаторе силовой брони в 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.
#173
Отправлено
Технически силовая броня - это та же трансформация в вервольфа или вампира-лорда.
Только запускается не из меню способностей, а по нажатию на силовую броню.
Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно.
Анимация проигрывается отдельным скриптом (или вообще привязана к объекту, как к креслу, например). Ее тут нет.
Вход.
myPlayerRace = Game.GetPlayer().GetRace() Game.GetPlayer().SetRace(PowerArmorRace)
Выход.
Game.GetPlayer().SetRace(myPlayerRace)
Остальное - сугубо технические строки, связанные с батарейками и привязкой текущего силового каркаса как той брони, что использует игрок (ради маркера на карте, как я понимаю).
Решил силовую броню попробовать сделать?
Я уже давно хочу такое реализовать, но несколько в ином виде, без смены расы, а через экипировку каркаса как обычной "нательной" брони (с деформацией скелета, если надо - для этого есть NiOTransform), с запретом некоторых функций (подкрадывание) и смены анимации движения (потому что здоровенный робот, бегающий как женщина - это комично).
Только вот анимаций под это дело нет. Можно, конечно, мужские использовать, но это не совсем то.
Делать трансформ в центуриона (или что-то похожее) и использовать его анимации - тоже не совсем верно, ибо центурион ограничен в своих возможностях (да и двигается медленно, играть таким запаришься), а подвесить анимации центуриона к человеческому скелету, дополнив ими базовые - не выйдет (кости в скелете разные).
- Al Sin это нравится
#174
Отправлено
Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно.
Вход.myPlayerRace = Game.GetPlayer().GetRace() Game.GetPlayer().SetRace(PowerArmorRace)Выход.Game.GetPlayer().SetRace(myPlayerRace)
Если грубо, тело скрипта сокращается до:
Scriptname SystemPowerArmorScript extends Quest
Race myPlayerRace
Race Property PowerArmorRace Auto
;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
EndFunction
Function PowerArmorShutdown()
debug.trace(self + " Power Armor System Offline.")
;clear the Power Armor Activator Reference
myPowerArmorRef = none
Game.GetPlayer().SetRace(myPlayerRace)
debug.messagebox("You exit the Power Armor")
EndFunction
А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?
#175
Отправлено
А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?
А этого уже в данном скрипте нет =)
Судя по всему где-то в ином месте реализовано, как и анимации, и прочее.
#176
Отправлено
Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда.
Приветствую! Спустя месяц, решил вернуться таки к моду.
В тот раз ничего толком не вышло, в creation kit открыть редактор скриптов не получалось - вылет, скачал сторонний "SkyrimScriptCompilerProSE" с нексуса, но и тут скрипт не компилировался, "compile failed" и все тут, вероятно синтаксическая ошибка.
Спасибо за содействие. А мне теорию по скриптам надо как-то подучить. На вики все достаточно мутно для меня, может кто-то уже накатал гайд на русском?
#179
Отправлено
Вопрос - могу ли я переименовать уже имеющийся объект (скажем, маркер на карте)? Например, через Message получить от игрока текст x, а затем уже названию маркера z присвоить значение x
Есть несколько модов-ренеймеров. На нексусе или тут в поиске Renamer забей.
Насчет маркера карты не уверен, но название локации в одном из них точно можно было менять.
Или QuickMenu можешь попробовать - это вообще адовый инструмент с мегатоннами возможностей управления всем чем угодно.
- mr Jyggalag это нравится
#180
Отправлено
Нашёл мод, где можно переименовывать локации - называется Jaxonz Renamer. Пойду копаться в коде мода, спасибо за советЕсть несколько модов-ренеймеров. На нексусе или тут в поиске Renamer забей.
Насчет маркера карты не уверен, но название локации в одном из них точно можно было менять.
#181
Отправлено
Доброго времени суток!
Товарищи, кто понимает в скриптах, хотел спросить о скрипте MineOreScript.pex. Всем известна проблема перезаписи реквиемом скрипта добычи CCOR. Эту проблему я решил, как писали ранее здесь.
Вот интересуюсь этим моментом поглубже. Пока что я так понимаю каждый анимационный удар генерит возможность добычи минералов и драг камней.Если выставить на минимум - 3 удара, то и будет 1-3. Мне вот интересно,а можно как-нибудь сделать схему - 1 удар(анимация) и рандом там 1-3 руды / сколько-то камней?
Темы с аналогичным тегами papyrus, help, скрипты, вопросы
Моддинг →
Моддинг Skyrim →
Восстановление на основе Зала ДозораАвтор Alex_andra, 11 дек 2023 mod, help |
|
|||
|
Моддинг →
Моддинг Skyrim →
Отстройка ВинтерхолдаАвтор Alex_andra, 10 авг 2023 bugs, moding, help |
|
||
Моддинг →
Моддинг Oblivion →
Скрипт Для СнаряженияАвтор БесездаБойчик, 07 сен 2022 скрипты, скрипт |
|
|||
Моддинг →
Моддинг Skyrim →
Нужны добровольцы для теста модаАвтор arkadiy111, 11 апр 2022 help |
|
|||
help
Моддинг →
Моддинг Skyrim →
Ram and Skyrim seАвтор Samurai1, 03 апр 2022 help |
|
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 скрытых