//Place on exit of an area

//Note: This is a very important script, it should go on the exit event of
//all area you create.  (with some exceptions)  This reduces lagg too!

// Set this to FALSE if you do not want placeable inventories cleared
int nClearPlaceInv = FALSE;
// Set the amount of time to wait for cleaning here in seconds
float fDelayTime = 5.0;

void CleanArea(object oArea)
{
  object oTrash = GetFirstObjectInArea(oArea);
  object oInvItem;

  //Check for PCs
  object oPC = GetFirstPC();
  while (GetIsObjectValid(oPC)) {
    if  (GetArea(oPC) == oArea) {
      DeleteLocalInt(oArea, "CleanArea");
      return;
    }
    oPC = GetNextPC();
  }

   while(GetIsObjectValid(oTrash)) {
     string sTagPrefix = GetStringLeft(GetTag(oTrash), 15);
     // Clear remains, dropped items
     if(GetObjectType(oTrash)==OBJECT_TYPE_ITEM ||
        GetStringLowerCase(GetName(oTrash)) == "remains") {
          AssignCommand(oTrash, SetIsDestroyable(TRUE));
          if (GetHasInventory(oTrash)) {
            oInvItem = GetFirstItemInInventory(oTrash);
            while(GetIsObjectValid(oInvItem)) {
              DestroyObject(oInvItem,0.0);
              oInvItem = GetNextItemInInventory(oTrash);
            }
          }
          else DestroyObject(oTrash, 0.0);
      }
      // Clear placeable inventories
      if(GetObjectType(oTrash)==OBJECT_TYPE_PLACEABLE &&
         nClearPlaceInv == TRUE) {
        if (GetHasInventory(oTrash))
        {
          object oInvItem = GetFirstItemInInventory(oTrash);
          while(GetIsObjectValid(oInvItem)) {
            DestroyObject(oInvItem,0.0);
            oInvItem = GetNextItemInInventory(oTrash);
          }
        }
      }
      // Clear encounters
      else if (GetIsEncounterCreature(oTrash) ||
               sTagPrefix == "PWFSE_SPAWNERID")
      {
        AssignCommand(oTrash, SetIsDestroyable(TRUE));
        DestroyObject(oTrash, 0.0);
      }

      else if (GetTag(oTrash) == "ZEP_PONY_005")
      {
       AssignCommand(oTrash, SetIsDestroyable(TRUE));
        DestroyObject(oTrash, 0.0);
      }

      else if (GetTag(oTrash) == "Pack_Pony")
      {
        AssignCommand(oTrash, SetIsDestroyable(TRUE));
        DestroyObject(oTrash, 0.0);
      }



      oTrash = GetNextObjectInArea(oArea);
   }
   DeleteLocalInt(oArea, "CleanArea");
}

void main()
{
  object oArea = OBJECT_SELF;
  object oPC = GetExitingObject();
  if (!GetIsPC(oPC)) return;

object oItem;
int nSlot;

//Unequip all items when the player exits the arena.
    for (nSlot=0; nSlot<NUM_INVENTORY_SLOTS; nSlot++)
    {
        oItem=GetItemInSlot(nSlot, oPC);

        //unequip if valid
        if (GetIsObjectValid(oItem))
        {
        //Unequip all arena items instantly!
        if(GetTag(oItem)=="arena")
        DelayCommand(5.0, AssignCommand(oPC, ActionUnequipItem(oItem)));
        }
    }


oItem = GetFirstItemInInventory(oPC);

//Remove the arena token from the exiting PC
while (GetIsObjectValid(oItem))
   {
   if (GetTag(oItem)=="arenatoken") DestroyObject(oItem);

   oItem = GetNextItemInInventory(oPC);
   }

  if (GetLocalInt(oArea, "CleanArea") != 1)
  {
    DelayCommand(fDelayTime, CleanArea(oArea));
    SetLocalInt(oArea, "CleanArea", 1);
  }
}