enderalse/source/scripts/reanimateashpile.psc

129 lines
3.3 KiB
Plaintext

Scriptname ReanimateAshPile extends ActiveMagicEffect
{Scripted effect for on death ash pile}
import debug
import FormList
;======================================================================================;
; PROPERTIES /
;=============/
float property fDelay = 0.75 auto
{time to wait before Spawning Ash Pile}
float property fDelayEnd = 1.65 auto
{time to wait before Removing Base Actor}
float property ShaderDuration = 0.00 auto
{Duration of Effect Shader.}
Activator property AshPileObject auto
{The object we use as a pile.}
EffectShader property MagicEffectShader auto
{The Effect Shader we want.}
Bool property bSetAlphaZero = True auto
{The Effect Shader we want.}
FormList Property ImmunityList auto
{If the target is in this list, they will not be disintegrated.}
Bool property bSetAlphaToZeroEarly = False Auto
{Use this if we want to set the acro to invisible somewhere before the effect shader is done.}
Keyword Property ActorTypeDaedra Auto
Keyword Property ActorTypeFamiliar Auto
bool Property AshPileCreated Auto
;======================================================================================;
; VARIABLES /
;=============/
actor Victim
race VictimRace
bool TargetIsImmune = False
;=============
; FUNCTIONS /
;=============
bool function IsSummoned()
if Victim.HasKeyword(ActorTypeFamiliar) || Victim.HasKeyword(ActorTypeDaedra)
return true
; ; debug.trace("ReanimateAshPile: IsSummoned True")
else
return false
; ; debug.trace("ReanimateAshPile: IsSummoned False")
endIf
endFunction
function TurnToAsh()
;trace("victim just died")
victim.SetCriticalStage(Victim.CritStage_DisintegrateStart)
; victim.SetAlpha (0.99,False)
;USKP 2.0.3 - Victim needs to have 3D loaded.
if( Victim.Is3DLoaded() )
if MagicEffectShader != none
MagicEffectShader.play(Victim,ShaderDuration)
endif
if bSetAlphaToZeroEarly
victim.SetAlpha (0.0,True)
endif
EndIf
utility.wait(fDelay)
Victim.AttachAshPile(AshPileObject)
; AshPileRef = AshPileObject
; AshPileRef.SetAngle(0.0,0.0,(Victim.GetAngleZ()))
utility.wait(fDelayEnd)
;USKP 2.0.3 - Victim needs to have 3D loaded.
if( Victim.Is3DLoaded() )
if MagicEffectShader != none
MagicEffectShader.stop(Victim)
endif
if bSetAlphaZero == True
victim.SetAlpha (0.0,True)
EndIf
EndIf
victim.SetCriticalStage(Victim.CritStage_DisintegrateEnd)
endFunction
;======================================================================================;
; EVENTS /
;=============/
Event OnEffectStart(Actor Target, Actor Caster)
victim = target
; debug.trace("ReanimateAshpile: victim == " + victim + ", is this right?")
if Victim.IsCommandedActor() == True && IsSummoned() == False
TargetIsImmune = False
else
TargetIsImmune = True
endIf
EndEvent
Event OnDying(Actor Killer)
; ; debug.trace("ReanimateAshPile TargetIsImmune:" + TargetIsImmune)
if TargetIsImmune == False && AshPileCreated == False
TurnToAsh()
AshPileCreated = True
endif
EndEvent
Event OnEffectFinish(Actor Target, Actor Caster)
if TargetIsImmune == False && AshPileCreated == False
;USLEEP 3.0.1 - Prevent thralls from being purged before they died
if( !Target.IsCommandedActor() )
TurnToAsh()
AshPileCreated = True
endif
endif
EndEvent