// The Kittie's Lair Lena Perky/Lena Lush body is a nice // editable mesh body. I use this body for my growing army // of NPCs, and most of their wardrobes contain only a non- // scripted copy of the body's skin layer (without tattoo, // underwear or clothing layers) The skin layer for the // more recent Lenas consist of 4 meshes and a total of 32 // faces that can be hidden or visible // The long list of 32 body parts are a method of creating // and sending out body masks that work with various out- // fits. The way I create the masks is to keep a copy of // the Lena skin layer rezzed, and then it's as simple as // clicking the body parts I want hidden and plugging TRUE // or FALSE into values for each part in a new script. (For // example, a pair of high waisted jeans may require all // faces between "belly" to "upperfoot" be set to FALSE). // The rezzed body acts like a HUD, and it communicates with // the skin layer I'm wearing so I can see how it works with // an outfit. It also tells me what to mask in a new script. // When I finish, I send the new script to each NPC and that // script dropped into an unscripted skin layer. The script // automatically hides the faces and does one more thing... // The modesty function determines if the NPC is on her own // group land, or may have accidentally logged in or tele- // ported somewhere unexpected. While the NPC is making an // effort to teleport, the script uses color to "clothe" the // Lena skin layer until the NPC can move to a new parcel. integer listenHandle; integer chan_no = 22992288; integer LATEX = FALSE; integer CATSUIT = FALSE; integer wrist = TRUE; integer forearm = TRUE; integer elbow = TRUE; integer shoulder = TRUE; integer neck = TRUE; integer collar = TRUE; integer breastbone = TRUE; integer upperback = TRUE; integer chest = TRUE; integer nipple = TRUE; integer breasts = TRUE; integer sternum = TRUE; integer back = TRUE; integer lowerribs = TRUE; integer abdomen = TRUE; integer navel = TRUE; integer belly = TRUE; integer pubis = TRUE; integer cstring = TRUE; integer midbutt = TRUE; integer cheekythigh = TRUE; integer upperthigh = TRUE; integer midthigh = TRUE; integer lowerthigh = TRUE; integer aboveknee = TRUE; integer knee = TRUE; integer uppercalf = TRUE; integer midcalf = TRUE; integer lowercalf = TRUE; integer upperankle = TRUE; integer ankle = TRUE; integer upperfoot = TRUE; integer blankvalue; vector UNCOVER = <1.00,1.00,1.00>; vector COVERED = <0.05,0.05,0.05>; integer modesty(string region) { if (region == "For You" || region == "Marwood" || region == "Icefyre" || region == "Lexilan" || region == "Yongma" || region == "Applewood" || region == "Gianno") { llSetLinkPrimitiveParamsFast(4, [ PRIM_COLOR, 0, UNCOVER, upperback,PRIM_BUMP_SHINY, 0, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, breastbone,PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, collar, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, neck,PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, shoulder, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, elbow, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, forearm, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 7, UNCOVER, wrist, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_LINK_TARGET, 3, PRIM_COLOR, 7, UNCOVER, chest, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, breasts, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, nipple, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, back, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, sternum, PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, lowerribs, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, abdomen, PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 0, UNCOVER, navel, PRIM_BUMP_SHINY, 0, FALSE, FALSE, PRIM_LINK_TARGET, 2, PRIM_COLOR, 7, UNCOVER, belly, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, pubis, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, cstring, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, midbutt, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, cheekythigh, PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, upperthigh, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, midthigh, PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 0, UNCOVER, lowerthigh, PRIM_BUMP_SHINY, 0, FALSE, FALSE, PRIM_LINK_TARGET, 1, PRIM_COLOR, 7, UNCOVER, aboveknee, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, knee, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, uppercalf, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, midcalf, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, lowercalf, PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, upperankle, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, ankle, PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 0, UNCOVER, upperfoot, PRIM_BUMP_SHINY, 0, FALSE, FALSE]); } else if (CATSUIT) { llSetLinkPrimitiveParamsFast(LINK_SET,[PRIM_COLOR, ALL_SIDES, COVERED, TRUE ,PRIM_BUMP_SHINY, ALL_SIDES, LATEX, FALSE]); llSetLinkPrimitiveParamsFast(4, [PRIM_COLOR, 7, UNCOVER, wrist, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, neck,PRIM_BUMP_SHINY, 3, FALSE, FALSE]); } else { llSetLinkPrimitiveParamsFast(4, [ PRIM_COLOR, 0, COVERED, upperback,PRIM_BUMP_SHINY, 0, LATEX, FALSE, PRIM_COLOR, 1, COVERED, breastbone,PRIM_BUMP_SHINY, 1, LATEX, FALSE, PRIM_COLOR, 2, COVERED, collar, PRIM_BUMP_SHINY, 2, LATEX, FALSE, PRIM_COLOR, 3, UNCOVER, neck,PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, shoulder, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, elbow, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, forearm, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 7, UNCOVER, wrist, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_LINK_TARGET, 3, PRIM_COLOR, 7, COVERED, chest, PRIM_BUMP_SHINY, 7, LATEX, FALSE, PRIM_COLOR, 6, COVERED, breasts, PRIM_BUMP_SHINY, 6, LATEX, FALSE, PRIM_COLOR, 5, COVERED, nipple, PRIM_BUMP_SHINY, 5, LATEX, FALSE, PRIM_COLOR, 4, COVERED, back, PRIM_BUMP_SHINY, 4, LATEX, FALSE, PRIM_COLOR, 3, COVERED, sternum, PRIM_BUMP_SHINY, 3, LATEX, FALSE, PRIM_COLOR, 2, COVERED, lowerribs, PRIM_BUMP_SHINY, 2, LATEX, FALSE, PRIM_COLOR, 1, COVERED, abdomen, PRIM_BUMP_SHINY, 1, LATEX, FALSE, PRIM_COLOR, 0, COVERED, navel, PRIM_BUMP_SHINY, 0, LATEX, FALSE, PRIM_LINK_TARGET, 2, PRIM_COLOR, 7, COVERED, belly, PRIM_BUMP_SHINY, 7, LATEX, FALSE, PRIM_COLOR, 6, COVERED, pubis, PRIM_BUMP_SHINY, 6, LATEX, FALSE, PRIM_COLOR, 5, COVERED, cstring, PRIM_BUMP_SHINY, 5, LATEX, FALSE, PRIM_COLOR, 4, UNCOVER, midbutt, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, cheekythigh, PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, upperthigh, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, midthigh, PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 0, UNCOVER, lowerthigh, PRIM_BUMP_SHINY, 0, FALSE, FALSE, PRIM_LINK_TARGET, 1, PRIM_COLOR, 7, UNCOVER, aboveknee, PRIM_BUMP_SHINY, 7, FALSE, FALSE, PRIM_COLOR, 6, UNCOVER, knee, PRIM_BUMP_SHINY, 6, FALSE, FALSE, PRIM_COLOR, 5, UNCOVER, uppercalf, PRIM_BUMP_SHINY, 5, FALSE, FALSE, PRIM_COLOR, 4, UNCOVER, midcalf, PRIM_BUMP_SHINY, 4, FALSE, FALSE, PRIM_COLOR, 3, UNCOVER, lowercalf, PRIM_BUMP_SHINY, 3, FALSE, FALSE, PRIM_COLOR, 2, UNCOVER, upperankle, PRIM_BUMP_SHINY, 2, FALSE, FALSE, PRIM_COLOR, 1, UNCOVER, ankle, PRIM_BUMP_SHINY, 1, FALSE, FALSE, PRIM_COLOR, 0, UNCOVER, upperfoot, PRIM_BUMP_SHINY, 0, FALSE, FALSE]); } return TRUE; } integer changealphas(string controller) { wrist = forearm = elbow = shoulder = neck = collar = breastbone = upperback = TRUE; chest = nipple = breasts = sternum = back = lowerribs = abdomen = navel = TRUE; belly = pubis = cstring = midbutt = cheekythigh = upperthigh = midthigh = lowerthigh = TRUE; aboveknee = knee = uppercalf = midcalf = lowercalf = upperankle = ankle = upperfoot = TRUE; if (llGetSubString(controller, 0, 0) == "0") wrist = FALSE; if (llGetSubString(controller, 1, 1) == "0") forearm = FALSE; if (llGetSubString(controller, 2, 2) == "0") elbow = FALSE; if (llGetSubString(controller, 3, 3) == "0") shoulder = FALSE; if (llGetSubString(controller, 4, 4) == "0") neck = FALSE; if (llGetSubString(controller, 5, 5) == "0") collar = FALSE; if (llGetSubString(controller, 6, 6) == "0") breastbone = FALSE; if (llGetSubString(controller, 7, 7) == "0") upperback = FALSE; if (llGetSubString(controller, 8, 8) == "0") chest = FALSE; if (llGetSubString(controller, 9, 9) == "0") nipple = FALSE; if (llGetSubString(controller, 10, 10) == "0") breasts = FALSE; if (llGetSubString(controller, 11, 11) == "0") sternum = FALSE; if (llGetSubString(controller, 12, 12) == "0") back = FALSE; if (llGetSubString(controller, 13, 13) == "0") lowerribs = FALSE; if (llGetSubString(controller, 14, 14) == "0") abdomen = FALSE; if (llGetSubString(controller, 15, 15) == "0") navel = FALSE; if (llGetSubString(controller, 16, 16) == "0") belly = FALSE; if (llGetSubString(controller, 17, 17) == "0") pubis = FALSE; if (llGetSubString(controller, 18, 18) == "0") cstring = FALSE; if (llGetSubString(controller, 19, 19) == "0") midbutt = FALSE; if (llGetSubString(controller, 20, 20) == "0") cheekythigh = FALSE; if (llGetSubString(controller, 21, 21) == "0") upperthigh = FALSE; if (llGetSubString(controller, 22, 22) == "0") midthigh = FALSE; if (llGetSubString(controller, 23, 23) == "0") lowerthigh = FALSE; if (llGetSubString(controller, 24, 24) == "0") aboveknee = FALSE; if (llGetSubString(controller, 25, 25) == "0") knee = FALSE; if (llGetSubString(controller, 26, 26) == "0") uppercalf = FALSE; if (llGetSubString(controller, 27, 27) == "0") midcalf = FALSE; if (llGetSubString(controller, 28, 28) == "0") lowercalf = FALSE; if (llGetSubString(controller, 29, 29) == "0") upperankle = FALSE; if (llGetSubString(controller, 30, 30) == "0") ankle = FALSE; if (llGetSubString(controller, 31, 31) == "0") upperfoot = FALSE; return TRUE; } string manualclick (integer prim_no, integer face_no) { string alphavalues; if (prim_no == 4) { if (face_no == 0) upperback = !upperback; else if (face_no == 1) breastbone = !breastbone; else if(face_no == 2) collar = !collar; else if(face_no == 3) neck = !neck; else if(face_no == 4) shoulder = !shoulder; else if(face_no == 5) elbow = !elbow; else if(face_no == 6) forearm = !forearm; else if(face_no == 7) wrist = !wrist; } else if (prim_no == 3) { if (face_no == 7) chest = !chest; else if(face_no == 6) breasts = !breasts; else if(face_no == 5) nipple = !nipple; else if(face_no == 4) back = !back; else if(face_no == 3) sternum = !sternum; else if(face_no == 2) lowerribs = !lowerribs; else if(face_no == 1) abdomen = !abdomen; else if(face_no == 0) navel = !navel; } else if (prim_no == 2) { if (face_no == 7) belly = !belly; else if(face_no == 6) pubis = !pubis; else if(face_no == 5) cstring = !cstring; else if(face_no == 4) midbutt = !midbutt; else if(face_no == 3) cheekythigh = !cheekythigh; else if(face_no == 2) upperthigh = !upperthigh; else if(face_no == 1) midthigh = !midthigh; else if(face_no == 0) lowerthigh = !lowerthigh; } else if (prim_no == 1) { if (face_no == 7) aboveknee = !aboveknee; else if(face_no == 6) knee = !knee; else if(face_no == 5) uppercalf = !uppercalf; else if(face_no == 4) midcalf = !midcalf; else if(face_no == 3) lowercalf = !lowercalf; else if(face_no == 2) upperankle = !upperankle; else if(face_no == 1) ankle = !ankle; else if(face_no == 0) upperfoot = !upperfoot; } alphavalues = (string)wrist + (string)forearm + (string)elbow + (string)shoulder + (string)neck + (string)collar + (string)breastbone + (string)upperback + (string)chest + (string)nipple + (string)breasts + (string)sternum + (string)back + (string)lowerribs + (string)abdomen + (string)navel + (string)belly + (string)pubis + (string)cstring + (string)midbutt + (string)cheekythigh + (string)upperthigh + (string)midthigh + (string)lowerthigh + (string)aboveknee + (string)knee + (string)uppercalf + (string)midcalf + (string)lowercalf + (string)upperankle + (string)ankle + (string)upperfoot; return alphavalues; } default { state_entry() { listenHandle = llListen(chan_no, "", "", ""); blankvalue = modesty(llGetRegionName()); } changed(integer change) { if (change & CHANGED_REGION) blankvalue = modesty(llGetRegionName()); } on_rez(integer start_param) { blankvalue = modesty(llGetRegionName()); } listen(integer channel, string name, key id, string message) { message = llStringTrim(message, STRING_TRIM); if (llGetSubString(message, 0, 0) == "0" || llGetSubString(message, 0, 0) == "1") { blankvalue = changealphas(message); blankvalue = modesty(llGetRegionName()); } else llSay (0,"Not valid"); } touch_end(integer num_detected) { llSay(chan_no, manualclick(llDetectedLinkNumber(0),llDetectedTouchFace(0))); blankvalue = modesty(llGetRegionName()); } }