/*:://////////////////////////////////////////////
//:: Spell Name Magic Circle against Chaos
//:: Spell FileName PHS_S_MagicCirC
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
    Abjuration [Lawful]
    Level: Clr 3, Law 3, Pal 3, Sor/Wiz 3
    Components: V, S, DF
    Casting Time: 1 standard action
    Range: Touch
    Area: 3.33-M.-radius emanation from touched creature
    Duration: 10 min./level
    Saving Throw: Will negates (harmless)
    Spell Resistance: No; see text

    All creatures within the area gain the effects of a protection from chaos
    spell, gaining +2 AC, +2 saves and immunity to possession by chaotic
    creatures.

    In addition, no nonlawful summoned creatures can enter the area either.
    You must overcome a creature’s spell resistance in order to keep it at bay,
    but the deflection and resistance bonuses and the protection from mental
    control apply regardless of enemies’ spell resistance. If the summoned
    creature is already in the area when the spell then they ignore the
    resistance check. The protection against summoned creatures ends if the
    warded creature makes an attack against or tries to force the barrier
    against the blocked creature.

    This spell is not cumulative with protection from chaos and vice versa.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
    AOE placed on the target.

    The On Enter will do pushback and apply effects. It applies it to ALL creatures.

    Only outsiders and summoned creatures will be affected by the pushback.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/

#include "PHS_INC_SPELLS"

void main()
{
    // Spell hook check.
    if(!PHS_SpellHookCheck(PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS)) return;

    //Declare major variables
    object oCaster = OBJECT_SELF;
    object oTarget = GetSpellTargetObject();
    int nCasterLevel = PHS_GetCasterLevel();
    int nMetaMagic = PHS_GetMetaMagicFeat();

    // 10 minutes/level duration
    float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel * 10, nMetaMagic);

    // Declare effects
    effect eAOE = EffectAreaOfEffect(PHS_AOE_MOB_MAGCIR_CHAOS);

    // Signal spell cast at event
    PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS, FALSE);

    // Remove previous castings
    PHS_RemoveSpecificEffectFromSpell(EFFECT_TYPE_AREA_OF_EFFECT, PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS, oTarget);

    // Set local integer so that the first ones will not be affected, which
    // is removed after 1.0 seconds.
    string sLocal = PHS_MOVING_BARRIER_START + IntToString(PHS_SPELL_MAGIC_CIRCLE_AGAINST_CHAOS);
    SetLocalInt(oCaster, sLocal, TRUE);
    DelayCommand(1.0, DeleteLocalInt(oCaster, sLocal));

    // Apply effects
    PHS_ApplyDuration(oTarget, eAOE, fDuration);
}