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

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

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

Имеются 4 локации (в будущем будет больше) и имеется портал.. только вот нужно чтобы портал работал рандомно (рандомно выбирал в какую локацию переместить или еще лучше чтобы рандомные маркеры выбирал)
Например имеется 8 точек появления на четырех созданных мною локациях.. вхожу в портал и не знаю где появлюсь...
Не могу придумать как описать лучше.
Помогите со скриптом. 

Пытаю этот скрипт но ничего не выходит.
ObjectReference Property TeleportMarker auto

Event OnActivate(ObjectReference akActionRef)
Game.GetPlayer().MoveTo(TeleportMarker)
EndEvent

Изменено пользователем Sevrat

Однажды в правильном месте наступит нужный час.

Опубликовано
28.09.2017 21:08:09, Sevrat сказал(-а):
Пытаю этот скрипт но ничего не выходит.

Что не выходит? Не телепортирует? Или телепортирует, но четко в одно место?

Опубликовано (изменено)
29.09.2017 11:47:45, Azazellz сказал(-а):

Что не выходит? Не телепортирует? Или телепортирует, но четко в одно место?

Работает тот скрипт, пытался его модифицировать но видимо моих мозгов не достаточно, для этого...

Потому и попросил помочь...

Изменено пользователем Sevrat

Однажды в правильном месте наступит нужный час.

Опубликовано
29.09.2017 16:22:47, Sevrat сказал(-а):

Работает тот скрипт, пытался его модифицировать но видимо моих мозгов не достаточно, для этого...

Потому и попросил помочь...

Отличный ответ. Четко и точно по заданному вопросу.

Ты хоть видел, что я тебя спросил?

Опубликовано
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 позиций.

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

Опубликовано
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 позиций.

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

 

Спасибо, буду экспериментировать.

Однажды в правильном месте наступит нужный час.

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

Нужен скрипт, который сможет определить, с какой высоты падает персонаж.

Пока остановил свой выбор на отслеживании 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

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

Изменено пользователем Azazellz
Опубликовано
Привет.)
1)Пожалуйста сделайте скрипт который запрещает вампирам лечиться от еды, зелий и магии исцеления(любой кроме некромантского лечения и лечения нежити).
2)И еще один скрипт для безшумных убийств укусом.Типа скрытно подходишь нажимаешь "E" на врага а там меню "Убить" "Питаться" "Украсть".
3)Скрипт на дикую регенерацию здоровья от вампирского укуса("Убить" и "Питаться")
4)Скрипт отравления от чеснока Х урона в течений 60 секунд.И дикий дебаф на регенерацию здоровья в процентах эти 60 секунд.
5)Скрипт отравления серебром Х урона пока серебряное оружие в руке.И так же дикий дебаф на регенерацию здоровья в процентах пока оружие в руке.
Скажите регенерация может быть отрицательной во время игры?
Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет?Я думаю что регенерация во время игры отрицательной быть не может.Он просто будет нулевым.Но это только догадки.)
Опубликовано
15.10.2017 06:18:37, tobikun2510 сказал(-а):
Скажите регенерация может быть отрицательной во время игры?
Если поставить -5000% регенерацию здоровья то во время игры персонаж умрет?

Врядли.

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

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

  • Нравится 1
  • 2 недели спустя...
Опубликовано

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

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

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

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

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

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

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

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

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

  • Нравится 1
Опубликовано (изменено)
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

Изменено пользователем call_o_bock
Опубликовано (изменено)
Нет. Неверно.
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
  • Нравится 1
Опубликовано
Делаешь два заклинания, одно будет с этим скриптом, второе воскрешающее. Сначала на цель используется заклинание со скриптом (можешь его куда угодно подвесить, хоть на каст, хоть на энчант, хоть на перк), если в момент смерти цели на ней еще висит эффект с этого спелла - убийца эту цель воскресит. Если на момент смерти цели на ней эффекта уже нет - ничего не будет.
Как оно в игре работать будет не тестировал пока, но вроде все ОК должно быть.

 

 

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

Опубликовано
26.10.2017 09:01:19, call_o_bock сказал(-а):
Благодарю, буду тестировать.

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

  • Нравится 1
Опубликовано
Вопрос - как мне заставить NPC превращаться в кучку пепла, как, например, после "окончания срока жизни" мертвецы разрушаются? И ещё, могу ли я сделать NPC призраком, но определённым - фиолетовым, как в Карине душ (или где-то ещё; я просто помню, что такой "вид" призраков есть, но не посню, конкретно где)?
Опубликовано
Посмотри на скрипты молний\подъема трупов. В них дезинтеграция тела прописана.
За цвет призраков отвечает их пассивная способность. Открой любого призрака-НПСа и посмотри на лист его эффектов. Там будет нужное (обычно с FX в названии).
Опубликовано

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

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

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

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

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

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

 

Вход.

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

Выход.

Game.GetPlayer().SetRace(myPlayerRace)

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

 

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

 

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

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

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

  • Нравится 1
Опубликовано
01.11.2017 05:45:25, Azazellz сказал(-а):

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

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


А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?
Опубликовано
01.11.2017 06:28:25, Al Sin сказал(-а):
А что тогда будет отвечать за сохранение рамы в месте где её оставили? Точнее правильней звучать будет, - нажав на этот активатор, не появится ли герой рядом с ним, ещё одним, таким же объектом с расой силовой брони, оставив активатор неизменным в мире? И после смены расы брони на расу героя, останется ли броня рядом с героем?

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

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

  • 4 недели спустя...
Опубликовано
26.10.2017 09:04:42, Azazellz сказал(-а):

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

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

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

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

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

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

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

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

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

Войти

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

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...