void main()
{
    object oPC = (GetPCSpeaker());
    object oFirstMember = GetPCSpeaker();
    object oPartyMember = GetFirstFactionMember(oFirstMember, TRUE);
    object oArea = GetArea(oPC);
    object oDest = GetObjectByTag("WP_CASTLETELEPORT");
    location lDest = GetLocation(oDest);
    object oAnimal = GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oPC);
    int iAnimal = GetIsObjectValid(oAnimal);
    object oDominated = GetAssociate(ASSOCIATE_TYPE_DOMINATED, oPC);
    int iDominated = GetIsObjectValid(oDominated);
    object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oPC);
    int iFamiliar = GetIsObjectValid(oFamiliar);
    object oHenchman = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
    int iHenchman = GetIsObjectValid(oHenchman);
    SetLocalInt(OBJECT_SELF, "duration", DURATION_TYPE_TEMPORARY);
    int duration = GetLocalInt(OBJECT_SELF, "duration");
    SetLocalInt(OBJECT_SELF, "vfx", VFX_IMP_AC_BONUS);
    int vfx = GetLocalInt(OBJECT_SELF, "vfx");
    effect eEffect = EffectVisualEffect(vfx);
    {
        while (GetIsObjectValid(oPartyMember) && (GetArea(oPartyMember) == oArea))
            {
            object oPartyMemberArea = GetArea(oPartyMember);
            if (!GetIsDead (oPartyMember))// Dead members will be skipped
            {
            // Send the party member to the destination
            AssignCommand(oPartyMember, ClearAllActions());
            ApplyEffectToObject(duration, eEffect, oPartyMember, 4.0);
            DelayCommand(2.0, AssignCommand(oPartyMember, JumpToLocation (lDest)));
            }
        oPartyMember = GetNextFactionMember (oFirstMember, TRUE); //Set oPartyMember to the next person in the party.
        }
    // Last but not least, send the PC who clicked in the first place.
    // The script will go here right away if the party only has one person in it.
    AssignCommand(oFirstMember, ClearAllActions());
    ApplyEffectToObject(duration, eEffect, oFirstMember, 4.0);
    ApplyEffectToObject(duration, eEffect, OBJECT_SELF, 4.0);
    DelayCommand(2.0, AssignCommand(oFirstMember, JumpToLocation (lDest)));
    }

            if (iAnimal == TRUE && (GetArea(oAnimal) == oArea))
            {
              ApplyEffectToObject(duration, eEffect, oAnimal, 4.0);
              DelayCommand(2.0, AssignCommand( oAnimal, JumpToLocation(lDest)));
            }
            if (iDominated == TRUE && (GetArea(oDominated) == oArea))
            {
              ApplyEffectToObject(duration, eEffect, oDominated, 4.0);
              DelayCommand(2.0, AssignCommand( oDominated, JumpToLocation(lDest)));
            }
            if (iFamiliar == TRUE && (GetArea(oFamiliar) == oArea))
            {
              ApplyEffectToObject(duration, eEffect, oFamiliar, 4.0);
              DelayCommand(2.0, AssignCommand( oFamiliar, JumpToLocation(lDest)));
            }
            if (iHenchman == TRUE && (GetArea(oHenchman) == oArea))
            {
              ApplyEffectToObject(duration, eEffect, oHenchman, 4.0);
              DelayCommand(2.0, AssignCommand( oHenchman, JumpToLocation(lDest)));
            }
        }



