Combat HandleCreatureDisappear

From Dragon Age Toolset Wiki
Jump to: navigation, search

Called by:

Calls:

Parameters:

Variables:

Returns:

Used for:

// Handles any combat related logic for when a creature disappears from combat. This function should be run
// at 2 cases both for a player object and a creature object:
// 1. Disappear event
// 2. Appear event when the hostile creature turned non-hostile
void Combat_HandleCreatureDisappear(object oCreature, object oDisappearer)
{
    #ifdef DEBUG
    Log_Trace(LOG_CHANNEL_COMBAT,"Combat_HandleCreatureDisappeart","creature: " + GetTag(oCreature) + ", disappearer: " + GetTag(oDisappearer));
    #endif
 
    if(IsFollower(oCreature))
    {
        AI_Threat_UpdateEnemyDisappeared(oCreature, oDisappearer);
 
        // ----------------------------------------------------------------------
        // If the party does no longer perceive any hostiles....
        // ----------------------------------------------------------------------
        if (!IsPartyPerceivingHostiles(oCreature))
        {
 
            if (!IsPartyDead())
            {
                #ifdef DEBUG
                Log_Trace(LOG_CHANNEL_COMBAT, "Combat_HandleCreatureDisappear", "STOPPING COMBAT FOR PARTY!");
                #endif
 
                SSPlaySituationalSound(GetRandomPartyMember(),SOUND_SITUATION_END_OF_COMBAT);
 
                DelayEvent(3.0f, GetModule(), Event(EVENT_TYPE_DELAYED_GM_CHANGE));
            }
        }
    }
    else // non party members
    {
        AI_Threat_UpdateEnemyDisappeared(oCreature, oDisappearer);
        if (!IsPerceivingHostiles(oCreature) && GetCombatState(oCreature) == TRUE)
        {
            #ifdef DEBUG
            Log_Trace(LOG_CHANNEL_COMBAT, "Combat_HandleCreatureDisappear", "STOPPING COMBAT FOR NORMAL CREATURE!");
            #endif
            SetCombatState(oCreature,FALSE);
 
            // Added to make a COMBAT_END event
            // FAB 9/4
            event evCombatEnds = Event(EVENT_TYPE_COMBAT_END);
            //evCombatEnds = SetEventInteger(evCombatEnds, 0, bcombatstate);
            SignalEvent(oCreature, evCombatEnds);
        }
    }
}