/*
    Implicable Foe - Heartbeat
*/
#include "prc_alterations"

int GetIsDisabled(object oCreature);

void main()
{
    object oCreator = GetAreaOfEffectCreator();
    switch(GetCurrentAction(oCreator))
    {
    case ACTION_ANIMALEMPATHY:
    case ACTION_ATTACKOBJECT:
    case ACTION_CASTSPELL:
    case ACTION_CLOSEDOOR:
    case ACTION_COUNTERSPELL:
    case ACTION_DIALOGOBJECT:
    case ACTION_DISABLETRAP:
    case ACTION_DROPITEM:
    case ACTION_EXAMINETRAP:
    case ACTION_FLAGTRAP:
    case ACTION_FOLLOW:
    case ACTION_HEAL:
    case ACTION_ITEMCASTSPELL:
    case ACTION_KIDAMAGE:
    case ACTION_LOCK:
    case ACTION_MOVETOPOINT:
    case ACTION_OPENDOOR:
    case ACTION_OPENLOCK:
    case ACTION_PICKPOCKET:
    case ACTION_PICKUPITEM:
    case ACTION_RANDOMWALK:
    case ACTION_RECOVERTRAP:
    case ACTION_REST:
    case ACTION_SETTRAP:
    case ACTION_SIT:
    case ACTION_SMITEGOOD:
    case ACTION_TAUNT:
    case ACTION_USEOBJECT:
        FloatingTextStringOnCreature("Your concentration is broken.", oCreator, FALSE);
        DestroyObject(OBJECT_SELF);
        break;
    }
    if(GetIsDisabled(oCreator))
    {
        FloatingTextStringOnCreature("Your concentration is broken.", oCreator, FALSE);
        DestroyObject(OBJECT_SELF);
    }
}

int GetIsDisabled(object oCreature)
{
    int bReturn = FALSE;
    effect e = GetFirstEffect(oCreature);
    while(GetIsEffectValid(e))
    {
        switch(GetEffectType(e))
        {
        case EFFECT_TYPE_CHARMED:
        case EFFECT_TYPE_CONFUSED:
        case EFFECT_TYPE_CUTSCENE_PARALYZE:
        case EFFECT_TYPE_CUTSCENEIMMOBILIZE:
        case EFFECT_TYPE_DAZED:
        case EFFECT_TYPE_DOMINATED:
        case EFFECT_TYPE_ENTANGLE:
        case EFFECT_TYPE_FRIGHTENED:
        case EFFECT_TYPE_PARALYZE:
        case EFFECT_TYPE_PETRIFY:
        case EFFECT_TYPE_SLEEP:
        case EFFECT_TYPE_STUNNED:
            bReturn = TRUE;
            break;
        }
        e = GetNextEffect(oCreature);
    }
    if(GetIsDead(oCreature))
    {
        bReturn = TRUE;
    }
    return bReturn;
}