Jump to content

Lycia's Lola Tango Manipulator


Mistress Lycia
 Share

You are about to reply to a thread that has been inactive for 3831 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Here's a little script I wrote to facilitate the use of the tangos breasts I'm wearing. You can grab a full package for free at https://marketplace.secondlife.com/p/Lycias-Lola-Tango-Manipulator/5349220?

Have fun!

Mistress Lycia

Code:

//Lolas TANGO texture manipulation script by Mistress Lycia

//Based in parts on Multiple TANGO Layer Switcher by Niccola Biedermann as modded by Kaliska
//Thanks also to the lsl wiki and script library

//VERSION HISTORY
//Version 0.2: automatically turn transparency off when new texture applied; new command bh/th to hide bra or top layer
//Version 0.1: first release

//Constants
integer CHANNEL = 6; // chat channel for commands
string  TOP_LAYER_NAME = "Lolas:::Tango:::Top Layer";
string  BRA_LAYER_NAME = "Lolas:::Tango:::Bra Layer";
string  SKIN_LAYER_NAME = "Lolas:::Tango:::Skin Layer";
string 	BRA_NOTECARD = "Bikinis";
string 	TOP_NOTECARD = "Tops";
string 	SKIN_NOTECARD = "Skins";


// Globals
integer gLinkIDToChange=0; //0=nothing
integer gBraItemLink=0; // link no for bra layer
integer gTopItemLink=0; // link no for top layer
integer gSkinItemLink=0; // link no for top layer
string 	gCurrentNotecardName="";
integer gListenID;    // listen handler for listener
key notecardQueryId;
integer notecardLine;
integer gBraTransparency = 2; // transparency of bra layer, 2% helps alpha layers render correctly
integer gTopTransparency = 2; // transparency of top layer, 2% helps alpha layers render correctly
// though having both top and bra showing at 2% can yield odd results
// so if the bra shows through the top then set the top to 0% transparency


find_linked_items()
{
	gBraItemLink = 0;
	gTopItemLink = 0;
	gSkinItemLink = 0;
	integer i = llGetNumberOfPrims();
	for ( ; i > 0; i-- )
	{
		string strName = llGetLinkName(i);
		if ( strName == TOP_LAYER_NAME )
		{
			gTopItemLink = i;
		}
		if ( strName == BRA_LAYER_NAME )
		{
			gBraItemLink = i;
		}
		if ( strName == SKIN_LAYER_NAME )
		{
			gSkinItemLink = i;
		}
	}
}

initialize()
{
	if ( gListenID != 0 )
	{ // deactivate listener just in case we don't find all the linked items
		llListenRemove(gListenID);
		gListenID = 0;
	}
	find_linked_items();
	if ( gTopItemLink > 0 && gBraItemLink > 0 && gSkinItemLink > 0)
	{ // linked items found, start listener
		gListenID = llListen(CHANNEL,"",llGetOwner(),"");
	}
	else
	{
		llOwnerSay("Error in texture script("+llGetScriptName()+"): Layers not found!");
	}
}

listNotecard(string notecardName)
{
	// Check the notecard exists, and has been saved
	if (llGetInventoryKey(notecardName) == NULL_KEY)
	{
		llOwnerSay( "Notecard '" + notecardName + "' missing or unwritten");
		return;
	}
	llOwnerSay("UUIDs in notecard '" + notecardName + "':");
	gCurrentNotecardName=notecardName;
	notecardLine=0;
	notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
}

SetTexture(integer LinkID, key TextureUUID)
{
	if(LinkID==0)
	{ return;}
	if(llStringLength(TextureUUID)!=36)
	{llOwnerSay("Not a vaild key: " + (string)TextureUUID);}
	llSetLinkPrimitiveParams(LinkID, [PRIM_TEXTURE,0,TextureUUID,<0.5, 0.5, 0.0>,<-0.25, 0.25, 0.0>,0]);
	setTransparency(LinkID, 2);
}

setTransparency(integer LinkID, integer TranspSetting)
{
	if(LinkID==0)
	{llOwnerSay("Target Layer not found! Could not set transparency.");return;}
	if ( TranspSetting<0)
	{TranspSetting=0;}
	if ( TranspSetting>100)
	{TranspSetting=100;}
	llSetLinkAlpha(LinkID, (float)(100-TranspSetting)/100.0, ALL_SIDES);
	llOwnerSay("Transparency set to "+(string)TranspSetting+"%.");
}

default
{
	state_entry()
	{
		initialize();
	}

	dataserver(key query_id, string data)
	{
		if (query_id == notecardQueryId)
		{
			if (gLinkIDToChange==0) {
				if (data == EOF)
					llOwnerSay("Done reading notecard " + gCurrentNotecardName +", read " + (string) notecardLine + " notecard lines.");
				else
				{
					++notecardLine;
					llOwnerSay( (string) notecardLine + " - " + llGetSubString(data,0,llSubStringIndex(data,"|")-1));
					notecardQueryId = llGetNotecardLine(gCurrentNotecardName, notecardLine);
				}

			} else	{
					if (data == EOF)
						llOwnerSay("Error reading notecard " + gCurrentNotecardName +"!");
				else
				{
					SetTexture(gLinkIDToChange, llGetSubString(data,llSubStringIndex(data,"|")+1,-1));
					gLinkIDToChange=0;
					llOwnerSay("Done!");
				}
			}

		}

	}

	changed(integer change)
	{
		if ( change & CHANGED_LINK )
		{ // number of linked items has changed
			initialize();
		}
	}

	listen(integer channel, string name, key id, string message)
	{
		if ( id != llGetOwner())
		{ return ;} //not our master's voice

		string strLayer = llToLower(llGetSubString(message,0,1));
		//List notecards: bl=bra notecard, tl=top notecard, sl=skin notecard
		if(strLayer=="bl")
		{ listNotecard(BRA_NOTECARD); return;}
		if(strLayer=="tl")
		{ listNotecard(TOP_NOTECARD);return;}
		if(strLayer=="sl")
		{ listNotecard(SKIN_NOTECARD);return;}

		//Hide layer: bh=bra hide, th:Top hide
		if(strLayer=="bh")
		{ setTransparency(gBraItemLink,100); return;}
		if(strLayer=="th")
		{ setTransparency(gTopItemLink,100); return;}

		//get number after command
		string strRemainder = llStringTrim(llGetSubString(message,2,-1),STRING_TRIM);
		if ( (string) ( (integer) strRemainder ) != strRemainder ) // check we've been given an integer
		{llOwnerSay("Please give number after transparency (0-100) and texture commands!");return;}

		//Set Transparency: bt=bra trans, tt:Top trans
		if(strLayer=="bt")
		{ setTransparency(gBraItemLink,(integer)strRemainder); return;}
		if(strLayer=="tt")
		{ setTransparency(gTopItemLink,(integer)strRemainder); return;}

		//Set Texture by notecard line: bx=bra texture, tx:top texture, sx:skin texture
		if((integer)strRemainder<1)
		{llOwnerSay("Notecardline must be valid!");return;}
		if(strLayer=="bx")
		{ gLinkIDToChange=gBraItemLink;
				notecardQueryId = llGetNotecardLine(BRA_NOTECARD, (integer)strRemainder-1);
				return;}
		if(strLayer=="tx")
		{ gLinkIDToChange=gTopItemLink;
				notecardQueryId = llGetNotecardLine(TOP_NOTECARD, (integer)strRemainder-1);
				return;}
		if(strLayer=="sx")
		{ gLinkIDToChange=gSkinItemLink;
				notecardQueryId = llGetNotecardLine(SKIN_NOTECARD, (integer)strRemainder-1);
				return;}
	}

}

Manual:

Mistress Lycia's Lola Tango Manipulator

//Based in parts on Multiple TANGO Layer Switcher by Niccola Biedermann as modded by Kaliska
//Thanks also to the lsl wiki and script library

//VERSION HISTORY
//Version 0.2: automatically turn transparency off when new texture applied; new command bh/th to hide bra or top layer
//Version 0.1, first release


MANUAL
======

What is it?
-----------
This script allows you to manipulate skin, top and bra layer of your Lolas Tangos
- Set the transparency of bra and skin layer
- Set the texture of either bra, top or skin layer to any UUID you like
The script uses the notecards to store UUIDs of your skin and clothing. The UUID uniquely ?
identifies the textures used in SL. If you know the UUID of a piece of clothing you're wearing ?
(e.g. a top, shirt, bra), you can use the clothing with your lolas even when the creator didn't ?
give you an applier.

Installation:
-------------
- Right click your boobs (can do while you're wearing them)
- put the script and the 3 notecards ("Bikinis", "Tops", "Skins") into your boobs
That's it!

Notecard format
---------------
Each line lists one item with a description and a UUID. Write down a description (I recommend to use the exact name of your clothing as it appears in the inventory), followed by "|", then the UUID in standard SL format. Example (not a real UUID)

Sexy Top White|12345f6c-12e5-123f-12345-4d9d9bf70000

Put as many lines in your notecards as you like.

Commands:
---------
The script listen son channel 6. So in order to access the script, start what you write with "/6". Every command starts with "s" for skin layer, "t" for top layer and "b" for bra layer. Second letter is "l" for list items, "t" for set transparency and "x" for set texture".

List notecard entries:
Write "/6sl" to list all entries in skin notecard, "/6bl" for bikini layer notecard and "/6tl" for top layer notecards. Every line starts with a number, use this with the "x" command to apply the textures. First line=1.

Apply textures:
Write "/6sx" followed by a line number (obtained with /6sl) to apply a UUID from your notecard to your skin layer, example:
  /6sx5 - this would apply the UUID from the 5th line in your skins notecard
If you use "/6bx" or "/6tx", the script reads the corresponding line from the bikinis or tops notecard, respectively. 
When applying a new texture to bra or top layer, the layer will automatically turned visible.

Hide a layer
write "/6bh" to hide bra layer, write "/th" to hide top layer. Same as setting transparency to 100%.

Set transparency:
Write "/6tt" followed by a number 0-100 to set transparency. 0=fully opaque, 100=invisible. Say 
  /6tt50
to make the layer semi transparent. Use
  /6tt100
to make the top disappear completely. Use
  /6tt0 to make it fully visible.


That's it! Have fun and play responsibly!
Mistress Lycia

 

 

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 3831 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...