Rewrote SprigganFXSCRIPT

This commit is contained in:
Eddoursul 2024-01-27 02:10:55 +01:00
parent 1aae79648f
commit fd7a9aaa3c
2 changed files with 115 additions and 92 deletions

Binary file not shown.

View File

@ -1,121 +1,144 @@
Scriptname SprigganFXSCRIPT extends ActiveMagicEffect
{Attaches and controlss spriggan FX}
import utility
import form
; Eddoursul 2024.01.27: Multi-stage dying, fixed the KillFX Papyrus warning
Actor selfRef
VisualEffect Property SprigganFXAttachEffect Auto
Spell Property crSprigganHeal01 Auto
Spell Property crSprigganCallCreatures Auto
Idle Property FFselfIdle Auto
int doOnce
bool bBledout
bool bIsDead
;===============================================
;RegisterForSleep() ; Before we can use OnSleepStart we must register.
auto state Alive
EVENT OnEffectStart(Actor Target, Actor Caster)
;Play your particles.
selfRef = caster
if Target == None
Return
EndIf
;Added by USKP to prevent this effect from appearing on the player.
If selfRef == Game.GetPlayer()
If Target.IsDead() || Target == Game.GetForm(0x14)
GotoState("DoNothing")
Dispel()
return
EndIf
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it
if( selfRef == None )
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." )
Return
EndIf
;USSEP 4.1.5 Bug #14445: added this line:
RegisterForAnimationEvent (selfRef, "KillFX")
RegisterForAnimationEvent (selfRef, "Revive")
;test to see if spriggan is in ambush mode
if (selfRef.GetSleepState() == 3)
; Debug.Trace("Spriggan is sleeping! 3")
selfRef.PlaySubGraphAnimation( "KillFX" )
else
;USKP 2.0.3 - 3D check needed before shaders.
if( selfRef.Is3DLoaded() )
SprigganFXAttachEffect.Play(selfRef, -1)
EndIf
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)
SprigganFXAttachEffect.Stop(selfRef)
GotoState("DoNothing")
SprigganFXAttachEffect.Stop(akTarget)
endEvent
Event OnGetUp(ObjectReference akFurniture)
;Added by USKP to prevent this effect from appearing on the player.
If selfRef == Game.GetPlayer()
Dispel()
return
EndIf
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it
if( selfRef == None )
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." )
Return
EndIf
; Debug.Trace("We just got up from " )
SprigganFXAttachEffect.Play(selfRef, -1)
selfRef.PlaySubGraphAnimation( "Revive" )
endEvent
EVENT onDeath(actor myKiller)
;(selfRef as actor).PlaySubGraphAnimation( "LeavesScared" )
;wait(10.0)
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it
if( selfRef == None )
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." )
Return
EndIf
selfRef.PlaySubGraphAnimation( "KillFX" )
wait(10.0)
SprigganFXAttachEffect.Stop(selfRef)
ENDEVENT
EVENT onCombatStateChanged(Actor akTarget, int aeCombatState)
if aeCombatState == 1
selfRef.playIdle(FFselfIdle)
utility.wait(3.0)
Actor actorRef = GetTargetActor()
;USKP 2.0.1 - If the 3D isn't loaded, don't cast.
if( selfRef.Is3DLoaded() )
crSprigganCallCreatures.cast(selfRef,selfRef)
EndIf
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 OnEnterBleedout()
; Debug.Trace("dude im bleeeding out" )
if doOnce == 0
selfRef.PlaySubGraphAnimation( "KillFX" )
wait(2.0)
;USKP 2.0.1 - If the 3D isn't loaded, don't case.
if( selfRef.Is3DLoaded() )
crSprigganHeal01.Cast(selfRef)
EndIf
selfRef.setActorValue("variable07",1)
selfRef.evaluatePackage()
wait(1.0)
selfRef.PlaySubGraphAnimation( "Revive" )
doOnce = 1
endIf
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
;-----------------------------------------------------------------
; Added by USSEP 4.1.5 for Bug #14445:
;-----------------------------------------------------------------
EVENT onDeath(actor myKiller)
GotoState("Dying")
endevent
Event OnAnimationEvent (ObjectReference akSource, string asEventName)
;do nothing
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