Difference between revisions of "Simple Texture Changer (for inventory)(all prims & all sides).lsl"
m (added backlink) |
m (added atonce feature...corrected minor bug) |
||
Line 11: | Line 11: | ||
//Attribution: None required, but it is appreciated. | //Attribution: None required, but it is appreciated. | ||
//Created: November 12, 2008 | //Created: November 12, 2008 | ||
//Last Modified: November | //Last Modified: November 28, 2009 | ||
//Released: Saturday, November 28, 2009 | //Released: Saturday, November 28, 2009 | ||
//License: Public Domain | //License: Public Domain | ||
//Status: Fully Working/Production Ready | //Status: Fully Working/Production Ready | ||
//Version: 1.0. | //Version: 1.0.3 | ||
//Name: Simple Texture Changer (for inventory)(all prims & all sides).lsl | //Name: Simple Texture Changer (for inventory)(all prims & all sides).lsl | ||
Line 43: | Line 43: | ||
integer random = TRUE;//whether to show the textures randomly, or in order | integer random = TRUE;//whether to show the textures randomly, or in order | ||
integer duplicatecheck = TRUE;//if random is true, this will check to make sure the random selection is a new texture | integer duplicatecheck = TRUE;//if random is true, this will check to make sure the random selection is a new texture | ||
integer atonce = FALSE;//whether to change all the prims at once, or one at a time | |||
///////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////// | ||
Line 53: | Line 53: | ||
changetexture()//user fucntion to change texture; | changetexture()//user fucntion to change texture; | ||
{ | { | ||
string texture = llGetInventoryName(INVENTORY_TEXTURE,currenttexture);//gets texture key | string texture = llGetInventoryName(INVENTORY_TEXTURE,currenttexture);//gets texture key | ||
if(atonce) | |||
llSetLinkTexture(LINK_SET,texture,ALL_SIDES); | |||
else | |||
{ | { | ||
llSetLinkTexture(counter,texture,ALL_SIDES); | integer counter=1; | ||
do | |||
{ | |||
llSetLinkTexture(counter,texture,ALL_SIDES); | |||
}while(++counter < (numberofprims + 1)); | |||
} | |||
} | } | ||
Line 126: | Line 132: | ||
numberofprims = llGetNumberOfPrims(); | numberofprims = llGetNumberOfPrims(); | ||
llOwnerSay("This object has " + (string)numberofprims + " prims."); | llOwnerSay("This object has " + (string)numberofprims + " prims."); | ||
} | } | ||
} | } | ||
} | } | ||
</lsl> | </lsl> |
Revision as of 14:37, 28 November 2009
Part of Bobbyb's texture changer collection <lsl> //https://wiki.secondlife.com/wiki/Simple_Texture_Changer_(input_list)(multiple_prims_%26_multiple_sides).lsl //*********************************************************************************************************** // * // --Simple Texture Changer (for inventory)(all prims & all sides)-- * // * //*********************************************************************************************************** // www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano) //Creator: Bobbyb30 Swashbuckler //Attribution: None required, but it is appreciated. //Created: November 12, 2008 //Last Modified: November 28, 2009 //Released: Saturday, November 28, 2009 //License: Public Domain
//Status: Fully Working/Production Ready //Version: 1.0.3
//Name: Simple Texture Changer (for inventory)(all prims & all sides).lsl //Purpose: To change the texture on all the prims and all of their sides based on the textures in inventory. //Technical Overview: The script finds how many textures there are in inventory, and uses a timer to change the // texture on a side based on randomness or order. It takes into account inventory changes. It uses // a user defined list to determine which sides to change. //Description: A simple texture changer script that changes the texture on all the sides of all the prims in a // linked prim set to those in inventory. It allows for a random order, or a logical "next up" order. //Directions: Create a prim. Place pictures in prim inventory. Place script in prim inventory. Modify script parameters // to suit your needs. If you add pictures, and the script does not reset, manually reset the script.
//Compatible: Mono & LSL compatible //Other items required: More than 1 texture in inventory. //Notes: Uses a timer event. Should be low lag. Commented for easier following. This will change the all the sides // of linked prims to the *same* texture. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Adjustable global variables...you may change these //Please note there is a .2 second delay between prims. //all prims all sides float frequency = 2.0;//how often to change the texture in seconds. Shouldn't be below 2.0
//please note that the last and first texture will be shown less frequently than those in between integer random = TRUE;//whether to show the textures randomly, or in order integer duplicatecheck = TRUE;//if random is true, this will check to make sure the random selection is a new texture integer atonce = FALSE;//whether to change all the prims at once, or one at a time
///////////////////////////////////////////////////////////// //global variables...do not change integer numberoftextures;//number of textures in inventory integer currenttexture;//inventory number of current texture integer numberofprims;//the number of prims there are
changetexture()//user fucntion to change texture; {
string texture = llGetInventoryName(INVENTORY_TEXTURE,currenttexture);//gets texture key if(atonce) llSetLinkTexture(LINK_SET,texture,ALL_SIDES); else { integer counter=1; do { llSetLinkTexture(counter,texture,ALL_SIDES); }while(++counter < (numberofprims + 1)); }
}
default {
on_rez(integer start_param)//on rez reset...probably not needed. { llResetScript(); } state_entry() { llOwnerSay("Simple Texture Changer (for inventory)(all prims & all sides).lsl' (Public Domain 2009)"); llOwnerSay("Because knowledge should be free."); numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE);//number of textures in inventory numberofprims = llGetNumberOfPrims(); if(numberoftextures <= 0)//no textures llOwnerSay("No textures were found in my inventory. Please add textures."); else if(numberoftextures == 1)//only 1 texture llOwnerSay("I only found 1 picture in my inventory. I need more in order to change them."); //for 2 random isn't needed...but I'm too lazy to add that in else//more than 1 texture found... { llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every " + (string)frequency + " seconds on " + (string)numberofprims + " prims."); llSetTimerEvent(frequency); } } timer() { if(random)//show pics randomly { integer randomtexture; if(duplicatecheck)//whether to make sure random doesn't repeat itself { do { randomtexture= llRound(llFrand(numberoftextures - 1)); //llOwnerSay("r" + (string)randomtexture);//debug }while(randomtexture == currenttexture);//make sure the random one isn't the same as the current one } else//no duplicate check randomtexture = llRound(llFrand(numberoftextures - 1));//generate random texture number currenttexture = randomtexture;//set the current one to the random one selected changetexture();//change the texture //llOwnerSay("c" + (string)currenttexture);//debug } else//not random, go in order { ++currenttexture; if(currenttexture == numberoftextures)//if current texture = number of textures, reset counter currenttexture = 0; changetexture();//change the texture //llOwnerSay("c" + (string)currenttexture);//debug } } changed(integer change) { if(change & CHANGED_INVENTORY)//new or removed inventory...update texture count { llOwnerSay("Inventory change detected."); numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE); llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every " + (string)frequency + " seconds on " + (string)numberofprims + " prims."); } else if(change & CHANGED_LINK)//new or removed prims...update prim count { llOwnerSay("Object links changed."); numberofprims = llGetNumberOfPrims(); llOwnerSay("This object has " + (string)numberofprims + " prims.");
} }
} </lsl>