//::///////////////////////////////////////////////
//:: User Defined Henchmen Script
//:: NW_CH_ACD
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    The most complicated script in the game.
    ... ever
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: March 18, 2002
//:://////////////////////////////////////////////

#include "x2_inc_spellhook"
#include "nw_i0_generic"

void RelayModeToAssociates(int nActionMode, int nValue, object oSelf)
{
    SetActionMode(oSelf, nActionMode, nValue);
    object oTest = GetAssociate(ASSOCIATE_TYPE_FAMILIAR);
    if(GetIsObjectValid(oTest))
        SetActionMode(oTest, nActionMode, nValue);

    oTest = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION);
    if(GetIsObjectValid(oTest))
        SetActionMode(oTest, nActionMode, nValue);

    oTest = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
    if(GetIsObjectValid(oTest))
        SetActionMode(oTest, nActionMode, nValue);

    oTest = GetAssociate(ASSOCIATE_TYPE_DOMINATED);
    if(GetIsObjectValid(oTest))
        SetActionMode(oTest, nActionMode, nValue);
}

void main()
{
    object oSelf = OBJECT_SELF;
    int nEvent = GetUserDefinedEventNumber();

    ExecuteScript("prc_onuserdef", oSelf);

    //HenchAI start
    if(!GetIsFighting(oSelf))
    {
        if(nEvent == 20000 + ACTION_MODE_STEALTH)
        {
            if(!GetLocalInt(oSelf, "HenchDisableAutoHide"))
            {
                int bStealth = GetActionMode(GetMaster(), ACTION_MODE_STEALTH);
                RelayModeToAssociates(ACTION_MODE_STEALTH, bStealth, oSelf);
            }
        }
        else if(nEvent == 20000 + ACTION_MODE_DETECT)
        {
            int bDetect = GetActionMode(GetMaster(), ACTION_MODE_DETECT);
            RelayModeToAssociates(ACTION_MODE_DETECT, bDetect, oSelf);
        }
    }
    //HenchAI end

    // * If a creature has the integer variable X2_L_CREATURE_NEEDS_CONCENTRATION set to TRUE
    // * it may receive this event. It will unsommon the creature immediately
    if(nEvent == X2_EVENT_CONCENTRATION_BROKEN)
    {
        effect eVis = EffectVisualEffect(VFX_IMP_UNSUMMON);
        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oSelf));
        FloatingTextStrRefOnCreature(84481, GetMaster(oSelf));
        DestroyObject(oSelf, 0.1f);
    }
}