diff --git a/scripts/sprigganfxscript.pex b/scripts/sprigganfxscript.pex index aed1adf4..fc7a34e4 100644 Binary files a/scripts/sprigganfxscript.pex and b/scripts/sprigganfxscript.pex differ diff --git a/source/scripts/sprigganfxscript.psc b/source/scripts/sprigganfxscript.psc index 978a0b32..c86bed7c 100644 --- a/source/scripts/sprigganfxscript.psc +++ b/source/scripts/sprigganfxscript.psc @@ -7,36 +7,35 @@ VisualEffect Property SprigganFXAttachEffect Auto Spell Property crSprigganHeal01 Auto Spell Property crSprigganCallCreatures Auto Idle Property FFselfIdle Auto -bool bBledout -bool bIsDead +bool bAnimEffects = true ;=============================================== auto state Alive - EVENT OnEffectStart(Actor Target, Actor Caster) - if Target == None - Return - EndIf - - If Target.IsDead() || Target == Game.GetForm(0x14) + event OnEffectStart(Actor Target, Actor Caster) + If ! Target || 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) + if bAnimEffects + bAnimEffects = false + Target.PlaySubGraphAnimation("KillFX") endif - ENDEVENT - - ; May fire when dispelled with a script or console - Event OnEffectFinish(Actor akTarget, Actor akCaster) + + If Target.IsDead() + GotoState("DoNothing") + Dispel() + EndIf + endevent + + event OnEffectFinish(Actor akTarget, Actor akCaster) GotoState("DoNothing") SprigganFXAttachEffect.Stop(akTarget) - endEvent + endevent - EVENT onCombatStateChanged(Actor akTarget, int aeCombatState) + event OnCombatStateChanged(Actor akTarget, int aeCombatState) Actor actorRef = GetTargetActor() if ! actorRef || ! actorRef.Is3DLoaded() @@ -53,92 +52,98 @@ auto state Alive endif if aeCombatState == 1 + if ! bAnimEffects + bAnimEffects = true + actorRef.PlaySubGraphAnimation("Revive") + endif 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 + Utility.Wait(Utility.RandomFloat(1.0, 3.0)) + if GetState() == "Alive" + crSprigganCallCreatures.cast(actorRef, actorRef) + endif endif - - SprigganFXAttachEffect.Play(actorRef, -1) - actorRef.PlaySubGraphAnimation("Revive") - endEvent + endevent - EVENT onDying(actor myKiller) + event onDying(actor myKiller) GotoState("Dying") - ENDEVENT + endevent - EVENT onDeath(actor myKiller) + event onDeath(actor myKiller) GotoState("Dying") endevent - Event OnEnterBleedout() - if bBledout - return - endif - bBledout = true - RegisterForSingleUpdate(2.0) - ENDEVENT - - ; Heals itself - event OnUpdate() + event OnEnterBleedout() Actor actorRef = GetTargetActor() - - if ! actorRef + SprigganFXAttachEffect.Stop(actorRef) + + if actorRef.GetActorValue("Variable07") + RegisterForAnimationEvent(actorRef, "BleedoutStop") return endif - if actorRef.Is3DLoaded() + actorRef.SetActorValue("Variable07", 1) + Utility.Wait(Utility.RandomFloat(2.0, 3.5)) + + if GetState() == "Alive" + RegisterForAnimationEvent(actorRef, "BleedoutStop") crSprigganHeal01.Cast(actorRef) - actorRef.setActorValue("variable07",1) - Utility.Wait(Utility.RandomFloat(1.5, 2.5)) - actorRef.evaluatePackage() + actorRef.EvaluatePackage() endif endevent + + event OnAnimationEvent(ObjectReference akSource, string asEventName) + UnregisterForAnimationEvent(akSource, asEventName) + SprigganFXAttachEffect.Play(akSource) + endevent endstate state Dying + event OnBeginState() - RegisterForSingleUpdate(Utility.RandomFloat(2.5, 4.5)) + RegisterForSingleUpdate(Utility.RandomFloat(2.0, 3.5)) + UnregisterForAnimationEvent(GetTargetActor(), "BleedoutStop") endevent - Event OnEffectFinish(Actor akTarget, Actor akCaster) - GotoState("DoNothing") - akTarget.PlaySubGraphAnimation("KillFX") - endEvent - event OnCellAttach() RegisterForSingleUpdate(1.0) endevent + event OnCellDetach() + UnregisterForUpdate() + GotoState("Dead") + SprigganFXAttachEffect.Stop(GetTargetActor()) + Dispel() + endevent + event OnUpdate() - if bIsDead - Dispel() - return - endif - - bIsDead = true - Actor actorRef = GetTargetActor() + SprigganFXAttachEffect.Stop(GetTargetActor()) + GotoState("Dead") + RegisterForSingleUpdate(Utility.RandomFloat(3.0, 7.5)) + endevent - if actorRef - SprigganFXAttachEffect.Stop(actorRef) +endstate + +state Dead + + event OnUpdate() + Dispel() + endevent + + event OnEffectFinish(Actor akTarget, Actor akCaster) + GotoState("DoNothing") + if bAnimEffects + bAnimEffects = false + akTarget.PlaySubGraphAnimation("KillFX") endif - - RegisterForSingleUpdate(Utility.RandomFloat(3.0, 7.5)) endevent + endstate state DoNothing endstate ; Compiler wants it here -Event OnEnterBleedout() -ENDEVENT +event OnEnterBleedout() +endevent