Pose Stand

Written by Kitsune
//Pose Stand With A Nice Hello from You
//Second Life Linden Scripting Language Library (http://wiki.secondlife.com/wiki/Category:LSL_Library)
//Minor Addition by Chimera Firecaster (https://chimerafire.wordpress.com/) - 05/11/2010

//Use:
//  1. Rez an cylinder and create a posing stand from it.
//  2. Give the cylinder a name.  For example, if you have a store named Main Street
//     Clothing, you would name it Main Street Clothing Posing Stand.  If you are
//     making this for a friend, then use your name:  Mary Lamb Posing Stand.  The
//     name of the posing stand will appear before the greeting message.
//  3. Place this script into the "Contents" of the Object
//  4. To edit the script, double-click on its name in "Contents'
//  5. Look for "REPLACE YOUR MESSAGE..." below and replace
//     the text with your own message.
//  6. On the script editing dialog you will see "Mono"
//     Make sure it is checked. Then click on Save.

//Note: this is a FREE script.  It is given generously to the Second Life
//   community without the expectation of anything in return. It may be
//   distributed, but please do not charge for it.  That's bad form.  Besides
//   dishonoring the kindness of others will most certainly bring you bad karma.
//-----Do Not Remove Above Header

key mkLoungingAgentKey = NULL_KEY;
integer miPermissionsAcquired = FALSE;

 default
 {
 state_entry()
 {
 //overriden sit target
 //lower them a bit
 vector vLoungeTarget = <0.00, 0.00, 1.00>;

 rotation rX;
 rotation rY;
 rotation rZ;
 rotation r;

 //build rotations
 //Note: this is broken out like this to simplify the
 //        process of finding the correct sit angle.  I
 //        use the following form until I have the rotation
 //        that I want perfect, and then I simply
 //        hardcode the perfected quaterion and remove   
 //        this mess.
 //
 rX = llAxisAngle2Rot( <1,0,0>, 0 * DEG_TO_RAD);         //cartwheel
 rY = llAxisAngle2Rot( <0,1,0>, 0 * DEG_TO_RAD);       //sumersault
 rZ = llAxisAngle2Rot( <0,0,1>, 0 * DEG_TO_RAD);       //turn in place

 //combine rotations
 r = rX * rY * rZ;

 //override 'sit' on pie menu
 llSetSitText( "Stand" );

 //override default sit target and rotation on prim
 llSitTarget( vLoungeTarget, r );
 }

 changed(integer change)
 {
 if (change & CHANGED_LINK)
 {
 key agent = llAvatarOnSitTarget();
 if ( mkLoungingAgentKey == NULL_KEY && agent != NULL_KEY )
 {

 //changed user
 //cache new user key and request their permissions
 mkLoungingAgentKey = agent;
 llRequestPermissions(mkLoungingAgentKey,PERMISSION_TRIGGER_ANIMATION);
 }
 else if ( mkLoungingAgentKey != NULL_KEY && agent == NULL_KEY)
 {

 //user is getting up
 if ( miPermissionsAcquired )
 {

 //restore anims
 llStopAnimation("turn_180");

 }

 //reset the script to release permissions
 llResetScript();
 }
 }        
 }

 run_time_permissions(integer parm)
 {
 if(parm == PERMISSION_TRIGGER_ANIMATION)
 {
 //REPLACE YOUR MESSAGE IN THE AREAS BETWEEN QUOTES " xxxxx "  " xxxxx "
 //Watch carefully that you only replace the text between quotes
 llInstantMessage(mkLoungingAgentKey,"Hello " + llKey2Name(mkLoungingAgentKey) + ".  Thanks for using our posing stand and have a wonderful day");

 //set permission flag
 miPermissionsAcquired = TRUE;

 //cancel the sit anim
 llStopAnimation("sit");

 llStartAnimation("turn_180");
 }
 }    
}