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 Scriptname SprigganFXSCRIPT extends ActiveMagicEffect
{Attaches and controlss spriggan FX} {Attaches and controlss spriggan FX}
import utility ; Eddoursul 2024.01.27: Multi-stage dying, fixed the KillFX Papyrus warning
import form
Actor selfRef
VisualEffect Property SprigganFXAttachEffect Auto VisualEffect Property SprigganFXAttachEffect Auto
Spell Property crSprigganHeal01 Auto Spell Property crSprigganHeal01 Auto
Spell Property crSprigganCallCreatures Auto Spell Property crSprigganCallCreatures Auto
Idle Property FFselfIdle 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) EVENT OnEffectStart(Actor Target, Actor Caster)
;Play your particles. if Target == None
selfRef = caster Return
EndIf
;Added by USKP to prevent this effect from appearing on the player. If Target.IsDead() || Target == Game.GetForm(0x14)
If selfRef == Game.GetPlayer() GotoState("DoNothing")
Dispel() Dispel()
return return
EndIf EndIf
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it ;test to see if spriggan is not in ambush mode
if( selfRef == None ) if (Target.IsInCombat() || Target.GetSleepState() == 0) && Target.Is3DLoaded()
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." ) SprigganFXAttachEffect.Play(Target, -1)
Return endif
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
ENDEVENT ENDEVENT
; May fire when dispelled with a script or console
Event OnEffectFinish(Actor akTarget, Actor akCaster) Event OnEffectFinish(Actor akTarget, Actor akCaster)
SprigganFXAttachEffect.Stop(selfRef) GotoState("DoNothing")
SprigganFXAttachEffect.Stop(akTarget)
endEvent 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) EVENT onCombatStateChanged(Actor akTarget, int aeCombatState)
if aeCombatState == 1 Actor actorRef = GetTargetActor()
selfRef.playIdle(FFselfIdle)
utility.wait(3.0)
;USKP 2.0.1 - If the 3D isn't loaded, don't cast. if ! actorRef || ! actorRef.Is3DLoaded()
if( selfRef.Is3DLoaded() ) return
crSprigganCallCreatures.cast(selfRef,selfRef) endif
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 endif
endEVENT endEVENT
Event OnEnterBleedout() Event OnGetUp(ObjectReference akFurniture)
; Debug.Trace("dude im bleeeding out" ) Actor actorRef = GetTargetActor()
if doOnce == 0
selfRef.PlaySubGraphAnimation( "KillFX" ) if ! actorRef
wait(2.0) return
;USKP 2.0.1 - If the 3D isn't loaded, don't case. endif
if( selfRef.Is3DLoaded() )
crSprigganHeal01.Cast(selfRef) SprigganFXAttachEffect.Play(actorRef, -1)
EndIf actorRef.PlaySubGraphAnimation("Revive")
selfRef.setActorValue("variable07",1) endEvent
selfRef.evaluatePackage()
wait(1.0) EVENT onDying(actor myKiller)
selfRef.PlaySubGraphAnimation( "Revive" ) GotoState("Dying")
doOnce = 1
endIf
ENDEVENT ENDEVENT
;----------------------------------------------------------------- EVENT onDeath(actor myKiller)
; Added by USSEP 4.1.5 for Bug #14445: GotoState("Dying")
;----------------------------------------------------------------- endevent
Event OnAnimationEvent (ObjectReference akSource, string asEventName) Event OnEnterBleedout()
;do nothing if bBledout
EndEvent 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