Перейти к содержимому


Фотография

Вопросы по скриптам

papyrus help скрипты вопросы

  • Авторизуйтесь для ответа в теме

#161 Ссылка на это сообщение Potatoider

Potatoider
  • Знаменитый оратор


  • 4 350 сообщений
  •    

Отправлено

Тема для вопросов по скриптингу.

Функции папируса:

На английском

На русском (не все, но базис)



 




  • Авторизуйтесь для ответа в теме
Сообщений в теме: 832

#162 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Скажите регенерация может быть отрицательной во время игры?
Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет?

Врядли.

За урон другие параметры отвечают.

И зачем -5000%? Не проще просто установить на ноль?



#163 Ссылка на это сообщение tobikun2510

tobikun2510
  • Новенький
  • 7 сообщений

Отправлено

Что бы игроки потом не использовали предметы с регенарацией.Я хочу что бы регена на было на солнце для вампиров.

#164 Ссылка на это сообщение call_o_bock

call_o_bock
  • Новенький
  • 6 сообщений

Отправлено

Здравствуйте! Нужна ваша помощь, товарищи.

Есть npc1, который умерщвляет некоторого npc2. Задача сделать так, чтобы npc2 после этого призывался в качестве зомби npc1. Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1.

Короче, можно ли создать скрипт, который бы приводил к событию, описанному выше, но целью может быть любой npc, которого атакует npc1? Как такой скрипт должен выглядеть?

P.S. Я пробовал выдать данному персонажу меч, зачарованный этим самым заклинанием реанимации, но дело в том, что оно, очевидно, работает только на "мертвых" npc, если заклинание наложить на живого, то после его "убийства" последний не "оживет", даже если в Magic Effect в категории flags стоит галка No Death Dispel, т.е. очевидно заклинание нужно наложить заново уже на "мертвого" npc. А идея как раз в том, чтобы npc1 никакого заклинания не кастовал, а "убиенные" им "вставали" как бы сами.



#165 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Т.е. после смерти npc2 на него с задержкой накладывалось заклинание реанимации (подобно "мертвый трэлл"), при этом "кастовал" это заклинание как будто npc1.

Для каста спеллов есть функция Cast (и многие другие, смотри по ссылке).

Для определения смерти есть эвент OnDeath

Делаешь твоему npc1 перк, который будет использовать фичу с apply combat spell, в этот КомбатСпелл ставишь заклинание со скриптовым эффектом, в котором прописан OnDeath эвент. В OnDeath уже программируешь cast (или другие функции), где "источником" заклинания будет указан AkKiller из OnDeath ивента.

Туда же можно записать задержку в секунду-две, чтоб спелл сразу не вылетал.



#166 Ссылка на это сообщение call_o_bock

call_o_bock
  • Новенький
  • 6 сообщений

Отправлено

Для каста спеллов есть функция 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 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Нет. Неверно.
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


#168 Ссылка на это сообщение call_o_bock

call_o_bock
  • Новенький
  • 6 сообщений

Отправлено

Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет.
Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть.

 

 

Благодарю, буду тестировать.



#169 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Благодарю, буду тестировать.

Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда.



#170 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Вопрос - как мне заставить NPC превращаться в кучку пепла, как, например, после "окончания срока жизни" мертвецы разрушаются? И ещё, могу ли я сделать NPC призраком, но определённым - фиолетовым, как в Карине душ (или где-то ещё; я просто помню, что такой "вид" призраков есть, но не посню, конкретно где)?

#171 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Посмотри на скрипты молний\подъема трупов. В них дезинтеграция тела прописана.
За цвет призраков отвечает их пассивная способность. Открой любого призрака-НПСа и посмотри на лист его эффектов. Там будет нужное (обычно с FX в названии).

#172 Ссылка на это сообщение Al Sin

Al Sin
  • Профи
  • 471 сообщений
  •    

Отправлено

Имеется скрипт висящий на активаторе силовой брони в 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 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Технически силовая броня - это та же трансформация в вервольфа или вампира-лорда.

Только запускается не из меню способностей, а по нажатию на силовую броню.

Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно.

Анимация проигрывается отдельным скриптом (или вообще привязана к объекту, как к креслу, например). Ее тут нет.

 

Вход.

myPlayerRace = Game.GetPlayer().GetRace()
Game.GetPlayer().SetRace(PowerArmorRace)

Выход.

Game.GetPlayer().SetRace(myPlayerRace)

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

 

Решил силовую броню попробовать сделать?

 

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

Только вот анимаций под это дело нет. Можно, конечно, мужские использовать, но это не совсем то.

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


  • Al Sin это нравится

#174 Ссылка на это сообщение Al Sin

Al Sin
  • Профи
  • 471 сообщений
  •    

Отправлено

Игрок жмет на силовую броню, сохраняется текущая раса игрока, и затем меняется на расу "силовой брони". Когда выходишь - раса меняется обратно.
 
Вход.

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 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?

А этого уже в данном скрипте нет =)

Судя по всему где-то в ином месте реализовано, как и анимации, и прочее.



#176 Ссылка на это сообщение call_o_bock

call_o_bock
  • Новенький
  • 6 сообщений

Отправлено

Для тестов можешь этот скрипт к ванильному "захвату души" прицепить, и как воскрешалку какого-нибудь ванильного "ужасного зомби" указать или еще что-нибудь из этого же разряда.

Приветствую! Спустя месяц, решил вернуться таки к моду.

В тот раз ничего толком не вышло, в creation kit открыть редактор скриптов не получалось - вылет, скачал сторонний "SkyrimScriptCompilerProSE" с нексуса, но и тут скрипт не компилировался, "compile failed" и все тут, вероятно синтаксическая ошибка.

Спасибо за содействие. А мне теорию по скриптам надо как-то подучить. На вики все достаточно мутно для меня, может кто-то уже накатал гайд на русском?



#177 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

А мне теорию по скриптам надо как-то подучить. На вики все достаточно мутно для меня, может кто-то уже накатал гайд на русском?

Может кто и перевел.

Но вообще надо на английском читать учиться, ибо 90% мануалов на нем.

На СК-вики есть несколько стартовых гайдов.



#178 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Вопрос - могу ли я переименовать уже имеющийся объект (скажем, маркер на карте)? Например, через Message получить от игрока текст x, а затем уже названию маркера z присвоить значение x

#179 Ссылка на это сообщение Azazellz

Azazellz
  • Знаменитый оратор
  • 2 055 сообщений
  •    

Отправлено

Вопрос - могу ли я переименовать уже имеющийся объект (скажем, маркер на карте)? Например, через Message получить от игрока текст x, а затем уже названию маркера z присвоить значение x

Есть несколько модов-ренеймеров. На нексусе или тут в поиске Renamer забей.

Насчет маркера карты не уверен, но название локации в одном из них точно можно было менять.

 

Или QuickMenu можешь попробовать - это вообще адовый инструмент с мегатоннами возможностей управления всем чем угодно.



#180 Ссылка на это сообщение mr Jyggalag

mr Jyggalag
  • Ветеран

  • 609 сообщений
  •    

Отправлено

Есть несколько модов-ренеймеров. На нексусе или тут в поиске Renamer забей.
Насчет маркера карты не уверен, но название локации в одном из них точно можно было менять.

Нашёл мод, где можно переименовывать локации - называется Jaxonz Renamer. Пойду копаться в коде мода, спасибо за совет

#181 Ссылка на это сообщение alexeyfenix

alexeyfenix
  • Новенький
  • 17 сообщений

Отправлено

Доброго времени суток!

Товарищи, кто понимает в скриптах, хотел спросить о скрипте MineOreScript.pex. Всем известна проблема перезаписи реквиемом скрипта добычи CCOR. Эту проблему я решил, как писали ранее здесь.

Вот интересуюсь этим моментом поглубже. Пока что я так понимаю каждый анимационный удар генерит возможность добычи минералов и драг камней.Если выставить на минимум - 3 удара, то и будет 1-3. Мне вот интересно,а можно как-нибудь сделать схему -  1 удар(анимация) и рандом там 1-3 руды  / сколько-то камней?







Темы с аналогичным тегами papyrus, help, скрипты, вопросы

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых