parent
1aae79648f
commit
fd7a9aaa3c
2 changed files with 112 additions and 89 deletions
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…
Reference in new issue