///////////////////////////////////////////////////////////////////////////
//
// DoEnergyImmunity - Apply a 24 hour immunity to one element to the
// target.
//		nDamageType - the damage type (DAMAGE_TYPE_xxx) to be immune to
//		nVfx - The visual effect to use at cast time.
//
///////////////////////////////////////////////////////////////////////////

#include "prc_inc_spells"

void DoEnergyImmunity (int nDamageType, int nVfx)
{
    PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);

    object oTarget = PRCGetSpellTargetObject();

    // Determine the duration
    float fDuration = PRCGetMetaMagicDuration(HoursToSeconds(24));

    // Build a list of the duration effects which includes the actually immunity
    // effect and all visual effects.
    effect eList = EffectDamageResistance(nDamageType, 9999, 0);
    effect eDur = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS);
    eList = EffectLinkEffects(eList, eDur);
    eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
    eList = EffectLinkEffects(eList, eDur);

    // Fire cast spell at event for the specified target
    PRCSignalSpellEvent(oTarget, FALSE, SPELL_ENERGY_IMMUNITY);

    SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eList, oTarget, fDuration, TRUE, -1, PRCGetCasterLevel(OBJECT_SELF));
    SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(nVfx), oTarget);

    PRCSetSchool();
}

// Test main
//void main(){}