From fd7a9aaa3ccc9d015cc7e046e8812e3f5ac46f31 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Sat, 27 Jan 2024 02:10:55 +0100 Subject: [PATCH] Rewrote SprigganFXSCRIPT --- scripts/sprigganfxscript.pex | Bin 3062 -> 3697 bytes source/scripts/sprigganfxscript.psc | 201 ++++++++++++++++------------ 2 files changed, 112 insertions(+), 89 deletions(-) diff --git a/scripts/sprigganfxscript.pex b/scripts/sprigganfxscript.pex index 8e95f998271e494b041c5d30b509b93ceb69e263..aed1adf4199db427edc802769288b5b47364eb2c 100644 GIT binary patch literal 3697 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 Jy%1>l{ui@48HE4< diff --git a/source/scripts/sprigganfxscript.psc b/source/scripts/sprigganfxscript.psc index 024080a1..978a0b32 100644 --- a/source/scripts/sprigganfxscript.psc +++ b/source/scripts/sprigganfxscript.psc @@ -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 - - ;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." ) + if Target == None Return EndIf - ;USSEP 4.1.5 Bug #14445: added this line: - RegisterForAnimationEvent (selfRef, "KillFX") - RegisterForAnimationEvent (selfRef, "Revive") + If Target.IsDead() || Target == Game.GetForm(0x14) + GotoState("DoNothing") + Dispel() + return + EndIf - ;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() + EVENT onCombatStateChanged(Actor akTarget, int aeCombatState) + Actor actorRef = GetTargetActor() + + if ! actorRef || ! actorRef.Is3DLoaded() return - EndIf + endif + + if aeCombatState == 0 + if actorRef.IsDead() + GotoState("Dying") + return + endif + SprigganFXAttachEffect.Stop(actorRef) + 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 + 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 -; Debug.Trace("We just got up from " ) - SprigganFXAttachEffect.Play(selfRef, -1) - selfRef.PlaySubGraphAnimation( "Revive" ) + SprigganFXAttachEffect.Play(actorRef, -1) + actorRef.PlaySubGraphAnimation("Revive") endEvent - + + EVENT onDying(actor myKiller) + GotoState("Dying") + 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) + GotoState("Dying") + endevent + + Event OnEnterBleedout() + if bBledout + return + endif + bBledout = true + RegisterForSingleUpdate(2.0) ENDEVENT - EVENT onCombatStateChanged(Actor akTarget, int aeCombatState) - if aeCombatState == 1 - selfRef.playIdle(FFselfIdle) - utility.wait(3.0) - - ;USKP 2.0.1 - If the 3D isn't loaded, don't cast. - if( selfRef.Is3DLoaded() ) - crSprigganCallCreatures.cast(selfRef,selfRef) - EndIf + ; Heals itself + event OnUpdate() + Actor actorRef = GetTargetActor() + + if ! actorRef + return endif - endEVENT + + 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 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 - 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 -;----------------------------------------------------------------- -; Added by USSEP 4.1.5 for Bug #14445: -;----------------------------------------------------------------- +state DoNothing +endstate -Event OnAnimationEvent (ObjectReference akSource, string asEventName) - ;do nothing -EndEvent +; Compiler wants it here +Event OnEnterBleedout() +ENDEVENT