Difference between revisions of "Texture Changer (inventory)(all prims & all sides)(params).lsl"

From Second Life Wiki
Jump to navigation Jump to search
(added script)
 
m (formatting)
Line 1: Line 1:
<lsl>
//***********************************************************************************************************
//***********************************************************************************************************
//                                                                                                          *
//                                                                                                          *
Line 13: Line 14:


//Status: Fully Working/Production Ready
//Status: Fully Working/Production Ready
//Version: 1.0.3
//Version: 1.0.2


//Name: Texture Changer (inventory)(all prims & all sides)(params).lsl
//Name: Texture Changer (inventory)(all prims & all sides)(params).lsl
Line 52: 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
//PRIM_TEXTURE:integer face, string name, vector repeats, vector offsets, float rotation
    //PRIM_TEXTURE:integer face, string name, vector repeats, vector offsets, float rotation
llSetLinkPrimitiveParams(LINK_SET,[PRIM_TEXTURE,ALL_SIDES, texture, scale, offset, rot]);
    llSetLinkPrimitiveParams(LINK_SET,[PRIM_TEXTURE,ALL_SIDES, texture, scale, offset, rot]);
}
}


default
default
{
{
on_rez(integer start_param)//on rez reset...probably not needed.
    on_rez(integer start_param)//on rez reset...probably not needed.
{
    {
llResetScript();
        llResetScript();
}
    }
state_entry()
    state_entry()
{
    {
llOwnerSay("Bobbyb's 'Texture Changer (inventory)(all prims & all sides)(params).lsl' (Public Domain 2009)");
        llOwnerSay("Bobbyb's 'Texture Changer (inventory)(all prims & all sides)(params).lsl' (Public Domain 2009)");
llOwnerSay("Because knowledge should be free.");
        llOwnerSay("Because knowledge should be free.");
numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE);//number of textures in inventory
        numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE);//number of textures in inventory
numberofprims = llGetNumberOfPrims();
        numberofprims = llGetNumberOfPrims();
if(numberoftextures <= 0)//no textures
        if(numberoftextures <= 0)//no textures
llOwnerSay("No textures were found in my inventory. Please add textures.");
            llOwnerSay("No textures were found in my inventory. Please add textures.");
else if(numberoftextures == 1)//only 1 texture
        else if(numberoftextures == 1)//only 1 texture
llOwnerSay("I only found 1 picture in my inventory. I need more in order to change them.");
            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
        //for 2 random isn't needed...but I'm too lazy to add that in
else//more than 1 texture found...
        else//more than 1 texture found...
{
        {
llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every "
            llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every "
+ (string)frequency + " seconds on " + (string)numberofprims + " prims.");
                + (string)frequency + " seconds on " + (string)numberofprims + " prims.");
llSetTimerEvent(frequency);
            llSetTimerEvent(frequency);
}
        }
}
    }
timer()
    timer()
{
    {
if(random)//show pics randomly
        if(random)//show pics randomly
{
        {
integer randomtexture;
            integer randomtexture;
if(duplicatecheck)//whether to make sure random doesn't repeat itself
            if(duplicatecheck)//whether to make sure random doesn't repeat itself
{
            {
do
                do
{
                {
randomtexture= llRound(llFrand(numberoftextures - 1));
                    randomtexture= llRound(llFrand(numberoftextures - 1));
//llOwnerSay("r" + (string)randomtexture);//debug
                    //llOwnerSay("r" + (string)randomtexture);//debug
}while(randomtexture == currenttexture);//make sure the random one isn't the same as the current one
                }while(randomtexture == currenttexture);//make sure the random one isn't the same as the current one
}
            }
else//no duplicate check
            else//no duplicate check
randomtexture = llRound(llFrand(numberoftextures - 1));//generate random texture number
                randomtexture = llRound(llFrand(numberoftextures - 1));//generate random texture number
currenttexture = randomtexture;//set the current one to the random one selected
            currenttexture = randomtexture;//set the current one to the random one selected
changetexture();//change the texture
            changetexture();//change the texture
//llOwnerSay("c" + (string)currenttexture);//debug
            //llOwnerSay("c" + (string)currenttexture);//debug
}
        }
else//not random, go in order
        else//not random, go in order
{
        {
++currenttexture;
            ++currenttexture;
if(currenttexture == numberoftextures)//if current texture = number of textures, reset counter
            if(currenttexture == numberoftextures)//if current texture = number of textures, reset counter
currenttexture = 0;
                currenttexture = 0;
changetexture();//change the texture
            changetexture();//change the texture
//llOwnerSay("c" + (string)currenttexture);//debug
            //llOwnerSay("c" + (string)currenttexture);//debug
}
        }
}
    }
changed(integer change)
    changed(integer change)
{
    {
if(change & CHANGED_INVENTORY)//new or removed inventory...update texture count
        if(change & CHANGED_INVENTORY)//new or removed inventory...update texture count
{
        {
llOwnerSay("Inventory change detected.");
            llOwnerSay("Inventory change detected.");
numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE);
            numberoftextures = llGetInventoryNumber(INVENTORY_TEXTURE);
llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every "
            llOwnerSay("I found " + (string)numberoftextures + " pictures which I will change every "
+ (string)frequency + " seconds on " + (string)numberofprims + " prims."); }
                + (string)frequency + " seconds on " + (string)numberofprims + " prims."); }
else if(change & CHANGED_LINK)//new or removed prims...update prim count
        else if(change & CHANGED_LINK)//new or removed prims...update prim count
{
        {
llOwnerSay("Object links changed.");
            llOwnerSay("Object links changed.");
numberofprims = llGetNumberOfPrims();
            numberofprims = llGetNumberOfPrims();
llOwnerSay("This object has " + (string)numberofprims + " prims.");
            llOwnerSay("This object has " + (string)numberofprims + " prims.");
}
        }
}
    }
}
}
</lsl>

Revision as of 14:25, 28 November 2009

<lsl> //*********************************************************************************************************** // * // --Texture Changer (inventory)(all prims & all sides)(params).lsl-- * // * //*********************************************************************************************************** // 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.2

//Name: Texture Changer (inventory)(all prims & all sides)(params).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 vector scale = <1,1,1>;//scale of the texture vector offset = <0,0,0>;//offset of the texture float rot = 0;//rotation of the texture

///////////////////////////////////////////////////////////// //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
   //PRIM_TEXTURE:integer face, string name, vector repeats, vector offsets, float rotation
   llSetLinkPrimitiveParams(LINK_SET,[PRIM_TEXTURE,ALL_SIDES, texture, scale, offset, rot]);

}

default {

   on_rez(integer start_param)//on rez reset...probably not needed.
   {
       llResetScript();
   }
   state_entry()
   {
       llOwnerSay("Bobbyb's 'Texture Changer (inventory)(all prims & all sides)(params).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>