1
Fork 0
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.
 
 
 

144 lines
2.9 KiB

Scriptname SprigganFXSCRIPT extends ActiveMagicEffect
{Attaches and controlss spriggan FX}
; Eddoursul 2024.01.27: Multi-stage dying, fixed the KillFX Papyrus warning
VisualEffect Property SprigganFXAttachEffect Auto
Spell Property crSprigganHeal01 Auto
Spell Property crSprigganCallCreatures Auto
Idle Property FFselfIdle Auto
bool bBledout
bool bIsDead
;===============================================
auto state Alive
EVENT OnEffectStart(Actor Target, Actor Caster)
if Target == None
Return
EndIf
If Target.IsDead() || Target == Game.GetForm(0x14)
GotoState("DoNothing")
Dispel()
return
EndIf
;test to see if spriggan is not in ambush mode
if (Target.IsInCombat() || Target.GetSleepState() == 0) && Target.Is3DLoaded()
SprigganFXAttachEffect.Play(Target, -1)
endif
ENDEVENT
; May fire when dispelled with a script or console
Event OnEffectFinish(Actor akTarget, Actor akCaster)
GotoState("DoNothing")
SprigganFXAttachEffect.Stop(akTarget)
endEvent
EVENT onCombatStateChanged(Actor akTarget, int aeCombatState)
Actor actorRef = GetTargetActor()
if ! actorRef || ! actorRef.Is3DLoaded()
return
endif
if aeCombatState == 0
if actorRef.IsDead()
GotoState("Dying")
return
endif
SprigganFXAttachEffect.Stop(actorRef)
return
endif
if aeCombatState == 1
SprigganFXAttachEffect.Play(actorRef, -1)
actorRef.playIdle(FFselfIdle)
Utility.Wait(Utility.RandomFloat(1.0, 4.0))
crSprigganCallCreatures.cast(actorRef, actorRef)
endif
endEVENT
Event OnGetUp(ObjectReference akFurniture)
Actor actorRef = GetTargetActor()
if ! actorRef
return
endif
SprigganFXAttachEffect.Play(actorRef, -1)
actorRef.PlaySubGraphAnimation("Revive")
endEvent
EVENT onDying(actor myKiller)
GotoState("Dying")
ENDEVENT
EVENT onDeath(actor myKiller)
GotoState("Dying")
endevent
Event OnEnterBleedout()
if bBledout
return
endif
bBledout = true
RegisterForSingleUpdate(2.0)
ENDEVENT
; Heals itself
event OnUpdate()
Actor actorRef = GetTargetActor()
if ! actorRef
return
endif
if actorRef.Is3DLoaded()
crSprigganHeal01.Cast(actorRef)
actorRef.setActorValue("variable07",1)
Utility.Wait(Utility.RandomFloat(1.5, 2.5))
actorRef.evaluatePackage()
endif
endevent
endstate
state Dying
event OnBeginState()
RegisterForSingleUpdate(Utility.RandomFloat(2.5, 4.5))
endevent
Event OnEffectFinish(Actor akTarget, Actor akCaster)
GotoState("DoNothing")
akTarget.PlaySubGraphAnimation("KillFX")
endEvent
event OnCellAttach()
RegisterForSingleUpdate(1.0)
endevent
event OnUpdate()
if bIsDead
Dispel()
return
endif
bIsDead = true
Actor actorRef = GetTargetActor()
if actorRef
SprigganFXAttachEffect.Stop(actorRef)
endif
RegisterForSingleUpdate(Utility.RandomFloat(3.0, 7.5))
endevent
endstate
state DoNothing
endstate
; Compiler wants it here
Event OnEnterBleedout()
ENDEVENT