Enderal SE https://mod.pub/enderal-se/38-enderal-se
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
6.0 KiB
208 lines
6.0 KiB
Scriptname DLC2SoulStealScript extends Quest conditional
|
|
{Script attached to DLC2SoulSteal quest}
|
|
|
|
ReferenceAlias Property Player auto
|
|
ReferenceAlias Property Miraak auto
|
|
ReferenceAlias Property Dragon auto
|
|
|
|
Scene Property DLC2SoulStealScene auto
|
|
|
|
Message Property DLC2SoulStealMsg auto
|
|
|
|
MQKillDragonScript Property MQKillDragon auto
|
|
|
|
quest property DLC2MQ02 auto
|
|
quest Property DLC2MQ06 auto
|
|
|
|
MQGreybeardAbsorbScript property MQ105 auto
|
|
|
|
bool Property TestMiraak auto ;if true, then ShouldMiraakAppear() always returns true
|
|
{If true, he always appears when player kills a dragon}
|
|
|
|
GlobalVariable Property DLC2SoulStealCount auto ;if miraak steals soul this goes up one, goes back down if player takes it back
|
|
|
|
bool fightPlayer conditional ;while this is true he will fight the player before disappearing, when this is false, he will disappear when done straling soul
|
|
|
|
bool MiraakStoleSoul conditional ;scene got to the point where Miraak started to steal the soul
|
|
|
|
int secondsBeforeGivingUp = 120 ;houw many seconds until we give up if Miraak hasn't started absorbing the soul
|
|
|
|
bool apprearedOnce
|
|
|
|
WordOfPower Property DLC2BendToWillWord1 auto
|
|
|
|
bool MiraakMadeHisIntroduction
|
|
quest property DLC2MQ01 auto
|
|
quest Property MQ104 auto
|
|
|
|
Faction Property MQNoDragonAbsorb auto
|
|
|
|
; for Greybeard effect
|
|
VisualEffect Property FXGreybeardAbsorbEffect Auto
|
|
EffectShader Property GreybeardPowerAbsorbFXS Auto
|
|
EffectShader Property GreybeardPlayerPowerAbsorbFXS Auto
|
|
sound property NPCDragonDeathSequenceWind auto
|
|
sound property NPCDragonDeathSequenceExplosion auto
|
|
|
|
|
|
|
|
Event OnUpdate()
|
|
; Debug.Trace(self + "OnUpdate()")
|
|
if MiraakStoleSoul == false
|
|
DLC2SoulStealScene.Stop()
|
|
endif
|
|
EndEvent
|
|
|
|
Function StartTimer()
|
|
; Debug.Trace(self + "StartTimer()")
|
|
RegisterForSingleUpdate(secondsBeforeGivingUp)
|
|
EndFunction
|
|
|
|
Function EndTimer()
|
|
unregisterForUpdate()
|
|
; Debug.Trace(self + "EndTimer()")
|
|
EndFunction
|
|
|
|
bool Function TryMiraakMakeHisIntroduction(Actor DragonRef)
|
|
|
|
bool returnVar = false
|
|
|
|
; Debug.Trace(self + "TryMiraakMakeHisIntroduction() -- ALWAYS RETURNS FALSE NOW")
|
|
|
|
; if MiraakMadeHisIntroduction == false && MQ104.GetStage() >=150 && Game.GetPlayer().IsInCombat() == false && DragonRef.isInFaction(MQNoDragonAbsorb) == false
|
|
; MiraakMadeHisIntroduction = true
|
|
; returnVar = true
|
|
; Debug.Trace(self + "TryMiraakMakeHisIntroduction() Miraak is going to make his introductory appearance, calling setStage 0 on DLC2MQ01")
|
|
; DLC2MQ01.SetStage(0)
|
|
; endif
|
|
;
|
|
; Debug.Trace(self + "TryMiraakMakeHisIntroduction() returning: " + returnVar)
|
|
|
|
RETURN returnVar
|
|
|
|
EndFunction
|
|
|
|
bool Function ShouldMiraakAppear(Actor DragonRef)
|
|
; Debug.Trace(self + "ShouldMiraakAppear() checking quest stages and other logic")
|
|
|
|
bool returnVar = false
|
|
int chanceToAppear = 25
|
|
|
|
if DLC2MQ02.GetStage() >= 200 && DLC2MQ06.GetStage() < 500 && DragonRef.isInFaction(MQNoDragonAbsorb) == false
|
|
if Game.IsWordUnlocked(DLC2BendToWillWord1) || Game.GetPlayer().GetActorValue("DragonSouls") > 0
|
|
if Utility.RandomInt(1,100) <= chanceToAppear || apprearedOnce == false
|
|
apprearedOnce = true
|
|
returnVar = true
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
if TestMiraak == true
|
|
; Debug.Trace(self + "ShouldMiraakAppear() -- TestMiraak == true, so forcing returnVar to true")
|
|
returnVar = true
|
|
endif
|
|
|
|
; Debug.Trace(self + "ShouldMiraakAppear() returning: " + returnVar)
|
|
return returnVar
|
|
|
|
EndFunction
|
|
|
|
Function MiraakAppears(ObjectReference DragonRef)
|
|
; Debug.Trace(self + "MiraakAppears()" + DragonRef)
|
|
Dragon.ForceRefTo(DragonRef)
|
|
|
|
DLC2MiraakScript MiraakRef = Miraak.GetReference() as DLC2MiraakScript
|
|
MiraakRef.AppearAtRef = DragonRef
|
|
MiraakRef.Appear()
|
|
MiraakRef.SetNoBleedoutRecovery(true)
|
|
|
|
;clear tracking variables from previous incarnations
|
|
fightPlayer = false
|
|
MiraakStoleSoul = false
|
|
|
|
;START THE "TIMER"
|
|
StartTimer()
|
|
|
|
DLC2SoulStealScene.start()
|
|
|
|
EndFunction
|
|
|
|
Function MiraakDisappears()
|
|
; Debug.Trace(self + "MiraakDisappears()")
|
|
DLC2MiraakScript MiraakRef = Miraak.GetReference() as DLC2MiraakScript
|
|
MiraakRef.Disappear()
|
|
MiraakRef.SetNoBleedoutRecovery(false)
|
|
MiraakRef.RestoreAV("Health", 999999999)
|
|
|
|
;if Miraak disappears before he stole the soul, put the dragon back in the state that lets the player steal it's soul
|
|
if MiraakStoleSoul == false
|
|
(Dragon.GetActorReference() as DragonActorScript).gotoState("deadAndWaiting")
|
|
endif
|
|
|
|
EndFunction
|
|
|
|
Function StealSoul()
|
|
EndTimer()
|
|
; Debug.Trace(self + "StealSoul()")
|
|
MiraakStoleSoul = true
|
|
ModDLC2SoulStealCount(1)
|
|
MQKillDragon.DeathSequence(Dragon.GetActorReference(), Miraak.GetActorReference())
|
|
EndFunction
|
|
|
|
Function FinishStealingSoul()
|
|
; Debug.Trace(self + "FinishStealingSoul()")
|
|
DLC2SoulStealMsg.show()
|
|
EndFunction
|
|
|
|
Function PlayerAttackedMiraak()
|
|
EndTimer()
|
|
; Debug.Trace(self + "PlayerAttackedMiraak()")
|
|
fightPlayer = true
|
|
|
|
EndFunction
|
|
|
|
Function PlayerTakesSoulBack()
|
|
; Debug.Trace(self + "PlayerTakesSoulBack()")
|
|
utility.wait(1)
|
|
AbsorbSoulFromMiraak(Miraak.GetActorReference())
|
|
Game.GetPlayer().modActorValue("dragonsouls", 1)
|
|
ModDLC2SoulStealCount(-1)
|
|
EndFunction
|
|
|
|
Function ModDLC2SoulStealCount(int amountToMod)
|
|
; Debug.Trace(self + "ModDLC2SoulStealCount()")
|
|
DLC2SoulStealCount.setValue(DLC2SoulStealCount.GetValue() + amountToMod)
|
|
EndFunction
|
|
|
|
Function MiraakDetached()
|
|
; Debug.Trace(self + "MiraakDetached()")
|
|
if DLC2SoulStealScene.IsPlaying()
|
|
; Debug.Trace(self + "MiraakDetached() DLC2SoulStealScene is playing, calling stop()")
|
|
DLC2SoulStealScene.Stop()
|
|
endif
|
|
EndFunction
|
|
|
|
|
|
;CRIBBED FROM MQGreybeardAbsorbScript "AbsorbSoul()"
|
|
function AbsorbSoulFromMiraak(Actor target)
|
|
; Debug.Trace(self + "AbsorbSoulFromMiraak()")
|
|
|
|
Actor PlayerRef = Game.GetPlayer()
|
|
|
|
;Play art and fx shaders on player and targeted grybeard
|
|
FXGreybeardAbsorbEffect.Play(target, 7, PlayerRef)
|
|
GreybeardPowerAbsorbFXS.Play(target)
|
|
GreybeardPlayerPowerAbsorbFXS.Play(PlayerRef)
|
|
|
|
; Sounds for when the wispy particles being to fly at the player.
|
|
NPCDragonDeathSequenceWind.play(target)
|
|
NPCDragonDeathSequenceExplosion.play(target)
|
|
|
|
utility.wait(7)
|
|
|
|
;remove magic shaders
|
|
GreybeardPowerAbsorbFXS.Stop(target)
|
|
GreybeardPlayerPowerAbsorbFXS.Stop(PlayerRef)
|
|
|
|
EndFunction
|
|
|
|
|