//unit_inv - Manage Unit inventory
// 1 = non-equipped, 2 = equipped

void main()
{
    object oPC=GetPCSpeaker();
    object oUnit=OBJECT_SELF;
    object oChest=CreateObject(OBJECT_TYPE_PLACEABLE,"unit_inv",GetLocation(oUnit));
    int nParm=GetLocalInt(oPC,"nParm");
    object oItem;
    object oCopy;
    int nSS;
    SetLocalObject(oChest,"oPC",oPC);
    SetLocalObject(oChest,"oUnit",oUnit);
    SetLocalInt(oChest,"nParm",nParm);
    if (nParm==1)
    { // non-equipped
      oItem=GetFirstItemInInventory(oUnit);
      while(oItem!=OBJECT_INVALID)
      { // traverse inventory
        nSS=GetItemStackSize(oItem);
        CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        DelayCommand(0.5,DestroyObject(oItem));
        oItem=GetNextItemInInventory(oUnit);
      } // traverse inventory
    } // non-equipped
    else
    { // equipped
      oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_ARROWS);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_BELT,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_BELT);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_BOLTS);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_BOOTS,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_BOOTS);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_BULLETS);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_CHEST,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_CHEST);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_CLOAK,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_CLOAK);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_HEAD,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_HEAD);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_LEFTHAND);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_LEFTRING,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_LEFTRING);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_NECK,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_NECK);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_RIGHTHAND);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
      oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oUnit);
      if (oItem!=OBJECT_INVALID)
      { // slot has item
        nSS=GetItemStackSize(oItem);
        oCopy=CreateItemOnObject(GetResRef(oItem),oChest,nSS);
        SetLocalInt(oCopy,"nSlot",INVENTORY_SLOT_RIGHTRING);
        DelayCommand(0.1,DestroyObject(oItem));
      } // slot has item
    } // equipped
    AssignCommand(oPC,ClearAllActions(TRUE));
    AssignCommand(oPC,ActionInteractObject(oChest));
}