void CreateBalor()
{
     CreateObject(OBJECT_TYPE_CREATURE, "balor_wild", GetSpellTargetLocation());
}

void main()
{
    int nMetaMagic = GetMetaMagicFeat();
    int nCasterLevel = GetCasterLevel(OBJECT_SELF);
    int nDuration = GetCasterLevel(OBJECT_SELF);
    effect eSummon;
    effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_GATE);
    location lSpellTargetLOC = GetSpellTargetLocation();
    object oPC = GetLastSpellCaster();

    if (nMetaMagic == METAMAGIC_EXTEND)
    {
        nDuration = nDuration *2;   //Duration is +100%
    }

    if(GetHasSpellEffect(SPELL_PROTECTION_FROM_EVIL) ||
       GetHasSpellEffect(SPELL_MAGIC_CIRCLE_AGAINST_EVIL) ||
       GetHasSpellEffect(SPELL_HOLY_AURA))
   {


    if(GetItemPossessedBy(oPC,"chokey2")!= OBJECT_INVALID)
    {
        eSummon = EffectSummonCreature("fho_dragon",VFX_FNF_SUMMONDRAGON,1.0);
        float fSeconds = RoundsToSeconds(nDuration);
        DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds));
        return;
    }

    else if(GetItemPossessedBy(oPC,"OHSKEY")!= OBJECT_INVALID)
    {
        eSummon = EffectSummonCreature("ohs_avatar",VFX_FNF_MYSTICAL_EXPLOSION,1.0);
        float fSeconds = RoundsToSeconds(nDuration);
        DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds));
        return;
    }

    else if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD && GetAlignmentLawChaos(oPC) == ALIGNMENT_LAWFUL)
    {
        eSummon = EffectSummonCreature("good_avatar",VFX_FNF_SUMMON_CELESTIAL,1.0);
        float fSeconds = RoundsToSeconds(nDuration);
        DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds));
        return;
    }

    else if (GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL && GetAlignmentLawChaos(oPC) == ALIGNMENT_CHAOTIC)
    {
        eSummon = EffectSummonCreature("evil_avatar",VFX_FNF_SUMMON_UNDEAD,1.0);
        float fSeconds = RoundsToSeconds(nDuration);
        DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds));
        return;
    }


        eSummon = EffectSummonCreature("balor_tame",VFX_FNF_SUMMON_GATE,1.0);
        float fSeconds = RoundsToSeconds(nDuration);
        DelayCommand(1.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds));
    }
    else
    {

        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lSpellTargetLOC);
        DelayCommand(1.0, CreateBalor());
    }

}