1
Fork 0

Rewrote SprigganFXSCRIPT

development
Eddoursul 4 months ago
parent 1aae79648f
commit fd7a9aaa3c
  1. BIN
      scripts/sprigganfxscript.pex
  2. 193
      source/scripts/sprigganfxscript.psc

Binary file not shown.

@ -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) EVENT onCombatStateChanged(Actor akTarget, int aeCombatState)
;Added by USKP to prevent this effect from appearing on the player. Actor actorRef = GetTargetActor()
If selfRef == Game.GetPlayer()
Dispel() if ! actorRef || ! actorRef.Is3DLoaded()
return return
EndIf endif
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it if aeCombatState == 0
if( selfRef == None ) if actorRef.IsDead()
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." ) GotoState("Dying")
Return return
EndIf endif
SprigganFXAttachEffect.Stop(actorRef)
return
endif
; Debug.Trace("We just got up from " ) if aeCombatState == 1
SprigganFXAttachEffect.Play(selfRef, -1) SprigganFXAttachEffect.Play(actorRef, -1)
selfRef.PlaySubGraphAnimation( "Revive" ) 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 endEvent
EVENT onDying(actor myKiller)
GotoState("Dying")
ENDEVENT
EVENT onDeath(actor myKiller) EVENT onDeath(actor myKiller)
;(selfRef as actor).PlaySubGraphAnimation( "LeavesScared" ) GotoState("Dying")
;wait(10.0) endevent
;USKP 2.0 - Check for NONE and spit an error out to see if we can find it Event OnEnterBleedout()
if( selfRef == None ) if bBledout
Debug.TraceStack( "USKP error check: Spriggan called this as a NONE. Please report this error to the USKP team." ) return
Return endif
EndIf bBledout = true
selfRef.PlaySubGraphAnimation( "KillFX" ) RegisterForSingleUpdate(2.0)
wait(10.0)
SprigganFXAttachEffect.Stop(selfRef)
ENDEVENT ENDEVENT
EVENT onCombatStateChanged(Actor akTarget, int aeCombatState) ; Heals itself
if aeCombatState == 1 event OnUpdate()
selfRef.playIdle(FFselfIdle) Actor actorRef = GetTargetActor()
utility.wait(3.0)
;USKP 2.0.1 - If the 3D isn't loaded, don't cast. if ! actorRef
if( selfRef.Is3DLoaded() ) return
crSprigganCallCreatures.cast(selfRef,selfRef)
EndIf
endif endif
endEVENT
Event OnEnterBleedout() if actorRef.Is3DLoaded()
; Debug.Trace("dude im bleeeding out" ) crSprigganHeal01.Cast(actorRef)
if doOnce == 0 actorRef.setActorValue("variable07",1)
selfRef.PlaySubGraphAnimation( "KillFX" ) Utility.Wait(Utility.RandomFloat(1.5, 2.5))
wait(2.0) actorRef.evaluatePackage()
;USKP 2.0.1 - If the 3D isn't loaded, don't case. endif
if( selfRef.Is3DLoaded() ) endevent
crSprigganHeal01.Cast(selfRef)
EndIf endstate
selfRef.setActorValue("variable07",1)
selfRef.evaluatePackage() state Dying
wait(1.0) event OnBeginState()
selfRef.PlaySubGraphAnimation( "Revive" ) RegisterForSingleUpdate(Utility.RandomFloat(2.5, 4.5))
doOnce = 1 endevent
endIf
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
; Added by USSEP 4.1.5 for Bug #14445: endstate
;-----------------------------------------------------------------
Event OnAnimationEvent (ObjectReference akSource, string asEventName) ; Compiler wants it here
;do nothing Event OnEnterBleedout()
EndEvent ENDEVENT

Loading…
Cancel
Save