As I have said a few millions times I love Harbingers Haven Sandbox, it has a cool texture vending machine with lots of textures FOR FREE! Only draw back on that whole Sandbox is that you can’t run scripts there. Soooooo I have to sometimes go to another Sandbox and build that allows scripts. But gah! Then I don’t have my handy dandy textures :( so here’s a dilemma solver, on top of that if I’m ever at a friends house and they need a quick texture WABAM I’m the man for the job!
First Rezz a box with these measurements.
X: 1.500
Y: .500
Z: 2.500
That is a pretty decent size prim to see your textures with.
Now click the Contents Tab
Click New Script button and delete the default “Hello Avatar!” Script and copy and paste this one in it:
// set these to whatever values you wish
integer myChannel = 123;
float trigger_time = 2.0;
float idle_time = 10.0;
list menu = ["Get Texture"];
// used for controlling command entry
float elapsed = 0.0;
integer listenHandle;
// used for texture cycling
integer count;
integer i;
string texture_name;
// used to retrieve texture
key agent_key;
display(integer n)
{
llSetTexture(texture_name, ALL_SIDES);
llSetText(llGetObjectName() + "\n" + (string)(n+1) + " of " + (string)count + " - "
+ texture_name, <1.0,1.0,1.0>, 1.0);
}
get_texture()
{
llGiveInventory(agent_key, texture_name);
}
touch_hold()
{
elapsed = llGetAndResetTime();
llListenControl(listenHandle, TRUE); // ...enable
llSetTimerEvent(idle_time);
llDialog(llDetectedKey(0), texture_name, menu, myChannel);
}
default
{state_entry()
{
listenHandle = llListen(myChannel,"","","");
elapsed = 0.0;
count = llGetInventoryNumber(INVENTORY_TEXTURE);
i = 0;
texture_name = llGetInventoryName(INVENTORY_TEXTURE, 0);
display(i);
}
on_rez(integer startup_param)
{
llResetScript();
}
touch_start(integer num_detected)
{
if (llDetectedKey(0) == llGetOwner()) {
elapsed = llGetAndResetTime();
}
}
touch(integer num_detected)
{
if (llDetectedKey(0) == llGetOwner()) {
elapsed = llGetTime();if (elapsed >= trigger_time) {agent_key = llDetectedKey(0);touch_hold();
}
}
}touch_end(integer num_detected)
{
if (elapsed >= count)i = 0;
texture_name = llGetInventoryName(INVENTORY_TEXTURE, i);
display(i);
}
}
timer()
{
llSetTimerEvent(0.0);
llListenControl(listenHandle, FALSE); // ...disable
}
listen(integer chan, string name, key id, string cmd)
{
if (llListFindList(menu, [cmd]) != -1) {
if (llToUpper(cmd) == "GET TEXTURE") {
get_texture();
}
}
}
}
Click the Save button and wait for it to compile.
After that we need to add some textures!
Ok, so I said Harbingers rocks along with the vending machines there. If you notice there you can click the Menu button and "Copy all" the textures. This is a cool feature to easily grab what you need.

So now you have some folders of textures to play with:
I grabbed the “Metals” textures just for an example:
Open up the folder in your Inventory and select those textures and move them over into the Contents of the new prim you just made.
WABAM!!
Now that nifty little prim you just made has all those Metal textures in it.
The script will allow you to click the prim and scroll through all the textures.
If you see one you want to use just “hold down” on the selection (click on the prim) and a prompt will pop up asking you if you want that particular texture.
Well now you can be organized having all the metal textures in one prim viewer all the materials in another and so on.
Go to the main Edit and Rename the Prim to the proper Texture ie: Metals.
When a pal gives you a texture just throw down the appropriate viewer and slide that new texture in the prim Contents Tab.