Scriptname _00E_A2_SkyfallNovaEnchSC extends activemagiceffect  

;=====================================================================================
;                                       EVENTS                                       
;=====================================================================================

Event OnEffectStart(Actor akTarget, Actor akCaster)

    akSelfActor = akTarget
    Utility.Wait(2.5)
    CastLightning()
    
EndEvent

Event OnUpdate()

    _00E_A2_SkyfallNovaBlackMageFX.SetValueInt(0)

EndEvent

;=====================================================================================
;                                       FUNCTIONS                                    
;=====================================================================================

Function CastLightning()

    float fHealthBefore = akSelfActor.GetActorValue("Health")
    
    ObjectReference CastMarker01 = akSelfActor.PlaceAtMe(AbilityMarker, 1)

    If akSelfActor.HasSpell(_00E_A1_RiftSP)
        CastMarker01.MoveTo(akSelfActor, 0.0, 0.0, akSelfActor.GetHeight() + 120.0)         
    Elseif akSelfActor.IsInInterior()
        CastMarker01.MoveTo(akSelfActor, 0.0, 0.0, akSelfActor.GetHeight() + 120.0)
    Else
        CastMarker01.MoveTo(akSelfActor, 0.0, 0.0, akSelfActor.GetHeight() + 120.0)
    EndIf
    
    _00E_A2_SkyfallBoltSP.RemoteCast(CastMarker01, PlayerREF, akSelfActor)
    CastMarker01.Delete()
    
    fDamage = _00E_A2_SkyfallBoltSP.GetNthEffectMagnitude(0)*0.5
            
    If  !PlayerREF.HasSpell(_00E_Affinity_AbBlackMage)  
    
        ShockFXShader.Play(akSelfActor)
        
    Else
    
        ParalyzeFxShader.Play(akSelfActor)
        AbsorbGreenTargetVFX01.Play(akSelfActor)
        
        If _00E_A2_SkyfallNovaBlackMageFX.GetValueInt() == 0
        
            _00E_A2_SkyfallNovaBlackMageFX.SetValueInt(1)
            ParalyzeFxShader.Play(PlayerREF)
            PlayerREF.PlaceAtMe(_00E_MAGEldritchShockExplosionTeleport)
            AbsorbGreenCastVFX01.Play(PlayerREF)
            
        EndIf
        
        AbsorbHealthAndMana(50)

    EndIf
    
    If akSelfActor.GetActorValue("Health") == fHealthBefore

        akSelfActor.DamageActorValue("Health", fDamage)
        _00E_A2_ShocknovaBoltM.Play(akSelfActor)

	EndIf
    
    Utility.Wait(2)
    
    ShockFXShader.Stop(akSelfActor)
    ParalyzeFxShader.Stop(akSelfActor)
    ParalyzeFxShader.Stop(PlayerREF)
    AbsorbGreenCastVFX01.Stop(PlayerREF)
    AbsorbGreenTargetVFX01.Stop(akSelfActor)
    RegisterForSingleUpdate(5)
    
EndFunction

Function AbsorbHealthAndMana(float fDamagePercentage)

    float fEnergyToAbsorb = (fDamage*(fDamagePercentage/100))
    PlayerREF.RestoreActorValue("Health", fEnergyToAbsorb)
    PlayerREF.RestoreActorValue("Magicka", fEnergyToAbsorb)

EndFunction

;=====================================================================================
;                                       PROPERTIES                                       
;=====================================================================================

float fDamage

Actor akSelfActor

Actor Property PlayerREF Auto

Static Property AbilityMarker Auto

EffectShader Property ShockFXShader Auto
EffectShader Property ParalyzeFxShader Auto

GlobalVariable Property _00E_A2_SkyfallNovaBlackMageFX Auto

Explosion Property _00E_MAGEldritchShockExplosionTeleport Auto

VisualEffect Property AbsorbGreenTargetVFX01 Auto
VisualEffect Property AbsorbGreenCastVFX01 Auto

Sound Property _00E_A2_ShocknovaBoltM Auto

Spell Property _00E_A2_SkyfallBoltSP Auto
Spell Property _00E_Affinity_AbBlackMage Auto
Spell Property _00E_A1_RiftSP Auto