int GetNextCloakIndex( object oCloak)
{
  int iIndex = GetItemAppearance( oCloak, ITEM_APPR_TYPE_SIMPLE_MODEL, 0);
  iIndex--;
  int iItemtype = GetBaseItemType( oCloak);

    if( iIndex == 98)
      iIndex = 64;
    else if( iIndex == 50)
      iIndex = 31;
    else if( iIndex == 0)
      iIndex = 99;

  return iIndex;
}

void main()
{

  object oPC = GetPCSpeaker();
  object oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC);

  object oPlayer = oPC;

  int iIndex = GetNextCloakIndex(oCloak);

  if( GetIsDM( oPlayer))
    SendMessageToPC( oPlayer, "The index is: " + IntToString( iIndex));

  object oNewCloak = CopyItemAndModify(oCloak, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, iIndex, TRUE);

  if( GetIsObjectValid(oNewCloak))
  {
    AssignCommand( oPlayer, ActionEquipItem(oNewCloak, INVENTORY_SLOT_CLOAK));
    DestroyObject( oCloak);
  }
  else
    DestroyObject( oNewCloak);
}