Scriptname SprigganFXSCRIPT extends ActiveMagicEffect {Attaches and controlss spriggan FX} ; Eddoursul 2024.01.27: Multi-stage dying, fixed the KillFX Papyrus warning VisualEffect Property SprigganFXAttachEffect Auto Spell Property crSprigganHeal01 Auto Spell Property crSprigganCallCreatures Auto Idle Property FFselfIdle Auto bool bBledout bool bIsDead ;=============================================== auto state Alive EVENT OnEffectStart(Actor Target, Actor Caster) if Target == None Return EndIf If Target.IsDead() || Target == Game.GetForm(0x14) GotoState("DoNothing") Dispel() return 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) GotoState("DoNothing") SprigganFXAttachEffect.Stop(akTarget) endEvent EVENT onCombatStateChanged(Actor akTarget, int aeCombatState) Actor actorRef = GetTargetActor() 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 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 EVENT onDeath(actor myKiller) GotoState("Dying") 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