#include "prc_inc_sp_tch"
#include "prc_add_spell_dc"
void main()
{
    // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
    if (!X2PreSpellCastCode()) return;

    PRCSetSchool(SPELL_SCHOOL_CONJURATION);

    object oTarget = PRCGetSpellTargetObject();



    if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
    {
        // Fire cast spell at event for the specified target
        PRCSignalSpellEvent(oTarget);

        int CasterLvl = PRCGetCasterLevel();

        if (!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl+SPGetPenetr()))
        {
            // Make touch attack, saving result for possible critical
            int nTouchAttack = PRCDoRangedTouchAttack(oTarget);;
            if (nTouchAttack > 0)
            {
                // Impact vfx.
                SPApplyEffectToObject(DURATION_TYPE_INSTANT,
                    EffectVisualEffect(VFX_IMP_ACID_S), oTarget);

                if (!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, PRCGetSaveDC(oTarget,OBJECT_SELF),
                    SAVING_THROW_TYPE_SPELL))
                {
                    float fDuration = PRCGetMetaMagicDuration(MinutesToSeconds(CasterLvl));

                    // Target cannot move no matter what.
                    effect eEffect = EffectCutsceneImmobilize();
                    eEffect = EffectLinkEffects(eEffect,
                        EffectVisualEffect(VFX_DUR_GLOW_LIGHT_GREEN));
                    SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, fDuration,TRUE,-1,CasterLvl);
                    // If target is medium or smaller may not take any actions either.
                    if (PRCGetCreatureSize(oTarget) <= CREATURE_SIZE_MEDIUM)
                        SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectParalyze(),
                            oTarget, fDuration,TRUE,-1,CasterLvl);
                }
                else
                {
                    // Show that the target made it's save.
                    SPApplyEffectToObject(DURATION_TYPE_INSTANT,
                        EffectVisualEffect(VFX_IMP_REFLEX_SAVE_THROW_USE), oTarget);
                }
            }
        }
    }

    PRCSetSchool();
}