//::///////////////////////////////////////////////
//:: Holy Aura
//:: NW_S0_HolyAura.nss
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    The cleric casting this spell gains +4 AC and
    +4 to saves. Is immune to Mind-Affecting Spells
    used by evil creatures and gains an SR of 25
    versus the spells of Evil Creatures
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Sept 28, 2001
//:://////////////////////////////////////////////

#include "prc_alterations"

void main()
{
    //--------------------------------------------------------------------------
    // GZ: Make sure this aura is only active once
    //--------------------------------------------------------------------------
    PRCRemoveSpellEffects(GetSpellId(),OBJECT_SELF,PRCGetSpellTargetObject());

    //Declare major variables
    object oTarget = PRCGetSpellTargetObject();
    int nDuration = 10;

    effect eVis = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR);
    effect eAC = EffectACIncrease(4, AC_DEFLECTION_BONUS);
    effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, 4);
    effect eImmune = EffectImmunity(IMMUNITY_TYPE_MIND_SPELLS);
    effect eSR = EffectSpellResistanceIncrease(25);
    effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR);
    effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
    effect eEvil = EffectDamageShield(6, DAMAGE_BONUS_1d8, DAMAGE_TYPE_DIVINE);

    // * make them versus the alignment
    eImmune = VersusAlignmentEffect(eImmune, ALIGNMENT_ALL, ALIGNMENT_EVIL);
    eSR = VersusAlignmentEffect(eSR,ALIGNMENT_ALL, ALIGNMENT_EVIL);
    eAC =  VersusAlignmentEffect(eAC,ALIGNMENT_ALL, ALIGNMENT_EVIL);
    eSave = VersusAlignmentEffect(eSave,ALIGNMENT_ALL, ALIGNMENT_EVIL);
    eEvil = VersusAlignmentEffect(eEvil,ALIGNMENT_ALL, ALIGNMENT_EVIL);

    // * make them versus the racial type
    eImmune = VersusRacialTypeEffect(eImmune, RACIAL_TYPE_OUTSIDER);
    eSR = VersusRacialTypeEffect(eSR, RACIAL_TYPE_OUTSIDER);
    eAC =  VersusRacialTypeEffect(eAC, RACIAL_TYPE_OUTSIDER);
    eSave = VersusRacialTypeEffect(eSave, RACIAL_TYPE_OUTSIDER);
    eEvil = VersusRacialTypeEffect(eEvil, RACIAL_TYPE_OUTSIDER);

    //Link effects
    effect eLink = EffectLinkEffects(eImmune, eSave);
    eLink = EffectLinkEffects(eLink, eAC);
    eLink = EffectLinkEffects(eLink, eSR);
    eLink = EffectLinkEffects(eLink, eDur);
    eLink = EffectLinkEffects(eLink, eDur2);
    eLink = EffectLinkEffects(eLink, eEvil);

    //Fire cast spell at event for the specified target
    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));

    //Apply the VFX impact and effects
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
}