//::///////////////////////////////////////////////
//:: Disciple of Asmodeus Evil Authority
//:: prc_doa_evilauth.nss
//::///////////////////////////////////////////////
/*
    All evil aligned creatures of hit dice less than the DoA
    must make a will save vs 10 + class level + charisma
    or be dominated for 24 hours
*/
//:://////////////////////////////////////////////
//:: Created By: Stratovarius
//:: Created On: 28.2.2006
//:://////////////////////////////////////////////

#include "prc_alterations"
#include "prc_inc_spells"

void main()
{
    //Declare major variables
    object oPC = OBJECT_SELF;
    effect eMindVFX  = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
    effect eDominate = EffectCutsceneDominated();
    effect eLink;
    float fRadius = FeetToMeters(50.0);
    location lTarget = GetLocation(oPC);
    float fDuration = HoursToSeconds(24);
    int nDC = 10 + GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC) + GetAbilityModifier(ABILITY_CHARISMA, oPC);

    object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE);
    while(GetIsObjectValid(oTarget))
    {
        if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL && GetHitDice(oPC) > GetHitDice(oTarget))
        {
            // Let the AI know
            //PRCSignalSpellEvent(oTarget, TRUE, PRCGetSpellId(), oPC);
            //Make a saving throw check
            if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
            {
                // Extra domination immunity check - using EffectCutsceneDominated(), which normally bypasses
                if(!GetIsImmune(oTarget, IMMUNITY_TYPE_DOMINATE) && !GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS))
                {
                    // Determine effect and apply it
                    eLink = EffectLinkEffects(eMindVFX, PRCGetScaledEffect(eDominate, oTarget));
                    DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, PRCGetSpellId(), PRCGetCasterLevel(oPC)));
                    if(DEBUG) DoDebug("prc_doa_evilauth - Duration is " + FloatToString(fDuration));
                }
            }// end if - Save
        }

        //Select the next target within the spell shape.
        oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE, OBJECT_TYPE_CREATURE);
    }// end while - Target loop
}