129 lines
3.3 KiB
Plaintext
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
|
|
|