enderalse/source/scripts/dragonpriestactorscript.psc

100 lines
3.2 KiB
Plaintext

Scriptname DragonPriestActorScript extends ActiveMagicEffect
{Abilities and FX for Dragon Priest}
import debug
armor property DragonPriestArmor01 auto
{Glowing cape and mouth streams armor}
VisualEffect Property DragonPriestParticlesFX Auto
{Floor based stream of upward particles}
VisualEffect Property DragonPriestEyeGlowFX Auto
{eye glow fx}
VisualEffect Property FXfallingSandDragonPriestEffect Auto
{falling sand from holes fx}
Explosion Property FXDragonPriestSmallExplosion Auto
{dust and fabric explosion played on state change}
Explosion Property FXDragonPriestLargeExplosion Auto
{large dust fabric and metal bits explosion played on dying}
Activator property AshPileObject auto
{The object we use as a pile.}
int doOnce = 0 ;Stops on hit from spamming
Actor selfRef ;local pointer to the curren dragon priest
EVENT OnEffectStart(Actor Target, Actor Caster)
selfRef = caster ;local pointer to the curren dragon priest
;Added by USKP to prevent this effect from appearing on the player.
If selfRef == Game.GetPlayer()
Dispel()
return
EndIf
;USSEP 4.1.5 Bug #13749: added this line:
USSEP_RegisterForAnimationEvents (selfRef)
if (selfRef.GetSleepState() == 3)
; Debug.Trace("DP is sleeping! 3")
else
;Play all of the magic fx
selfRef.equipitem(DragonPriestArmor01)
DragonPriestParticlesFX.play(selfRef, -1)
DragonPriestEyeGlowFX.play(selfRef, -1)
endIf
ENDEVENT
Event OnGetUp(ObjectReference akFurniture)
; Debug.Trace("Dragon preist just got up from " )
;Play all of the magic fx
;Added by USKP to prevent this effect from appearing on the player.
If selfRef == Game.GetPlayer()
Dispel()
return
EndIf
selfRef.equipitem(DragonPriestArmor01)
DragonPriestParticlesFX.play(selfRef, -1)
DragonPriestEyeGlowFX.play(selfRef, -1)
endEvent
Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
;When hit incriments and plays the trasition to hirt state fx. Currently plays on the 5th hit. To be redone by design to work on health
doOnce = doOnce + 1
if doOnce == 5
selfRef.placeAtMe(FXDragonPriestSmallExplosion, 1)
DragonPriestParticlesFX.Stop(selfRef)
FXfallingSandDragonPriestEffect.play(selfRef, -1)
selfRef.PlaySubGraphAnimation( "stage2" )
doOnce = doOnce + 1
endIf
ENDEVENT
EVENT OnDying(Actor akKiller)
; play all of the many dying fx and clean up the magic fx
selfRef.placeAtMe(FXDragonPriestLargeExplosion, 1)
selfRef.PlaySubGraphAnimation( "stage3" )
selfRef.unequipitem(DragonPriestArmor01)
DragonPriestEyeGlowFX.Stop(selfRef)
;place ash pile
utility.wait(1.0)
selfRef.AttachAshPile(AshPileObject)
utility.wait(2.0)
FXfallingSandDragonPriestEffect.Stop(selfRef)
ENDEVENT
;-----------------------------------------------------------------
; Added by USSEP 4.1.5 for Bug #13749
;-----------------------------------------------------------------
Event OnAnimationEvent (ObjectReference akSource, string asEventName)
;do nothing
EndEvent
function USSEP_RegisterForAnimationEvents (actor actorRef)
if actorRef
RegisterForAnimationEvent (actorRef, "stage2")
RegisterForAnimationEvent (actorRef, "stage3")
endif
endFunction