// Clears all actions and jumps the caller to the provided object.
// (Useful when this needs to be delayed.)

void ClearAndJumpToObject(object oDestination);

void ClearAndJumpToObject(object oDestination)
{
    ClearAllActions();
    JumpToObject(oDestination);
}


void main()
{
    int nHench;
    object oHench;
    effect eVFX;
    object oTarget;

    // Get the creature who triggered this event.
    object oPC = GetEnteringObject();

    // Only fire for (real) PCs.
    if ( !GetIsPC(oPC)  ||  GetIsDMPossessed(oPC) )
        return;

    // Find the location to which to teleport.
    oTarget = GetWaypointByTag(GetLocalString(OBJECT_SELF,"DESTINATION"));

    // Teleport the PC.
    eVFX = EffectVisualEffect(VFX_IMP_UNSUMMON);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oPC);
    DelayCommand(0.9, ExploreAreaForPlayer(GetArea(oPC), oPC, FALSE));
    DelayCommand(1.0, AssignCommand(oPC, ClearAndJumpToObject(oTarget)));
    DelayCommand(1.2, ExploreAreaForPlayer(GetArea(oPC), oPC, FALSE));

    // Also teleport associates (but no visual effect for them).
    oHench = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
    DelayCommand(1.1, AssignCommand(oHench, ClearAndJumpToObject(oTarget)));
    oHench = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
    DelayCommand(1.1, AssignCommand(oHench, ClearAndJumpToObject(oTarget)));
    oHench = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
    DelayCommand(1.1, AssignCommand(oHench, ClearAndJumpToObject(oTarget)));
    oHench = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oPC);
    DelayCommand(1.1, AssignCommand(oHench, ClearAndJumpToObject(oTarget)));

    // Support for multiple henchmen (includes horses).
    nHench = 1;
    oHench = GetHenchman(oPC, 1);
    while ( oHench != OBJECT_INVALID )
    {
        DelayCommand(1.1, AssignCommand(oHench, ClearAndJumpToObject(oTarget)));
        // Next henchman.
        oHench = GetHenchman(oPC, ++nHench);
    }

    // Apply a visual effect.
    eVFX = EffectVisualEffect(472);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oPC);
}