<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;user=Chaz+Longstaff&amp;feedformat=atom</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;user=Chaz+Longstaff&amp;feedformat=atom"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Chaz_Longstaff"/>
	<updated>2026-07-17T20:53:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1198065</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1198065"/>
		<updated>2015-11-27T21:25:56Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&amp;lt;br /&amp;gt;&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
//PURPOSE&amp;lt;br /&amp;gt;&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&amp;lt;br /&amp;gt;&lt;br /&gt;
//with this script, users rez an item by clicking a button (e.g. a Throne, a campfire, etc.)&amp;lt;br /&amp;gt;&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&amp;lt;br /&amp;gt;&lt;br /&gt;
//allows multiple props to be rezzed at the same time, the only maximum is how many you allow the user to rez / prim limits on land&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
//there are 3 parts needed:&amp;lt;br /&amp;gt;&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&amp;lt;br /&amp;gt;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&amp;lt;br /&amp;gt;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&amp;lt;br /&amp;gt;&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
//instructions&amp;lt;br /&amp;gt;&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&amp;lt;br /&amp;gt;&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&amp;lt;br /&amp;gt;&lt;br /&gt;
//&amp;lt;br /&amp;gt;&lt;br /&gt;
//format of menu buttons:&amp;lt;br /&amp;gt;&lt;br /&gt;
//&amp;lt;br /&amp;gt;&lt;br /&gt;
//LINKMSG Rez AThing| 0,-4,987790,Rez##Tiki Torch bb Rezable ##X#.15#.70&amp;lt;br /&amp;gt;&lt;br /&gt;
//LINKMSG DeRez AThing | 1,-4,987790,DeRez##ItemToRez&amp;lt;br /&amp;gt;&lt;br /&gt;
//LINKMSG Clear Everything| 1,-4,987790,DeRezAll##dummytext&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ. Separate each of them with a single #&amp;lt;br /&amp;gt;&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&amp;lt;br /&amp;gt;&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Script: &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
integer ch;&amp;lt;br /&amp;gt;&lt;br /&gt;
string ObjectName;&amp;lt;br /&amp;gt;&lt;br /&gt;
vector TargetVector;&amp;lt;br /&amp;gt;&lt;br /&gt;
integer x;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlOwnerSay&amp;diff=1193634</id>
		<title>LlOwnerSay</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlOwnerSay&amp;diff=1193634"/>
		<updated>2014-09-27T15:49:36Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Corrected incorrect grammatical use of &amp;quot;less&amp;quot; in &amp;quot;This can convey 1024 ASCII characters, or less if non-ASCII are present.&amp;quot; to &amp;quot;fewer&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL_Function/limits}}{{LSL_Function/chat||msg}}&lt;br /&gt;
|func_id=292|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llOwnerSay|p1_type=string|p1_name=msg&lt;br /&gt;
|func_desc=Says {{LSLP|msg}} to the object&#039;s owner only, if the owner is currently in the same [[region]].&lt;br /&gt;
|return_text&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
* If {{LSLP|msg}} is longer than 1024 bytes, it will be truncated to 1024 bytes. This can convey 1024 ASCII characters, or fewer if non-ASCII are present.&lt;br /&gt;
* Silently fails ~45 seconds after the owner leaves the region the object is in.&lt;br /&gt;
* Silently fails when the object to which the script is attached is [[deed]]ed to a group.&lt;br /&gt;
* Some viewers do not display llOwnerSay text when {{LSLP|msg}} is empty ({{String}}).&lt;br /&gt;
* Produces swirly particle effects for the owner (who sees the message) but these effects do not appear to be visible to other avatars (who don&#039;t).&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;Ouch!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// llOwnerSay extension for preventing silent failures&lt;br /&gt;
// paste this code at the top of the script and replace&lt;br /&gt;
// any calls to llOwnerSay with uOwnerSayPlus&lt;br /&gt;
&lt;br /&gt;
uOwnerSayPlus(string inputString)&lt;br /&gt;
{&lt;br /&gt;
    key owner = llGetOwner();&lt;br /&gt;
&lt;br /&gt;
    // single owner that the region still has a handle for&lt;br /&gt;
    if (llKey2Name(owner))&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(inputString);&lt;br /&gt;
    }&lt;br /&gt;
    // group owned, must send the message publicly&lt;br /&gt;
    else if (llList2Key(llGetObjectDetails(llGetKey(), [OBJECT_GROUP]), 0) == owner)&lt;br /&gt;
    {&lt;br /&gt;
        llWhisper(0, &amp;quot;/me : &amp;quot; + inputString);&lt;br /&gt;
    }&lt;br /&gt;
    // single owner, not present, send them an IM&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        llInstantMessage(owner, inputString);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llRegionSay]]|Sends chat region wide}}&lt;br /&gt;
{{LSL DefineRow||[[llWhisper]]|Sends chat limited to 10 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llSay]]|Sends chat limited to 20 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llShout]]|Sends chat limited to 100 meters}}&lt;br /&gt;
{{LSL DefineRow||[[llRegionSayTo]]|Sends private chat region wide}}&lt;br /&gt;
{{LSL DefineRow||[[llInstantMessage]]|Sends private chat anywhere on the grid}}&lt;br /&gt;
|also_events&lt;br /&gt;
|also_tests=&lt;br /&gt;
{{LSL DefineRow|[[llOwnerSay Test]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|permission&lt;br /&gt;
|negative_index&lt;br /&gt;
|cat1=Communications&lt;br /&gt;
|haiku={{Haiku|Speak to me only.|Murmur secrets in my ear:|Clandestine whispers.}}&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1193616</id>
		<title>MLPV2 Reference Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1193616"/>
		<updated>2014-09-26T17:43:15Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
== .MENUITEMS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
Menu notecards create menus.&lt;br /&gt;
&lt;br /&gt;
When MLP2 starts up, it reads all *.MENUITEMS* notecards (&amp;quot;*&amp;quot; can be anything), in the same order as they&#039;re shown in object contents.  You can have as many MENUITEMS notecards as you wish, or just one.  MLP2 essentially reads all MENUITEMS notecards as though they&#039;ve been concatenated into one big file.&lt;br /&gt;
&lt;br /&gt;
The first two things (other than comments) MLPV2 reads from the first *.MENUITEMS* notecard MUST be two POSE statements, first for &amp;quot;default&amp;quot; and second for &amp;quot;stand&amp;quot; -- even if you don&#039;t use the STAND button anywhere.  Note that these must not be repeated in subsequent *.MENUITEMS* notecards.  See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.)&lt;br /&gt;
&lt;br /&gt;
After the first two POSE statements, it expects directives and then MENU commands to build menus.&lt;br /&gt;
&lt;br /&gt;
An example, to be clear:&lt;br /&gt;
&lt;br /&gt;
 POSE stand | stand | stand  | stand | stand | stand | stand &lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground&lt;br /&gt;
&lt;br /&gt;
MENUORDER &lt;br /&gt;
// NORELOAD &lt;br /&gt;
&lt;br /&gt;
MENU MAIN MENU | ALL&lt;br /&gt;
(etc)&lt;br /&gt;
&lt;br /&gt;
Don&#039;t insert anything else at the top of the main MENUITEMS notecard, or you may experience strange errors such as &amp;quot;No Unused TOMENU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first MENU created is the main menu, which a user gets on touching the MLP2 object.  The remaining menus are reached via buttons configured using TOMENU.&lt;br /&gt;
&lt;br /&gt;
There are several built-in commands that you use to build your menu, as well as several options.&lt;br /&gt;
&lt;br /&gt;
Most commands cause buttons to be added to menus.  In this case, the command format is usually like this:&lt;br /&gt;
&lt;br /&gt;
 COMMAND &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;&#039;ButtonLabel&#039;&#039; with whatever you want to appear as the button label.  In many cases, this is optional, and the button label will match the command name.  (Whenever something in a command format is in &#039;&#039;italics&#039;&#039;, it means that you replace that text with what you want.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== COMMENTS ===&lt;br /&gt;
Comments in MENUITEMS notecards must be preceded by &amp;quot;//&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Any subsequent text on that line is ignored by the scripts.&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
 //all this text is ignored&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
 STOP // STOP is read by the scripts; but this part of the line is ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DEFAULT / STAND ===&lt;br /&gt;
&lt;br /&gt;
Place these are the very top of the first *.MENUITEMS* notecard, which is usually the one named &amp;quot;.MENUITEMS&amp;quot;. (You may insert commented lines before this; commented lines don&#039;t count.)&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 POSE stand | stand | stand  | stand  //pose before starting and when stopping&lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground //default pose when no animation entered&lt;br /&gt;
&lt;br /&gt;
You may use other animations; the ones in the example are standard ones built into the SL, and don&#039;t need to appear in object inventory. {{Footnote|For a list of other built-in animations, see here: [https://wiki.secondlife.com/wiki/Internal_Animations#User-playable_animations].}}&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_Default_Pose| the default pose tip]] for help on setting coordinates for the default pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVES ===&lt;br /&gt;
&lt;br /&gt;
Directives affect the overall behavior of MLP2.  It usually doesn&#039;t matter where in the .MENUITEMS* files they are, but by convention, they appear after the default and stand poses.  Directives do not cause a menu button to appear.&lt;br /&gt;
&lt;br /&gt;
All are case-sensitive and so therefore you must use them in upper case as shown here.&lt;br /&gt;
&lt;br /&gt;
If you want a directive to be acted upon, type its name into your menu card. If you don&#039;t, either just leave it out, or comment it out.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOBACK || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
Automatically inserts BACK before any MORE--&amp;gt; automatically added by the AUTOMORE feature (see below).  This does not add a BACK to every menu page, only those with &amp;quot;MORE--&amp;gt;&amp;quot; inserted by the AUTOMORE feature.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOMORE || &lt;br /&gt;
&lt;br /&gt;
Automatically inserts &amp;quot;More--&amp;gt;&amp;quot; button for menus with more than 12 buttons *except* for the main menu. If you need a &amp;quot;More--&amp;gt;&amp;quot; on the Main Menu, you must add one manually.&lt;br /&gt;
&lt;br /&gt;
You would add a manual one like this:&lt;br /&gt;
&lt;br /&gt;
 MORE More--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MORE&amp;quot; is the command; &amp;quot;More--&amp;gt;&amp;quot; is the button label.&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
|| MEMORY || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.5)&lt;br /&gt;
This directive changes the maximum memory limit for the ~menu script.&lt;br /&gt;
&lt;br /&gt;
 MEMORY &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets the limit to &#039;&#039;MemoryLimit&#039;&#039; in Byte on the ~menu script if encoutered in .MENUITEMS notecards.&lt;br /&gt;
&lt;br /&gt;
MLPV2.5c and up reduce their memory limits after reading the configuration, to reduce parcel memory usage.  This happens by default without any change to notecards.&lt;br /&gt;
MEMORY commands for all notecards set the amount of free memory to reserve after reading configuration. Lower numbers use less region (sim) script memory but also increase risk of&lt;br /&gt;
stack-heap errors.  Set MEMORY to 65536 to get max permissible memory. If MEMORY commands are omitted, defaults are used.&lt;br /&gt;
&lt;br /&gt;
When MLPV2 prints memory for a script as &amp;quot;(~scriptname: 10000 bytes free, 40000 byte limit)&amp;quot; 10000 bytes are available for the script&#039;s use.  If it gets stack-heap errors, configure a higher MEMORY limit for that script&#039;s notecard. 40000 bytes is the limit: if this number is below 65535, you can configure more MEMORY for that script.  If it&#039;s at 65535, you&#039;re maxxed out; you might have to reduce (remove poses, shorten pose names, etc -- see wiki for tips)&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Adjust&amp;quot; menu button now prints free memory. During &amp;quot;Adjust&amp;quot; mode, ~memory script&#039;s limit is set to max, to allow storing new pose positions.  Its limit goes back down when you leave Adjust mode.&lt;br /&gt;
&lt;br /&gt;
Some scripts have hard-coded limits that can&#039;t be changed by notecard. If you get stack-heap errors for these, you can try modifying the script, increasing the number passed to llSetMemoryLimit().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;MEMORY|&#039;&#039;MemoryLimit&#039;&#039;|&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~props script in .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
 MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~swap script in .SWAP notecards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENUORDER || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This directive causes all menu buttons to appear in menus in the same order as they appear in the .MENUITEMS* files.  If absent, menus are in the group-by-3-backwards order typical of SL menus, like original MLP.  If present *anywhere* in any of the .MENUITEMS notecards, it affects all menus regardless of what .MENUITEM notecard they are in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| NORELOAD || &lt;br /&gt;
&lt;br /&gt;
This directive causes MLP2 not to do a menu reset when rezzed.  MLPV2.1 does not autoreload on rez, and this directive has no effect with MLPV2.1.  (Automatic reset on rez was added to fix a problem where multiple copies of the same MLP object responded to each others&#039; menus.  A better fix was found in MLPV2.1.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MENU COMMANDS ===&lt;br /&gt;
&lt;br /&gt;
These will cause buttons to appear on menus.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ADJUST|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to make the balls turn into long, translucent beams for easy editing to manoeuvre them into their proper positions for each pose.&lt;br /&gt;
&lt;br /&gt;
 ADJUST &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;AdjustPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_ADJUST_Beams| tip on adjusting beams.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| BACK || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button labelled &amp;quot;BACK&amp;quot; that, when pressed, displays the menu one level up in the menu hierarchy.&lt;br /&gt;
&lt;br /&gt;
 BACK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
If you use the AUTOMORE and AUTOBACK, you will only need to manually enter this on the last page of a submenu (including the only page of a menu with 12 or fewer buttons).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||BALLUSERS || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button to cycle through the access levels governing who can sit on the poseballs.&lt;br /&gt;
&lt;br /&gt;
The levels are OWNER, GROUP and ALL&lt;br /&gt;
&lt;br /&gt;
 BALLUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;Level&#039;&#039; is ALL, GROUP, or OWNER.&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with the same active group tag as the MLP object can use the balls. The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHAT|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle on/off whether the MLP object will chat the name of each pose as it is selected.&lt;br /&gt;
&lt;br /&gt;
 CHAT &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;OnOff&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;OnOff&#039;&#039; is the default, either ON or OFF.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHECK || &lt;br /&gt;
&lt;br /&gt;
Adds a button that find poses with no positions and vice versa.&lt;br /&gt;
&lt;br /&gt;
 CHECK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;CheckPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note!&#039;&#039;&#039; This will reload all .POSITIONS.* files, so first backup any positions that have been saved using SAVEPOS but not manually entered into a *.POSITIONS* notecard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| DUMP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to dump the saved pose positions, suitable for saving into *.POSITIONS.* notecards.&lt;br /&gt;
&lt;br /&gt;
 DUMP &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;Dump Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The positions are chatted to owner only.  Positions for all poses are dumped.  The user may then copy/paste this into *.POSITIONS* notecards so that the positions will be retained across a position reset, or a full restart or shutdown.&lt;br /&gt;
&lt;br /&gt;
NOTE! *.POSITIONS* notecards should be released to customers with full permissions, to allow them to save positions that they&#039;ve adjusted to fit their avatars.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.POSITIONS* notecards, the end user may copy/paste all the info into the main .POSITIONS notecard, and delete all the other *.POSITIONS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .POSITIONS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (DUMPPROPS) || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
To add a button that will save prop configurations, use the following line:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Dump Props | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
&lt;br /&gt;
This adds a button named &amp;quot;Dump Props&amp;quot; (or whatever you prefer) that causes all the prop positions to be printed to the screen. They are visible to the MLP product owner only. The user may then copy/paste this text to *.PROPS* notecards for permanent storage.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.PROPS* notecards, the end user may copy/paste all the info into the main .PROPS notecard, and delete all the other *.PROPS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .PROPS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.PROPS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| HIDE || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become invisible. Not many MLP product makers bother with offering this button. The opposite is the SHOW command.&lt;br /&gt;
&lt;br /&gt;
 HIDE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| INVISIBLE || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle visibility for the prim that the MLP scripts are in.  Note: this does not apply to the balls or any other prims, even linked ones.&lt;br /&gt;
&lt;br /&gt;
 INVISIBLE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| LINKMSG  || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button that will send a specified link message to other scripts in the object when the button is pressed.  This is useful for adding scripted features to MLP2 without having to modify MLP2 scripts.&lt;br /&gt;
&lt;br /&gt;
 LINKMSG &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;menu&#039;&#039;,&#039;&#039;primnum&#039;&#039;,&#039;&#039;lm-num-arg&#039;&#039;,&#039;&#039;lm-str-arg&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Parameter&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;ButtonLabel&#039;&#039; || What you want the button to be called on the menu.&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;menu&#039;&#039; || Set to 1 if the script receiving the button will pop up a menu.  It causes MLP2 not to repost its menu, to avoid menus stacking up.  Set to 0 otherwise -- (note: this doesn&#039;t inhibit MLP2&#039;s redo menu feature.)&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;primnum&#039;&#039; || &lt;br /&gt;
Set to -1 to send the link message to all prims&lt;br /&gt;
&lt;br /&gt;
Set to -4 for just the prim the script is actually in&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-num-arg&#039;&#039; || &#039;num&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-str-arg&#039;&#039; || &#039;str&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The menu user&#039;s UUID key is passed automatically as the &#039;key&#039; argument for llMessageLinked().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENU || &lt;br /&gt;
&lt;br /&gt;
Creates a menu that can be reached from other menus.  The first MENU configured becomes the main menu, which the user gets on &#039;touch&#039;.&lt;br /&gt;
&lt;br /&gt;
A menu&#039;s buttons are configured following the MENU statement.&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039;&lt;br /&gt;
or&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039; | &#039;&#039;ballcolors&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This creates a menu named &#039;&#039;name1&#039;&#039;, and a button named the same on the main menu.&lt;br /&gt;
&lt;br /&gt;
Those who can access it are specified by &#039;&#039;who&#039;&#039;, one of the following:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ALL || Anyone can use it&lt;br /&gt;
|-&lt;br /&gt;
|| GROUP || Only those who are wearing a group tag that matches the object&#039;s group can use it&lt;br /&gt;
|-&lt;br /&gt;
|| OWNER || Only the object owner can use it&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ballcolors&#039;&#039; is a list of zero to four ball color names, separated by vertical bars (&amp;quot;|&amp;quot;).  The color name MUST be in UPPER-CASE. The following ball color names are supported:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Version&lt;br /&gt;
!Colors&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2 || BLUE PINK&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2.1 || PINK, BLUE, PINK2, BLUE2, GREEN, MAGENTA, RED, ORANGE, WHITE, BLACK, YELLOW, CYAN, RED2, TEAL, GREEN2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See under Menu Parameters section for greater details.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 MENU MyMenu | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Creates a menu named Mymenu.  Poses in this menu will have 2 balls, a pink and a blue one.&lt;br /&gt;
&lt;br /&gt;
Subsequent menu configuration lines add buttons to this menu, until the next MENU command.  There is a limit of 12 buttons to a menu, unless AUTOMORE is used.&lt;br /&gt;
&lt;br /&gt;
Note that, unless you use the MENUORDER directive, these menu items will be offered to users in the usual SL ass-backwards-by-three manner.&lt;br /&gt;
&lt;br /&gt;
How do we get a button to get to this menu?  There are two ways.&lt;br /&gt;
&lt;br /&gt;
The first way is the same as with original MLP: use the TOMENU command to create a button to get to this menu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button label must match the menu name.  Menu names are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
The second way requires &amp;quot;TOMENU -&amp;quot; configuration lines in the main menu.  For any MENU statement where no preceeding TOMENU matches the menu name, a menu button is automatically added to the main menu.  (For this to work, the main menu must be filled with &amp;quot;TOMENU -&amp;quot; statements, which create blank spaces for this purpose.  When MONO comes out and memory is less of an issue, we will try to make this simpler!)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||MENUUSERS || &lt;br /&gt;
&lt;br /&gt;
Adds a button that cycles through the access levels governing who can use the menu.&lt;br /&gt;
&lt;br /&gt;
 MENUUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Level&#039;&#039; specifies the default, and must be one of the following: OWNER, GROUP, or ALL&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with active group tag amtching the MLP object&#039;s group can use the main menu. (You can restrict access to sub-menus on a per menu basis. See MENU above for more info.) The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| OFF || &lt;br /&gt;
&lt;br /&gt;
Adds a button to turn the MLP system off.&lt;br /&gt;
&lt;br /&gt;
 OFF &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Shutdown!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When turned off, MLP deletes any balls, turns off all the scripts except for one that will turn it back on again when the owner touches it.&lt;br /&gt;
&lt;br /&gt;
This reduces any contribution the MLP might be making to lag.&lt;br /&gt;
&lt;br /&gt;
Any saved poses or prop configurations that have not been saved to *.POSITIONS* and *.PROPS* files are irrevocably lost.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| POSE  || &lt;br /&gt;
&lt;br /&gt;
Adds a button for a pose.&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;PoseName&#039;&#039; | &#039;&#039;AnimList&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PoseName&#039;&#039; is the button label, and also the pose name (found in the *.POSITIONS* and *.PROPS* notecards).&lt;br /&gt;
&#039;&#039;AnimList&#039;&#039; is a list of animation names, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The number of animations must match the number of ball colors listed in the corresponding MENU configuration.&lt;br /&gt;
That is, if the MENU has 3 poseballs, you must provide 3 animation names.&lt;br /&gt;
&lt;br /&gt;
The animations are applied to the balls specified, in order.  That is, if the ball colors are &amp;quot;PINK BLUE PINK&amp;quot;, three animations should be listed.  The first applies to the first pink ball, the second to the blue ball, and the third animation applies to the third ball, which is pink. (See also &amp;quot;Ball Colors&amp;quot; option below for more information.)&lt;br /&gt;
&lt;br /&gt;
The ball positions are specified in a .POSITIONS* file, discussed below.  If there is no .POSITIONS entry for a pose, the default pose is used.  It&#039;s a good idea to always set up the default pose first for a new MLP product, to avoid balls rezzing underground or in other inconvenient locations.&lt;br /&gt;
&lt;br /&gt;
Each animation name must have a corresponding animation in the object&#039;s contents, unless it is a built-in animation.  Yyou cannot refer to animations by UUID.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| REDO ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to enable/disable popping the menu back up after making a selection.&lt;br /&gt;
&lt;br /&gt;
 REDO &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
By default, when a user makes a choice on an MLP menu, the menu re-presents itself for further use.&lt;br /&gt;
&lt;br /&gt;
If you offer this command button to users, and they click it, it will toggle this feature off and on.&lt;br /&gt;
&lt;br /&gt;
Few MLP product makers offer this button to users, because turning off the menu coming back can create the perception that something is broken.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|| RELOAD || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.POSITIONS* and *.PROPS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RELOAD &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This button is useful after changing *.POSITIONS* or *.PROPS* notecards, to verify that you did what you intended. It&#039;s considerably faster than a complete reset since the menu isn&#039;t reread.&lt;br /&gt;
&lt;br /&gt;
General rule: if you changed a .MENUITEMS card, do Menu reset. If you changed a .POSITIONS or .PROPS card, do Pos Reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESET || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.MENUITEMS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RESET &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Menu&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In addition to re-reading the notecards, it resets most of the MLPV2 scripts.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESTART || &lt;br /&gt;
&lt;br /&gt;
Adds a button to do what both RESET and RELOAD do, combined.&lt;br /&gt;
&lt;br /&gt;
 RESTART &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reload&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
RESTART is therefore the most thorough command to use for a complete reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SAVE || &lt;br /&gt;
&lt;br /&gt;
Adds a button to save ball positions for the current pose.&lt;br /&gt;
&lt;br /&gt;
 SAVE &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is typically &amp;quot;Save Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Immediately after adjusting a pose, always, &#039;&#039;&#039;&#039;&#039;ALWAYS&#039;&#039;&#039;&#039;&#039; click this button! You will no doubt, like all of us, lose a few adjustments that you make when you first start out with MLP before this gets scarred into your habits.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caution!&#039;&#039;&#039; This is not permanent.  Anything that causes the *.POSITIONS* cards to be re-read will wipe these settings out from script memory. A pose is permanent only if it&#039;s saved in a *.POSITIONS* card.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: the poseballs cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (SAVEPROP) || &lt;br /&gt;
&lt;br /&gt;
To add a button to save the prop location for the current pose, use the following command:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Save Prop | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;Save Prop&amp;quot; is the button name (and can be whatever you choose).&lt;br /&gt;
&lt;br /&gt;
You use this button after you have adjusted a prop. This stores information about the position, etc, to script memory.&lt;br /&gt;
&lt;br /&gt;
This information will also be printed to the screen (only the owner can see it.) This information should be copied to the .PROPS notecard for permanent storage. You can either do this right on the spot, or arrange and save a whole bunch of prop positions, and then use the DUMPPROPS command to print out all the prop info at once for copying and pasting to the .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a prop cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||SHOW || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become visible.&lt;br /&gt;
&lt;br /&gt;
 SHOW &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not many MLP product makers bother with offering this command. The opposite is the HIDE command.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| STOP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to delete any balls and unseat any participants.&lt;br /&gt;
&lt;br /&gt;
 STOP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
Note though that, unlike OFF (covered above) it does not significantly reduce any contribution the MLP system might be making to lag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SWAP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to swap positions between the first and second balls for any pose.&lt;br /&gt;
&lt;br /&gt;
 SWAP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
It has no effect on any third or fourth balls in a pose.  However, this behavior may change in future versions.&lt;br /&gt;
&lt;br /&gt;
Note: In some animation menuing systems such as XPOSE (as of summer 2008), hitting the SWAP button only swaps the current pose; the swap is lost at the next pose. In MLP, the SWAP is maintained until a user chooses to SWAP back.&lt;br /&gt;
&lt;br /&gt;
IMHO, the XPOSE behavior is better, and I might change this in a future version.  [Lear Cale]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| TOMENU || &lt;br /&gt;
&lt;br /&gt;
Adds a button to get to another menu.&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MenuName&#039;&#039; is used as the button label, and must exactly match the name of the menu (case-sensitive).&lt;br /&gt;
&lt;br /&gt;
If a menu (say, &amp;quot;Foo&amp;quot;) exists, and there is no &amp;quot;TOMENU Foo&amp;quot; statement on a preceeding menu, and if there are unused &amp;quot;TOMENU -&amp;quot; statements for the main menu, a button for &amp;quot;Foo&amp;quot; is added to the main menu, using up a &amp;quot;TOMENU -&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about supplying lots of TOMENU - slots on your main menu. If MLPv2 doesn&#039;t need them, it will just ignore them!&lt;br /&gt;
&lt;br /&gt;
Note that if you are offering [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| modules]], you must provide some &amp;quot;TOMENU -&amp;quot; slots on your main menu for the module menu buttons to appear.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| Z* || &lt;br /&gt;
&lt;br /&gt;
The Z command adds a button that allows end users to easily adjust for themselves the height of the poseballs.&lt;br /&gt;
&lt;br /&gt;
 Z &#039;&#039;sign&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For this command (and only for this command!), no spaces are allowed between the items (Z, &#039;&#039;sign&#039;&#039;, and &#039;&#039;number).  For example:&lt;br /&gt;
&lt;br /&gt;
 Z+1&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
&lt;br /&gt;
The numbers are treated by MLP as being a measurement in centimetres. Each time a user clicks a button, say Z+5, the height will be increased by 5 centimetres. If they have previously clicked the Z+5 button, then the height will be increased by an additional 5 centimetres.&lt;br /&gt;
&lt;br /&gt;
A Z-5 button, if offered, would decrease the height by 5 cm.&lt;br /&gt;
&lt;br /&gt;
Z adjustments chosen by users apply to all the poses, not just the one currently being used.&lt;br /&gt;
&lt;br /&gt;
Note: the ongoing tally of these adjustments are stored in the Object Description of the prim that holds the MLP scripts, so any descriptions you put there will be replaced.&lt;br /&gt;
&lt;br /&gt;
To clear them, you need to either use the Z buttons to set the offset back to 0, or, edit the object, select the MLP prim if it&#039;s not the root prim, and clear the description.&lt;br /&gt;
&lt;br /&gt;
Traditionally, MLP product makers have put these Z commands under the OPTIONS menu.&lt;br /&gt;
These were recently moved to a HEIGHT submenu, to make room for the Props commands.&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2|  Tip! Options Menu]] for more info on how exactly to do this.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2| Tip! Options Menu]] table at the end of this page for helpful advice on arranging many of these menu commands into a tidy sub-menu.&lt;br /&gt;
&lt;br /&gt;
=== MENU PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to MENU statement lines.&lt;br /&gt;
&lt;br /&gt;
==== Ball Colors ====&lt;br /&gt;
&lt;br /&gt;
If a MENU has no pose ball colors listed, it should have no POSE buttons.&lt;br /&gt;
&lt;br /&gt;
When, however, a particular MENU will contain POSE statements in it, then the MENU statement must be followed by a set of ball colors to be used for all poses in this particular menu.&lt;br /&gt;
&lt;br /&gt;
One to four balls can be specified, supporting poses for up to four participants. The balls are rezzed as necessary when a pose in the menu is selected.&lt;br /&gt;
&lt;br /&gt;
Supported colors as of summer 2008 are:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|| PINK || PINK2 || BLUE  || BLUE2 || WHITE&lt;br /&gt;
|-&lt;br /&gt;
|| GREEN || GREEN2  || RED  || RED2 || BLACK&lt;br /&gt;
|-&lt;br /&gt;
|| MAGENTA || ORANGE || YELLOW  ||CYAN  ||TEAL&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PINK2, BLUE2, RED2, and GREEN2 are darker their respective colors with no number after them. &lt;br /&gt;
&lt;br /&gt;
Note: The colors must be given in uppercase as shown above.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 MENU boy-girl | ALL | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Boy Only | ALL | BLUE | HIDE&lt;br /&gt;
&lt;br /&gt;
 MENU Girl Only | ALL | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Anyone | ALL | GREEN&lt;br /&gt;
&lt;br /&gt;
 MENU 3Some  | ALL | PINK | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU 4Some  | ALL | PINK | BLUE | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== POSE PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to POSE statement lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Animations (Facial) ====&lt;br /&gt;
&lt;br /&gt;
In the POSE line, add the suffixes listed below to the animation names to cause facial expressions.  (You don&#039;t change the animation name in inventory, just add the suffix to the anim name in the POSE line.)&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently (April 2011) no menu button to allow MLP users to turn facial expressions off and on.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!suffix&lt;br /&gt;
!expression&lt;br /&gt;
|-&lt;br /&gt;
|| * || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::1 || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::2 || surprise&lt;br /&gt;
|-&lt;br /&gt;
|| ::3 || tongue out&lt;br /&gt;
|-&lt;br /&gt;
|| ::4 || smile&lt;br /&gt;
|-&lt;br /&gt;
|| ::5 || toothsmile&lt;br /&gt;
|-&lt;br /&gt;
|| ::6 || wink&lt;br /&gt;
|-&lt;br /&gt;
|| ::7 || cry&lt;br /&gt;
|-&lt;br /&gt;
|| ::8 || kiss&lt;br /&gt;
|-&lt;br /&gt;
|| ::9 || laugh&lt;br /&gt;
|-&lt;br /&gt;
|| ::10 || disdain&lt;br /&gt;
|-&lt;br /&gt;
|| ::11 || repulsed&lt;br /&gt;
|-&lt;br /&gt;
|| ::12 || anger&lt;br /&gt;
|-&lt;br /&gt;
|| ::13 || bored&lt;br /&gt;
|-&lt;br /&gt;
|| ::14 || sad&lt;br /&gt;
|-&lt;br /&gt;
|| ::15 || embarrassed&lt;br /&gt;
|-&lt;br /&gt;
|| ::16 || frown&lt;br /&gt;
|-&lt;br /&gt;
|| ::17 || shrug&lt;br /&gt;
|-&lt;br /&gt;
|| ::18 || afraid&lt;br /&gt;
|-&lt;br /&gt;
|| ::19 || worry&lt;br /&gt;
|-&lt;br /&gt;
|| ::20 || sleep&lt;br /&gt;
|-&lt;br /&gt;
|| ::21 || random (for MLPv2.4v or higher, produces random surprise / pleasure expressions)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: 20 is a combination of disdain and smile, the closest that could be found for sleep.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There must be NO SPACE between the animation name, and the suffix. Example: &lt;br /&gt;
&lt;br /&gt;
 POSE Sleep 01 | Sleep 01 femalesleep::20 | Sleep 01 malesleep::20 &lt;br /&gt;
&lt;br /&gt;
To make the expression happen periodically rather than constantly, add another extension and the length of the repetition cycle (in seconds).&lt;br /&gt;
&lt;br /&gt;
For example, to use MyAnim with open mouth every 5.5 seconds:&lt;br /&gt;
&lt;br /&gt;
 POSE Mypose | MyAnim::1::5.5&lt;br /&gt;
&lt;br /&gt;
If during menu boot you get an error that says &amp;quot;animation xyx not found&amp;quot;, but you know that animation xyx really is in there, check to see that you didn&#039;t put a space before the expression suffix after all.&lt;br /&gt;
&lt;br /&gt;
Note that this suffix appears only in the POSE line of a MENU; the actual name of the animation in the object&#039;s contents folder should *not* be changed to have this suffix. (Many animations are sold no mod; so you wouldn&#039;t be able to, anyway.)&lt;br /&gt;
&lt;br /&gt;
== .POSITIONS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
The .positions notecards, as their name implies, provide a place for storing information about positions of the poses in the menu.&lt;br /&gt;
&lt;br /&gt;
As long as any position adjustments you have made have only been saved via the SavePos buttons, assume them to be temporary. They are only saved in script memory, and script memory is volatile. If you hand the MLP v 2.0 object to someone else, or if your sim crashes really terribly or if the script blows up with a stack-heap error, etc ... you may lose all the work you&#039;d thought you&#039;d saved.&lt;br /&gt;
&lt;br /&gt;
The *.POSITIONS* notecards provide a safety against losing your work.&lt;br /&gt;
&lt;br /&gt;
You create *.POSITIONS* notecards by your manually copying and pasting in information from the &amp;quot;Save Pos&amp;quot; or &amp;quot;Dump Pos&amp;quot; buttons (SAVE and DUMP commands described above).  SL does not allow scripts to write data to notecards, so you must do this yourself.&lt;br /&gt;
&lt;br /&gt;
NOTE: If the .POSITIONS notecard is no modify, or is placed in a no modify prim, people will not be able to open the notecard at all. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lines in the .positions notecard look something like this:&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LieHold1&amp;quot; is the name of a pose (from the POSE statement in a *.MENUITEMS* file).&lt;br /&gt;
&lt;br /&gt;
The 4 vectors in the above example represent in order:&lt;br /&gt;
first ball position, first ball rotation, second ball position, second ball rotation&lt;br /&gt;
&lt;br /&gt;
If there are 3 and / or 4 balls also involved in a given pose, then the pattern repeats on for them as well.&lt;br /&gt;
&lt;br /&gt;
If you rename a pose in the menu that you have already stored a position in the notecard for, be sure to edit the .positions card, locate that pose in it, and give it the new name as well to match.&lt;br /&gt;
&lt;br /&gt;
Be sure to purge out position lines for which menu items no longer exist. This is one instance in which tidiness really does pay off: all that old, unneeded position information is read into the scripts&#039; memory, which can make you think that your MLP product is &amp;quot;full&amp;quot; (that fatal stack-heap message) and can&#039;t hold any of the other poses you had planned to add.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on .positions cards when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: Comparing positions to menu items is easier and the work of seconds as opposed to minutes if you keep the positions information cleaned up. See [[#TIP.21_Positions_Notecard_tidying| the tip on tidying .POSITIONS notecards]], if you wish to do this extra (not-required) work.&lt;br /&gt;
&lt;br /&gt;
Remember that purchasers of your MLP2 product should be able to adjust poses to fine-tune them to their own heights, sizes, etc. All *.POSITIONS* notecards should be supplied to end-users with MODIFY rights so that they too can permanently save all their hard work. {{Footnote|Some furniture makers prefer to sell their furniture no mod so that others can&#039;t just disassemble it and copy the dimensions of the pieces and thereby duplicate the furniture -- fair enough. However, if the .positions notecard is in a no-mod prim, notecards inside it will also be no mod. &lt;br /&gt;
&lt;br /&gt;
There doesn&#039;t seem to yet be a way around this. While llAllowInventoryDrop in a small add-on script might seem promising (and the change event could be set to delete the old .positions card), the problem remains that by then, a fresh positions card the user had dropped in would already be named .positions 1, an invalid file name. Because you can&#039;t rename objects inside a prim, you&#039;d have to then have your script delete that .positions 1 card as well, and then invite the user to drop his/her fresh .positions notecard in a second time, which would be very confusing. Or, using the LINKMSG feature, create a button that tells a script to delete the .positions notecard, and then invites the user to drop a new one in. But you&#039;d want that script to ask the user if s/he really knew what they were doing.&lt;br /&gt;
&lt;br /&gt;
Note as well that a no-mod prim prevents the option of allowing customers to purchase add-on modules for you -- unless provision is made for an llAllowInventoryDrop.}}&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) to set a memory limit on the ~memory script, use a line like this:&lt;br /&gt;
 {MEMORY} &amp;lt;&#039;&#039;MemoryLimit&#039;&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SEQUENCE NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEQUENCE | seqence-name | NOCHAT&amp;lt;br /&amp;gt;&lt;br /&gt;
use NOCHAT to inhibit chatting of poses&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MENU | menu-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set number &amp;amp; colors of balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POSE | pose-name | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
start a pose (chan &amp;amp; message are optional; message is whispered).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AVWAIT | 0 1 2 3 | chat-message-if-waiting&amp;lt;br /&amp;gt;&lt;br /&gt;
pause the entire sequence set until the balls listed are sat on (0 1 2 3 in this example)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
examples:&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for two people: AVWAIT | 0 1 | Waiting for both people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for three people: AVWAIT | 0 1 2| Waiting for three people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for four people: AVWAIT | 0 1 2 3| Waiting for four people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Only have one (1) AVWAIT line per sequence set, or you may get stack-heap blow-ups.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WAIT | wait-seconds&amp;lt;br /&amp;gt;&lt;br /&gt;
pause before executing next command&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GOTO | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
go to a label, to loop a portion of a sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LABEL | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set a target for GOTO&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REPEAT&amp;lt;br /&amp;gt;&lt;br /&gt;
repeat the whole sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SAY | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
say the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WHISPER | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
whisper the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SOUND | sound-name | 0 to 1.0&amp;lt;br /&amp;gt;&lt;br /&gt;
plays sound from  &#039;&#039;&#039;prim contents&#039;&#039;&#039; at volume 0 to maximum&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) Sets memory limit of the ~sequencer script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE: The chat messages can include the first names of participants using /0 for avatar on first ball, /1 for av on 2nd ball, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence scripting debugging ===&lt;br /&gt;
&lt;br /&gt;
(very advanced)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put any one of these are the very top of your sequences notecard, outside of any defined sequence, in order to turn on debugging for the sequences script:&lt;br /&gt;
&lt;br /&gt;
debug | 1&amp;lt;br /&amp;gt;&lt;br /&gt;
sequence start/stop&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 2&amp;lt;br /&amp;gt;&lt;br /&gt;
echo each command as executed&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 4&amp;lt;br /&amp;gt;&lt;br /&gt;
avatar hop on/off&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | -1&amp;lt;br /&amp;gt;&lt;br /&gt;
all debugging&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequences and Props ===&lt;br /&gt;
Yes, props will still work for items used in sequences.&lt;br /&gt;
&lt;br /&gt;
== TIPS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! ADJUST Beams |Finding the ADJUST beams hard to see? First, make sure that you have set world to noon. If you still find them difficult to edit, haul the ~ball out of your prim.&lt;br /&gt;
&lt;br /&gt;
Edit the ~ball script in it, and look for this part of the script in the listen event:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
        } else if (str == &amp;quot;ADJUST&amp;quot;) {&lt;br /&gt;
            llSetAlpha(0.2,ALL_SIDES);&lt;br /&gt;
            llSetText(&amp;quot;Adjust&amp;quot;,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
            llSetScale(&amp;lt;0.1,0.1,5.0&amp;gt;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
It&#039;s the llSetAlpha setting it to only .2 that makes it hard to see. Try it at .4, or .6, or higher.&lt;br /&gt;
&lt;br /&gt;
Save, take the ball into inventory, then delete the old one in the prim and replace it with your adjusted one.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Caveat|&lt;br /&gt;
Though all animations will work with MLPv2, not every single one you come across will work reliably. &lt;br /&gt;
&lt;br /&gt;
Some animations, if they happen to have been made by the creator in a certain way, will work as expected after certain other animations, but not after others. You&#039;ll get different results depending on which pose you ran last.&lt;br /&gt;
&lt;br /&gt;
The problem is animations that have their hip position the same in their T frame and first animation frame. They just won&#039;t work with MLP.&lt;br /&gt;
&lt;br /&gt;
Example: if you have 3 anims, 2 with hip positions set and one without, the hip position for the one without will be the hip position left over from whichever of the last two anims you used. It&#039;s the way SL animations work. If there&#039;s no change in any joint between the &amp;quot;T&amp;quot; frame (first frame in bvh file) and the first animation frame (second frame in bvh file), SL ignores that joint for the whole animation. And when all other animations are turned off, this means that these joints are left free to do whatever SL does with them. It leaves them as they were from the previous anim, or overrides them with SL builtin motions like typing, head movement, arm pointing while editing, etc.&lt;br /&gt;
&lt;br /&gt;
The values in the hip joint aren&#039;t important; what&#039;s important is that that they *be* different between T frame and 1st animation frame. For MLP, you want every joint in the animation to have been moved (except head, if you want it to be able to move with the mouse.)&lt;br /&gt;
&lt;br /&gt;
This problem can be avoided when making animations if you move the hip even just 1 degree, and normally the stomach 1 degree in the opposite direction.&lt;br /&gt;
&lt;br /&gt;
So sadly, in the course of things, odds are, you&#039;re just going to buy some animations that just ain&#039;t going to work with MLP. And there is no way of knowing in advance.&lt;br /&gt;
&lt;br /&gt;
When creating animations for MLP, Lear Cale highly recommends using priority 3.  This disallows the typing while chatting animation, but allows head movement (if the head joint is not moved in the beginning of the animation).  It also allows someone to create a priority 4 animation and run it to override MLP animation behavior (until the next pose is selected). }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Permission|&lt;br /&gt;
The ball user, upon first sitting on a ball, will be asked permission to animate them. S/he must say yes to yes, or they will end up just &amp;quot;hovering&amp;quot; on the poseball.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;permission pls&amp;quot; menu often gets hidden behind the MLP main menu (if you are the one who called up the menu.) You need to click the &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; to cycle through the menus on your screen to find the permissions prompt.  This is SL behaviour and there&#039;s no way to fix it, other than turning &amp;quot;redo&amp;quot; menu off in MLP.&lt;br /&gt;
&lt;br /&gt;
NOTE: in their great wisdom, SL modified the 1.20 viewer to show something other than &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; for this button.  Damn them.&lt;br /&gt;
&lt;br /&gt;
If you are wondering why permission must be asked, when normally sitting on something is taken as implying permission to be animated, it&#039;s because it&#039;s not actually the balls that are doing the animating -- it&#039;s a script in the MLP. Because one script is not allowed (for security reasons) to pass permission to another script, the scripts in the MLP itself can&#039;t take advantage of any permissions the poseballs have acquired.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animation Synchronization |Animations appear to start separately per ball once an avatar sits on it. Thus, they&#039;re not in sync.&lt;br /&gt;
&lt;br /&gt;
In fact, the animations are started at the same time. However, it takes time for the animations to get sent between SL and the client, so as a result they don&#039;t look synchronized.&lt;br /&gt;
&lt;br /&gt;
There is no simple feature in MLPV2 to automatically synchronize poses as such. You can manually synchronize by shifting to another pose and then shifting back again.  (Starting with &lt;br /&gt;
&lt;br /&gt;
There is no built-in feature to automatically synchronize, as there is with couples danceballs.  Prior to MLPV2.4z4, you can manually synchronize by changing to another pose and then back.  Starting with MLPV2.4, you can manually resynchronize by selecting the same pose again.&lt;br /&gt;
&lt;br /&gt;
There is an advanced feature of MLPV2 that you could use to get automatic periodic synchronization: Sequences.&lt;br /&gt;
&lt;br /&gt;
A sequence is simply a list of poses that MLPV2 will play at the touch of a button, with the option to repeat the sequence or a portion of the sequence. See the example sequence in the distribution.  You could set up a simple sequence that plays one pose, waits some time that&#039;s at least as long as the animations, and repeats, like this, which goes in .SEQUENCES notecard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SEQUENCE | snuggle-seq | NOCHAT&lt;br /&gt;
MENU | couples&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
AVWAIT | 0 1&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
WAIT | 30&lt;br /&gt;
REPEAT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Animations and balls|&lt;br /&gt;
Animations remain in the main MLP object; they are never placed in the poseballs. The animations are played from within the main MLP product; the poseball is just the delivery vehicle. Consequently, poseballs can be deleted or lost without the main product being affected. And, the poseballs themselves are just copies of the one inside the MLP product.&lt;br /&gt;
&lt;br /&gt;
A ball will commit suicide if left behind somewhere (the MLP object needs to be within 20 metres.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball text|&lt;br /&gt;
By default, both the poseball floating text and the right-click menu &#039;sit&#039; choice text is the word &amp;quot;LOVE&amp;quot;.  You can set these to whatever you want by editing the description of ~ball in object contents.  If you type in that field the word &amp;quot;none&amp;quot; (without the quotes), or just type in a space or two, there will be no floating text, and the right-click menu &#039;sit&#039; choice text becomes the system default of just &amp;quot;Sit Here&amp;quot; (for English viewers).}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Phantom Balls|&lt;br /&gt;
To make your balls rez as phantom, put an asterisk in the ~ball description line.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! More than 6 balls|&lt;br /&gt;
There are no plans to expand beyond 6 balls active at once. If this is totally necessary for you, you&#039;d be better off just going with a product that actually supports the number of avatars you want, such as XPOSE. You&#039;ll save yourself and your customers time and confusion by going with a product that was designed to handle larger numbers from the ground up.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Balls are buried in furniture|&lt;br /&gt;
Sometimes when you position the balls correctly for an animation, the balls end up buried in furniture.&lt;br /&gt;
&lt;br /&gt;
This is a property of the animation: the hip position in the animation is too high.  While it is in theory possible to fix this in MLP scripts, it would be hard to do, especially without using up lots of memory for poses.&lt;br /&gt;
&lt;br /&gt;
Most people know that when this happens they can select another pose first, jump on, and then change to the pose they want. Consequently, the simplest workaround is to make sure the first pose in each menu has all balls visible.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could ask the creator of the animation to adjust it, but the chances of them doing this just for your piece of furniture are not high.&lt;br /&gt;
&lt;br /&gt;
If someone stands up while on balls that are buried in furniture, they will get ejected from the furniture unceremoniously. This won&#039;t happen if they use the STOP button on the menu instead.&lt;br /&gt;
&lt;br /&gt;
Vesta Martynov suggests another workaround -- changing the offset that the ball is rezzed at. (Note that this will apply to all poses, not just the problem ones.) Her work-around is, before you start on a MLP product, to take the ball out and rez it on the ground. Edit the script in the ball, and search for this SitTarget line:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
The .01 there is the vertical offset. She changes it to something like this:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,-0.25&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
Save your changes, take the ball back into your inventory, and use it to replace the one that was inside the MLP.&lt;br /&gt;
&lt;br /&gt;
After you do this, all the balls and animations will be lifted, so you can go in and lower the animations, but you will no longer have balls sinking into your furniture.&lt;br /&gt;
&lt;br /&gt;
(Vesta Martynov, conversation in MLP group, 2009-06-11 19:46)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball scripts|&lt;br /&gt;
When updating your version of MLPv2 scripts, make sure you update the script in ~ball as well.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Changing the number of active Balls|&lt;br /&gt;
When going from a pose in a menu with 4 ball colors to a pose in a menu with 2 balls, the 2 balls are deleted. Assuming you&#039;re not using phantom balls, if the balls rez again (say you go back to a pose in a menu with 4 balls), the balls should bump anyone standing in their way out of the way. People wanting to use the newly re-rezzed balls and be animated by them will have to hop back on them. When changing the number of balls active, bear in mind that the number of animations in a POSE line must match the number of ball colors in the MENU line above. You can&#039;t mix poses with 2 anims and poses with 4 anims in the same menu section. This is not supported.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Default Pose | &lt;br /&gt;
You need to set position coordinates for the default pose. To do this, on the MLPV2 main menu click the &amp;quot;adj-default&amp;quot; button, then ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal. When you have finished, delete the .menuitems.zz-default notecard from the prim.&lt;br /&gt;
&lt;br /&gt;
If on the main blue menu you do not see a button called &amp;quot;adj-default&amp;quot;, do the following steps:&lt;br /&gt;
&lt;br /&gt;
1) Create a notecard with the file name of:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.Menuitems.zz-default&lt;br /&gt;
&lt;br /&gt;
Paste the following in as content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
// The &amp;quot;default&amp;quot; pose below is for adjusting &amp;quot;default&amp;quot; position.&lt;br /&gt;
// Since there are currently no other items in this menu, you can comment out the whole menu&amp;lt;br /&amp;gt;&lt;br /&gt;
// or simply delete this file when  you&#039;ve done that.&lt;br /&gt;
&lt;br /&gt;
MENU adj-default | ALL | BLUE | PINK | BLUE | PINK&lt;br /&gt;
POSE default | sit_ground | sit_ground | sit_ground | sit_ground&lt;br /&gt;
SWAP&lt;br /&gt;
ADJUST&lt;br /&gt;
SAVE Save Pos&lt;br /&gt;
DUMP Mem Dump&lt;br /&gt;
BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Tip! If the product you are making is only for 1 or 2 people, then you don&#039;t need to include all 4 balls that are listed in the menu above. For a solo product, you can just do instead:&lt;br /&gt;
&amp;lt;pre&amp;gt; MENU adj-default | ALL | BLUE&lt;br /&gt;
 POSE default | sit_ground&lt;br /&gt;
 ADJUST&lt;br /&gt;
 SAVE Save Pos&lt;br /&gt;
 DUMP Mem Dump&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the prim where you are working with MLPV2.&lt;br /&gt;
&lt;br /&gt;
2) Make sure the main menu notecard has a spare TOMENU slot to fit the adj-default choice into:&lt;br /&gt;
&lt;br /&gt;
 TOMENU -&lt;br /&gt;
&lt;br /&gt;
3) restart the MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
4) ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal.&lt;br /&gt;
&lt;br /&gt;
5) When you have finished, delete the .menuitems.zz-default notecard from the prim.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard Editing|&lt;br /&gt;
If the MLP prim contains many animations, access to a notecards contents can be PAINFULLY slow.&lt;br /&gt;
&lt;br /&gt;
First, make sure the prim is ready to let you open the notecard. Right-click on the notecard that you see in the contents folder. If you get a big menu of choices, rather than just the standard 4 of Open, Properties, Rename, Delete, then the prim isn&#039;t ready to let you open the notecard. You simply have to wait. Sometimes, you may need to wait up to 2 to 4 minutes. Yes, ridiculous -- but that&#039;s SL.&lt;br /&gt;
&lt;br /&gt;
Make all your changes before saving. Once you save, the notecard you have open may no longer be the notecard that is inside the prim (sic.) Once you have saved, even if you did so by accident out of habit, leave the notecard opened for a few seconds, then close it, and wait until the prim is ready to let you open it again if you need to do further edits.&lt;br /&gt;
&lt;br /&gt;
Note: as of summer 2008, the wait time for notecards to open from inside prim folder contents seems to be getting increasingly worse, and the system seems to be getting increasingly intolerant of allowing repeated saves on the same opened notecard. Thus, the advice to close and re-open after a save.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Modules -- multiple .menuitems and .positions notecards|&lt;br /&gt;
There can be several *.MENUITEMS* and *.POSITIONS* notecards in an MLP product (where &amp;quot;*&amp;quot; is any text that&#039;s allowed in a notecard name). This is to allow the addition of modules to the product. This allows you the option, for example, of letting customers purchase an MLP product for couples, and then coming back later to purchase an odd-on for 3Somes. Customers then pad home, edit the contents folder of their MLP product, plop in the add-on stuff, and restart their MLP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a module&#039;s menu appears as a button on the MLP product&#039;s main menu. For this to actually happen, you *must* provide a blank slot for it by supplying a TOMENU - parameter on the main menu.  Normally, there should be a bunch of these in the main menu.&lt;br /&gt;
&lt;br /&gt;
The add-on will consist of a .menuitems card, a .positions card, and the associated animations (with permissions set correctly.)&lt;br /&gt;
&lt;br /&gt;
For you as a vendor to make a module, you create a .MENUITEMS.xxx notecard, and a corresponding .POSITIONS.xxx notecard (where xxx can be anbything and is normally thought of as the name of the module.) If this module uses props, you also create a .PROPS.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
A *.MENUITEMS* card for a module should have no default or stand pose, etc. It normally has only the actual menus being added and the associated poses.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;MENU myAddOns&lt;br /&gt;
 TOMENU myAddOn1&lt;br /&gt;
 TOMENU myAddOn2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn1 | ALL | PINK | BLUE&lt;br /&gt;
 POSE Whoohoo! | Bump1 | Bump2&lt;br /&gt;
 POSE Zowee | Grind1 | Grind2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn2 | ALL | PINK | BLUE | PINK&lt;br /&gt;
 POSE Fubar | Dance1 | Dance2 | Dance3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test, you would then drop all associated notecards (.menuitems.xxx, .positions.xxx and .props.xxx if using) into the MLP product, along with the necessary animations and props, of course, and restart the MLP product. (Of course, if you were selling it as a separate add-on, you would after remove the above components from the main product, and package them separately.) Remember if you make any pose position adjustments during testing that the position information should be copied and pasted to the relevant .positions.xxx notecard -- not the main .positions notecard, because you are preparing a sold-separately module. Ditto for any prop adjustments, which go into the .props.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
Purchasers of an add-on need to always keep that .menuitems.xxx notecard in their product. However, the .positions.xxx and the .props.xxx notecards have, in a way, a limited lifespan. When you do a DUMP command, you copy / paste all that info into the notecard named simply .positions -- that is the main .positions notecard. Or, into .props notecard, in the case of a DUMPPROPS command. All the info that the subsidiary .positions.xxx and .props.xxx notecards hold is now amalgamated into the main notecard, and the subsidiary ones are no longer needed. They can be deleted. But to be clear, do not delete their corresponding .menuitems.xxx notecards.&lt;br /&gt;
&lt;br /&gt;
Multiple .positions notecards are read by the script in the same order they appear in object inventory.&lt;br /&gt;
&lt;br /&gt;
 Note: it is best to be using the MENUORDER directive when offering modules.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Sub-Menus|Can you add a module menu ie: .MENUITEMS.myposes and have it show as a top menu item with sub menus? Something that would give a My Poses button that when clicked would open a sub menu dialog with buttons for my poses 1, my poses 2 etc.&lt;br /&gt;
&lt;br /&gt;
Abolutely, and that&#039;s the best way to do it.&lt;br /&gt;
&lt;br /&gt;
Start your .MENUITEMS.mystuff with the parent menu. Fill it with &amp;quot;TOMENU&amp;quot; statements like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MENU WhizBangInc | ALL&lt;br /&gt;
TOMENU WBI-cuddles&lt;br /&gt;
TOMENU WBI-fun&lt;br /&gt;
TOMENU WBI-freaky&lt;br /&gt;
TOMENU WBI-illegalin42states&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Options Menu|&lt;br /&gt;
By tradition, most of the common functionality command buttons are stored under a MENU called &amp;quot;OPTIONS&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Such commands include ADJUST, SAVE, DUMP, Show/Hide (aka INVISIBLE), MenuUsers, BallUsers, Chat, Dump Props, Save Prop, etc.&lt;br /&gt;
&lt;br /&gt;
As well, the z commands for height adjustment were traditionally offered there as well.&lt;br /&gt;
&lt;br /&gt;
With the rapidly-increasing number of functions available within MLPv2, however, the OPTIONS submenu is becoming very crowded.&lt;br /&gt;
&lt;br /&gt;
Consequently, consider taking all the z height adjustment options out from under OPTIONS and put them in a sub-menu like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU HEIGHT | ALL&lt;br /&gt;
 Z+1 //adjust Z = height offset in cm - use any integer to set the step size&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in the OPTIONS menu, just make this button linking to the HEIGHT submenu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU HEIGHT}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Positions Notecard tidying|&lt;br /&gt;
The lines in the .positions notecard look like this when copied and pasted in directly from chat:&lt;br /&gt;
&lt;br /&gt;
[7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e: {Lie&amp;amp;Hold} &amp;lt;-0.413,0.130,0.245&amp;gt; &amp;lt;1.0,-9.0,-0.9&amp;gt; &amp;lt;-0.539,0.207,0.155&amp;gt; &amp;lt;-0.1,-8.9,-1.1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The extraneous chatter before the {LieHold1} parameter in the curly brackets (aka braces) is ignored by the scripts, so there is no need to delete it.&lt;br /&gt;
&lt;br /&gt;
Still, if you as an MLP professional wish cleaner, easier to read content (which is a boon for easier maintenance and troubleshooting), then copy the contents of the .positions card in question into a simple text programme (such as Notepad on a Windows PC), and using the example above, you would search for:&lt;br /&gt;
&lt;br /&gt;
 [7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e:  [including the final space at the end of it]&lt;br /&gt;
&lt;br /&gt;
and just replace it with nothing, and then paste the cleaned up text back into the .positions card.&lt;br /&gt;
&lt;br /&gt;
The cleaned up text then looks like this.&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You may wish to also to SORT the positions in alpha order to make it easier to find them.&lt;br /&gt;
&lt;br /&gt;
So that instead of:&lt;br /&gt;
&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can do this sorting in seconds by copying &amp;amp; pasting the (cleaned-up position chatter) into something such as Microsoft Word, or a spreadsheet, and telling it to sort, and then copying &amp;amp; pasting the sorted positions back into the .positions notecard. (This really works best though if you have stripped the initial chatter info from them.) }}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard reading order|&lt;br /&gt;
Q: I have a question about animation packs. I know the readme notecard says that the scripts read the notecards in alpha order. If I were to name the notecards as A, B, and C would the buttons on the menu then be in that order as well? I&#039;m picky--I like my buttons in a certain order.&lt;br /&gt;
&lt;br /&gt;
A: Yes.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Portable use of an MLPv2 product|&lt;br /&gt;
Attach the MLPv2 object to your HUD. You can use its default shape and color for a clickable bar on one of the edges of your screen (to move HUD position: Right-click and Edit it and use the arrows). While in edit mode, you can also edit color/transparency/size/position.&lt;br /&gt;
&lt;br /&gt;
Note that the balls will appear relative to the initial MLPv2 position. Adjust the height offset with a (Z) command.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Props|&lt;br /&gt;
Props are objects the MLP product will rez for poses.  When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear within 3 minutes.&lt;br /&gt;
&lt;br /&gt;
Props support starts with MLPV2.1.&lt;br /&gt;
&lt;br /&gt;
To add a prop, edit a .PROPS notecard or add a new one (named .props.xxx where xxx is the name of the module, for a modular config).  Copy the following example line and paste it into your .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;| mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then:&amp;lt;br /&amp;gt;&lt;br /&gt;
*Replace &amp;quot;mypose&amp;quot; with the pose name;&lt;br /&gt;
*Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars;&lt;br /&gt;
*Add the &amp;quot;~prop&amp;quot; script (from inside the &amp;quot;~pillow&amp;quot; object that comes with the standard distribution) to your prop object, and drop your prop object into the MLP prim&#039;s inventory.  The prop and everything in it will need to be copiable for next owner;&lt;br /&gt;
*Make sure your menu has the SAVEPROP and DUMPPROPS command on it.&lt;br /&gt;
&lt;br /&gt;
Restart the MLP, and then select the pose.  The prop should appear.  It might be underneath the MLP object, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time so that it doesn&#039;t rez in the ground!&lt;br /&gt;
&lt;br /&gt;
Move the prop to where you want it, and use MLP menu command &amp;quot;SAVEPROP&amp;quot;.  To make the change permanent, select the chat information that is printed out on your screen (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .props.xxx file.  Or, do all your props and use DUMPPROPS.  (This procedure is similar to that for saving positions in .positions.xxx notecards.)&lt;br /&gt;
&lt;br /&gt;
To get MLP to reread .props.xxx files, restart the product (which resets positions as well as props).&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved as two separate steps. If you adjust a pose and its prop, you need to save both pose position and prop.&lt;br /&gt;
&lt;br /&gt;
Tip: We are all so used to hitting the button to save positions. If you find that a prop position isn&#039;t saving, check your chat history to make sure you didn&#039;t hit the save position button instead of save prop just out of habit!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hand-held Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;For props to be used as hand-held items, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Number of Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
For any pose, you can have at most one prop. If you need more than one prop to rez, you&#039;ll have to link the items so that they can be treated by MLP as one object. Alternatively, if you have a scripter friend to help you, you might try having the rezzed object rez another object from its contents. Your scripter friend would need to make the rezzed child object listen for the same die command as the main object that was rezzed.&lt;br /&gt;
&lt;br /&gt;
Or, you *might* perhaps try the rezzed object as a coalesced object, making sure that each item has in it a script (created custom for you by a scripter friend) so they can die when required to -- experiment with that somewhere in the open at first in case it goes all over the place.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! STOP in every menu|&lt;br /&gt;
STOP and BACK buttons should be on every menu.&lt;br /&gt;
&lt;br /&gt;
Why STOP on every menu? It solves so many problems. For example, if you use STOP, you don&#039;t get ejected like a James Bond villain if the poseball happens to be buried in the furniture. After moving or rotating a bed, STOP resets the position (Lear put in code to do this automatically, but there&#039;s no event that tells you when rotation stops.) And no doubt, SL and MLPV2 have bugs, and I&#039;ve seen funky and unrepeatable oddness that STOP fixes in a jiffy. Plus it makes the poseballs go away.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via linked msgs|&lt;br /&gt;
If you just want the MLP menu to come up from another script in the object (same prim or different one), simply do what the ~touch_passer script does (the llMessageLinked() call). If your script is in the same prim as MLP scripts, change LINK_ALL_OTHERS to LINK_THIS.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via chat|MLP listens for menu responses on this channel, minus one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Return a channel number that&#039;s based on the prim&#039;s key -- unique per object&lt;br /&gt;
integer channel() {&lt;br /&gt;
return (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),-4,-1));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the key here is the key of the MLP object.&lt;br /&gt;
&lt;br /&gt;
Oh, warning: it also checks to see if the chat came from the same user as whoever used the menu recently. If they don&#039;t match, it sends a menu (dialog) -- in this case, to your object, which won&#039;t do anything. So, I suspect that this will work only if you keep users from getting access to the MLPV2 menu directly.}}&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
When the MLP is ready for use, the menu script in its ON state sends out a linked message on channel -11003 saying &amp;quot;READY&amp;quot; (from MLP version 2.4p1 and onwards.)&lt;br /&gt;
&lt;br /&gt;
llMessageLinked(LINK_SET, -11003, &amp;quot;READY&amp;quot;, NullKey);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footnotes}}&lt;br /&gt;
&lt;br /&gt;
== Illegal Pirated Animation Kit FYI ==&lt;br /&gt;
http://wiki.secondlife.com/w/index.php?title=62_Animation_MLP_Set&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;free&amp;quot; status of Sexgen animation kit released October 2011 by Stroker Serpentine, see here: https://wiki.secondlife.com/wiki/Stroker_Serpentine_Sexgen_Animation_Set&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1193205</id>
		<title>MLPV2 Troubleshooting Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1193205"/>
		<updated>2014-09-06T00:52:41Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* Balls won&amp;#039;t rez when I choose a pose! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
These MLPV2 troubleshooting tips are for normal end users and builders.&lt;br /&gt;
&lt;br /&gt;
== User issues ==&lt;br /&gt;
&lt;br /&gt;
These issues can be seen by any MLPV2 user even when the furniture is reasonably set up.&lt;br /&gt;
&lt;br /&gt;
=== Why am I not being animated? ===&lt;br /&gt;
Try turning off your Animation Overrider, if you have one.  Whether this is an issue for you depends on a techical detail: the priority of the animations in your AO and the priority of the animations in the MLP/MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
=== Why am I floating? ===&lt;br /&gt;
Sometimes we can be using a pose and suddenly we rise about 1 meter higher and stay there.  Sometimes this happens in everyone&#039;s view, and other times it only appears for some.  This is an SL bug and happens with any animation system, not just MLP/MLPV2.   The problem usually goes away if you select the pose again, or stand and sit again.  Sometimes it may be necessary to relog.&lt;br /&gt;
&lt;br /&gt;
=== Balls won&#039;t rez when I choose a pose! ===&lt;br /&gt;
First, try STOP.  If the balls got deleted for any reason, they won&#039;t rez when you pick a pose and the MLP still thinks the balls are there.  STOP fixes this.  (The timeout in many MLP objects also help avoid this, by doing a STOP if nobody&#039;s used it for a while.)&lt;br /&gt;
&lt;br /&gt;
Second (if first doesn&#039;t work), try resetting via the MLPV2 menu: &amp;quot;OPTIONS -&amp;gt; Shutdown... -&amp;gt; Restart&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Consider if maybe they *are* rezzing, but way below you or way above you -- check the description line of the MLP object to see if there is a number in there, in which case set it to 0.&lt;br /&gt;
&lt;br /&gt;
Check to make sure that the ~ball object inside the MLP has not been deleted by mistake.&lt;br /&gt;
&lt;br /&gt;
=== Menu doesn&#039;t come up ===&lt;br /&gt;
Make sure you&#039;re on land where you are allowed to run scripts.  There is a &amp;quot;no scripting&amp;quot; icon at the top of the viewer screen if you can&#039;t.&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t, try setting your group to the land&#039;s group.  If that makes the no-scripting icon go away, set the MLP object to the land&#039;s group.  (Do this in the Edit tab, or be wearing the group tag when you rez the object.)&lt;br /&gt;
&lt;br /&gt;
If that isn&#039;t the problem, most likely it had a stack/heap error when you were away.&lt;br /&gt;
&lt;br /&gt;
If the object permissions allow it, select the object and use &amp;quot;Reset Scripts&amp;quot;.  (In original style viewers, this is SL menu &amp;quot;Tools -&amp;gt; Reset Scripts in Selection&amp;quot;.  For SL2, I have no idea where it is.  Naughty LL for goofing everything up.)&lt;br /&gt;
&lt;br /&gt;
If this is a recurring problem, there is an MLPV2 recovery script; ask the MLPV2 group for more info.  Alternatively, delete some of the poses, to allow more room.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Animate me&amp;quot; permission popup not happening===&lt;br /&gt;
&lt;br /&gt;
You won&#039;t get the animate permission popup if you were the last person on a particular poseball. It keeps your permission.  You also don&#039;t get animate permission for yourself when MLP is used as a HUD, because worn items give permission automatically. (So do sat-upon items, but in the case of MLP, the script that takes permission is in the furniture, not the ball.) &lt;br /&gt;
&lt;br /&gt;
=== avatar != perm key ===&lt;br /&gt;
This is some debugging code that Lear had left exposed by mistake in some versions. It can be ignored; it is not really an error.&lt;br /&gt;
&lt;br /&gt;
If it is annoying, just update to the latest script set.  (Users can do this if the item is modifiable, but users should ask the maker first in case the maker has made custom modifications or is using add-on scripts.)&lt;br /&gt;
&lt;br /&gt;
=== OPTIONS menu doesn&#039;t work after deeding to group ===&lt;br /&gt;
If you deed an MLP, you lose the OPTIONS menu unless you remember to change all the OWNER menus to GROUP menus, and even then you won&#039;t be able to use full shutdown.&lt;br /&gt;
&lt;br /&gt;
=== Could not find animation &#039;00000000-0000-0000-0000-000000000000&#039; ===&lt;br /&gt;
Often one user will get this, and not another. Some have speculated it could be AO issues (even if the AO is turned off) or something indeterminate related to the avi. The speculation comes from forums where users have reported the issue and said that it went away as inexplicably as it started, by either a relog, clearing network cache, tping away and back, taking AO off completely for a bit, etc. Or went away over night.&lt;br /&gt;
&lt;br /&gt;
It could also be the asset server playing silly buggers, and a sim reboot (if possible) might solve it.&lt;br /&gt;
&lt;br /&gt;
In any event, what&#039;s certain is that there is nothing wrong with the actual MLP product.&lt;br /&gt;
&lt;br /&gt;
== Builder issues ==&lt;br /&gt;
&lt;br /&gt;
=== Animation xyx not found ===&lt;br /&gt;
* Check that the animation is indeed in the prim&lt;br /&gt;
* Check the spelling&lt;br /&gt;
* If you are using expression suffixes, check that you didn&#039;t put a space before the expression suffix&lt;br /&gt;
* Check that as a separator in POSE lines you have used only &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; or &amp;lt;pre&amp;gt;space|space&amp;lt;/pre&amp;gt; You can also use two spaces on each side of the vertical bar, but you cannot use three spaces: the superfluous space is not stripped away while reading the notecard; instead, it gets treated as part of the animation name, and thus the animation name can&#039;t be found.&lt;br /&gt;
* Also check for invisible soft-returns that may have come in if you were doing your work in another program such as Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
=== Animation won&#039;t remember its position ===&lt;br /&gt;
This can occur that even though you&#039;ve triple-checked all your work; there will be an animation that sometimes will come out in the right position, sometimes not. After a bit of head-banging, you realize it all depends on which animation you played just before it. If the creator of that animation did not set a hip position for it, you will get different results depending on which pose you ran last. That is, if you have 3 animations, 2 with hip positions and one without, the hip position for the one without will be left over from whichever of the last two animations you used. Which may throw your pose all off. There is nothing you can do except abandon use of the animation; the problem is in the animation itself, and it&#039;s not suitable for use with MLP-like scripts though it may work fine as sold in a static poseball.&lt;br /&gt;
&lt;br /&gt;
=== Balls rez on top of each other, even though you are sure you have positions right. ===&lt;br /&gt;
Check for duplicate stored positions. *Any* duplicate stored positions, even those not related to the pose in question, can cause this.&lt;br /&gt;
&lt;br /&gt;
Check for the memory script having blown up during booting. It&#039;s easy to miss this, as the error bubble only shows for a short time then goes away. To ensure you don&#039;t miss it, you can in Preferences for &amp;quot;Text Chat&amp;quot; turn on &amp;quot;Show script errors and warnings as regular chat.&amp;quot; That way, you&#039;ll be able to see such script problems even after problem bubble has faded.&lt;br /&gt;
&lt;br /&gt;
=== Balls: not enough rezzing ===&lt;br /&gt;
You have a Menu with poses that have 4 animations to them, but only 2 balls are rezzing. ||Check that you didn&#039;t tell the pose to only rez 2 balls. Example: &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK&amp;lt;/pre&amp;gt; for 4 animations should be something like &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK | BLUE | PINK&amp;lt;/pre&amp;gt; (or whatever) . Easy mistake for tired eyes to make!&lt;br /&gt;
&lt;br /&gt;
Also, check that you didn&#039;t drop the permission parameter. For instance, if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK | BLUE &amp;lt;/pre&amp;gt;&lt;br /&gt;
forgetting to put in there the [ALL | GROUP | OWNER] parameter, MLP will get mixed up, think that PINK is the permission parameter, and only rez the blue ball.&lt;br /&gt;
&lt;br /&gt;
if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK &amp;lt;/pre&amp;gt;&lt;br /&gt;
No balls will rez at all.&lt;br /&gt;
&lt;br /&gt;
Fix: put a permission parameter back in.&lt;br /&gt;
&lt;br /&gt;
===Booting up: MLP starts, gets a bit of the way, then goes no further ===&lt;br /&gt;
&lt;br /&gt;
Check that you have both a .MENUITEMS and .POSITIONS notecard in there.&lt;br /&gt;
&lt;br /&gt;
=== Couldn&#039;t find (script)&amp;quot; error ===&lt;br /&gt;
If you get a message like this upon first dragging and dropping the MLPv2 scripts into a prim, disregard it. It occurs because a prim contents are very slow to refresh in SL, and one script thinks another one is not there yet. Do nothing; it will sort itself out in a few seconds.&lt;br /&gt;
&lt;br /&gt;
=== llDialog: button labels must be 24 or fewer characters long ===&lt;br /&gt;
You have almost certainly forgotten a &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; in a POSE line. Consequently, the scripts were counting the Button name and the first animation name as the button name, making the button name too long. &lt;br /&gt;
&lt;br /&gt;
=== Notecards: I set my notecards to full-perm but customers can&#039;t open them to save positions, etc. ===&lt;br /&gt;
This happens if the object is no-modify.  You can&#039;t open notecards in a no-modify object. SL limitation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No Unused TOMENU&amp;quot; Getting this msg but I know that&#039;s not right ===&lt;br /&gt;
Check the top of your main MENUITEMS card, referring to the help in this section https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#.MENUITEMS.2A_NOTECARDS&lt;br /&gt;
&lt;br /&gt;
=== Props don&#039;t rez and I have everything right ===&lt;br /&gt;
# Make sure you have the ~props script in the MLP object.  (Actually, this won&#039;t keep the prop from rezzing; it will keep it from saving its position, and keep it from deleting itself when moving to a new pose.)&lt;br /&gt;
# MLP is very case sensitive. CHAT 2 in .MENUITEMS does not equal Chat 2 in the props notecard. Check to make sure the case matches.&lt;br /&gt;
# Watch the prim count on the parcel where you are working. If the available prim count is going down, then your prop is rezzing -- just not somewhere where you are seeing it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Script run-time error / Stack-Heap Collision&amp;quot; ===&lt;br /&gt;
This is a clue that, sadly, there are too many items in your .menuitems.xxx or .positions.xxx notecards for the script memory to handle. Congratulations, you&#039;ve just been initiated into the battle-scarred club like the rest of us.&lt;br /&gt;
&lt;br /&gt;
First, make sure the scripts are compiled Mono, not LSL.  By default they&#039;re Mono and you&#039;re better off if you do NOT recompile them.&lt;br /&gt;
&lt;br /&gt;
Second, make sure you have no unused positions stored in any .positions notecards. See tidying tip here https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;amp;action=submit#TIP.21_Positions_Notecard_tidying. Tidy, restart and see if that helps.&lt;br /&gt;
&lt;br /&gt;
Third: try optimizing your saved .POSITIONS.  If you have old .POSITIONS notecard data with lots of trailing zeros, you can get them trimmed down using this procedure:&lt;br /&gt;
&lt;br /&gt;
# drop .MENUITEMS.reorient (from MLP Tools box) in.&lt;br /&gt;
# Menu Reset.&lt;br /&gt;
# Use the Reorient menu to move all the poses by 1 cm. This will save all the poses, with only a small change. If you don&#039;t want the 1cm change, then just move it back 1cm after it finishes. Wait for both props and pose adjustment to complete! (Be patient!)&lt;br /&gt;
# dump pos, dump props, and save to appropriate notecards.&lt;br /&gt;
# Delete MENUITEMS.reorient, and restart.&lt;br /&gt;
&lt;br /&gt;
This will strip all the trailing zeros.&lt;br /&gt;
&lt;br /&gt;
Fourth: if your anims are mod, you can change the names.  Use short names, which take less memory.  Short button names also use less memory.&lt;br /&gt;
&lt;br /&gt;
The last resort is more drastic. You must give up on some poses, and delete their POSE lines from the .MENUITEMS* cards, and their position settings from the .POSITIONS* cards. You may leave the actual animations in the MLPv2 prim, but you might as well remove them as they won&#039;t be used anyway.&lt;br /&gt;
&lt;br /&gt;
=== What do I do about balls that are sunk into the mattress? ===&lt;br /&gt;
This problem is caused by the animation hip offset being too high.  One fix is to redo the animation and set the hip offset lower.  If you can&#039;t do that, then there are workarounds.&lt;br /&gt;
&lt;br /&gt;
One workaround is to make sure the first pose on every menu has a position where the balls are visible.&lt;br /&gt;
&lt;br /&gt;
The other workaround is to change the sit target in the poseball, so the balls will be higher for the same avatar positions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this will affect all poses, making the balls appear higher for all poses.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Pull out ~ball.  Open it, and edit the ~ball script inside.&lt;br /&gt;
# For MLPV2.4x and later, near the top of the script:&lt;br /&gt;
## Look for this: &amp;quot;vector SitTarget = &amp;lt;0.,0.,.1&amp;gt;&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;vector SitTarget = &amp;lt;0.,0.,-.4&amp;gt;&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Versions before MLPV2.4x:&lt;br /&gt;
## Look for this: &amp;quot;llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;, ZERO_ROTATION);&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;llSitTarget(&amp;lt;0.0,0.0,-.4&amp;gt;, ZERO_ROTATION);&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Take the ~ball object into inventory&lt;br /&gt;
# Delete ~ball from the MLPV2&lt;br /&gt;
# Drag the updated ~ball from inventory into the MLPV2&lt;br /&gt;
&lt;br /&gt;
This will make all the poses .5 M lower than they were, with the balls at the same place.  If that&#039;s a bigger change than you wanted, try -.2 or -.1 (that is, adjust to taste).&lt;br /&gt;
&lt;br /&gt;
For versions prior to MLPV2.4z6, you will then need to adjust all the positions to compensate.  I suggest you use the .MENUITEMS.reorient notecard for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run ===&lt;br /&gt;
Q: Heres what I have setup in the .sequences notecard:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SEQUENCE | Romantic&lt;br /&gt;
MENU | Romance&lt;br /&gt;
POSE | standing&lt;br /&gt;
AVWAIT | 0 | Waiting for someone to sit on ball&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Kiss&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Enter&lt;br /&gt;
WAIT | 15...&lt;br /&gt;
...REPEAT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It shows up in the menu selection, but no poseballs are rezzed when you select the sequence. Here&#039;s what I have in the .MENUITEMS notecard pertaining to the sequence-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Romantic&lt;br /&gt;
LINKMSG Romantic | 0,-4,-12001,SEQUENCE Romantic&lt;br /&gt;
LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
SWAP&lt;br /&gt;
STOP&lt;br /&gt;
BACK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A: Your problem is simple: you have two buttons with the same label, which isn&#039;t allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run or skips poses in it===&lt;br /&gt;
Currently (2011), the sequencer script won&#039;t complain to you if the poses you reference actually exist or not. You&#039;re on your own for making sure they actually exist and are named exactly the same (in a menu card) as the way you are referring to them. So watch for this.&lt;br /&gt;
&lt;br /&gt;
=== Xcite! features such as tilt  / arousal just don&#039;t seem to work ===&lt;br /&gt;
Make sure you have the latest set of partner scripts (as of Jan 2012, the latest release was I think in 2009.) Make sure your own Xcite! bits aren&#039;t horribly out of date -- you need 3.0 bits or higher. Contacting xcite help isn&#039;t of much use; as of mid 2011 they became non-responsive to business partners.&lt;br /&gt;
&lt;br /&gt;
That being said, features won&#039;t work unless the xcite partner script is set be either no copy or no transfer. They also won&#039;t work if the perms were wrong when you rezzed the product, so edit the script and reset it. That will make the script start to run -- it dies upon start up if perms on the script are wrong.&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Sound_Effects&amp;diff=1190768</id>
		<title>MLPV2 Sound Effects</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Sound_Effects&amp;diff=1190768"/>
		<updated>2014-05-14T01:58:51Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MLP Sound Effects by Chaz Longstaff&lt;br /&gt;
&lt;br /&gt;
This MLP sound tool will trigger sounds when poses of your choosing are played. You control if the sounds loop or not, how long they play, etc. The script also allows users to turn all sounds off or back on via a button.&lt;br /&gt;
&lt;br /&gt;
You need two things, both provided on this page: A script and a notecard. Make the script (call it &amp;quot;~sounds&amp;quot; or really anything you want) and the notecard (call it .SOUNDS or .SOUNDS.whatever) and drop into your MLPV2 product. Full usage instructions are within the notecard.&lt;br /&gt;
&lt;br /&gt;
PIECE 1: SCRIPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MLP Sounds&lt;br /&gt;
//v. 1.1 by Chaz Longstaff 2014-03-7&lt;br /&gt;
//This script also requires a notecard named .SOUNDS or .SOUNDS.whatever&lt;br /&gt;
//lines inside card should read like: posename,sound, delaybeforeinitialstart, howoftentorepeat, volume, #repeatsbeforeanotherdelay, delayduringplay. See sample notecard provided with full usage instructions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list DelayDuringPlay = [&amp;quot;&amp;quot;];&lt;br /&gt;
list DelayStarts = [&amp;quot;&amp;quot;];&lt;br /&gt;
list MaxPlays = [&amp;quot;&amp;quot;];&lt;br /&gt;
list PoseNames = [&amp;quot;&amp;quot;];&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;];&lt;br /&gt;
list SoundTimes = [&amp;quot;&amp;quot;];&lt;br /&gt;
list SoundVols = [&amp;quot;&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
integer ListLength;&lt;br /&gt;
string mysound;&lt;br /&gt;
list mysoundlist;&lt;br /&gt;
float mystartdelay;&lt;br /&gt;
float myplaydelay;&lt;br /&gt;
integer mymax;&lt;br /&gt;
float mytime;&lt;br /&gt;
float myvol;&lt;br /&gt;
string playstatus = &amp;quot;On&amp;quot;;&lt;br /&gt;
integer soundtotal;&lt;br /&gt;
integer soundcount;&lt;br /&gt;
integer TimesPlayed;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float   Interval;&lt;br /&gt;
integer Debug;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer PoseCfgCount;&lt;br /&gt;
string Pose;&lt;br /&gt;
&lt;br /&gt;
config_init()&lt;br /&gt;
{&lt;br /&gt;
    PoseCfgCount    = 0;&lt;br /&gt;
    DelayStarts     = [];&lt;br /&gt;
    DelayDuringPlay = [];&lt;br /&gt;
    MaxPlays        = [];&lt;br /&gt;
    PoseNames       = [];&lt;br /&gt;
    Sounds          = [];&lt;br /&gt;
    SoundTimes      = [];&lt;br /&gt;
    SoundVols       = [];&lt;br /&gt;
    Debug           = 0;&lt;br /&gt;
    Interval        = 15.;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
config_parse(string str, string cardName, integer lineNum)&lt;br /&gt;
{&lt;br /&gt;
    str = llStringTrim(str, STRING_TRIM_HEAD);  // delete leading spaces&lt;br /&gt;
&lt;br /&gt;
    // lines beginning with slash are comments -- ignore them&lt;br /&gt;
    if ( (llGetSubString(str,0,0) == &amp;quot;/&amp;quot;) || (str == &amp;quot;&amp;quot;) ) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    list ldata      = llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [&amp;quot;&amp;quot;]);&lt;br /&gt;
    PoseCfgCount += 1;&lt;br /&gt;
    string  pose    = llStringTrim(llList2String(ldata,0), STRING_TRIM);&lt;br /&gt;
    string  mysoundstr  = llStringTrim(llList2String(ldata,1), STRING_TRIM);&lt;br /&gt;
    string  mystartdelaystr = llStringTrim(llList2String(ldata,2), STRING_TRIM);&lt;br /&gt;
    string  mytimestr = llStringTrim(llList2String(ldata,3), STRING_TRIM);&lt;br /&gt;
    string  myvolstr  = llStringTrim(llList2String(ldata,4), STRING_TRIM);&lt;br /&gt;
    string  mymaxstr  = llStringTrim(llList2String(ldata,5), STRING_TRIM);&lt;br /&gt;
    string  myplaydelaystr  = llStringTrim(llList2String(ldata,6), STRING_TRIM);&lt;br /&gt;
    &lt;br /&gt;
    // posename, sound, delay, howoftentorepeat, volume, #repeatsbeforeanotherdelay&lt;br /&gt;
    &lt;br /&gt;
    addConfig(pose, mysoundstr, mystartdelaystr, mytimestr, myvolstr, mymaxstr, myplaydelaystr);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
addConfig(string ref, string sound, string delayref, string time, string vol, string maxref, string playdelayref) {&lt;br /&gt;
    PoseNames   += (list)ref;&lt;br /&gt;
    Sounds     += (list)sound;&lt;br /&gt;
    DelayStarts    += (list)delayref;&lt;br /&gt;
    SoundTimes   += (list)time;&lt;br /&gt;
    SoundVols       += (list)vol;&lt;br /&gt;
    MaxPlays       += (list)maxref;&lt;br /&gt;
    DelayDuringPlay += (list)playdelayref;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Post-process any config, if necessary&lt;br /&gt;
config_done() {&lt;br /&gt;
    announce();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
announce() {&lt;br /&gt;
    //integer acount = llGetListLength(AnimNames);&lt;br /&gt;
    &lt;br /&gt;
        llWhisper(0,&lt;br /&gt;
       // + plural(&amp;quot;anim&amp;quot;, &amp;quot;anims&amp;quot;, acount)&lt;br /&gt;
        //+ &amp;quot; and &amp;quot;&lt;br /&gt;
         (string) PoseCfgCount&lt;br /&gt;
        + &amp;quot; pose(s) configured specially for sound (&amp;quot;&lt;br /&gt;
        + llGetScriptName()&lt;br /&gt;
        + &amp;quot;: &amp;quot;&lt;br /&gt;
        + (string)llGetFreeMemory()&lt;br /&gt;
        + &amp;quot; bytes free).&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
togglesound() {&lt;br /&gt;
    if (playstatus == &amp;quot;On&amp;quot;) {&lt;br /&gt;
        playstatus = &amp;quot;Off&amp;quot;;&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        playstatus = &amp;quot;On&amp;quot;;&lt;br /&gt;
        llSetTimerEvent( mytime  );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ==== Utilities ====&lt;br /&gt;
&lt;br /&gt;
integer isKey(string str) { //Identifies whether a certain string is a UUID or not. TRUE if it is     &lt;br /&gt;
 return ( (llStringLength(str) == 36) &amp;amp;&amp;amp; //UUIDs are always 36 characters &lt;br /&gt;
        (llGetSubString(str, 8, 8) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //9th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 13, 13) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //14th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 18, 18) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //19th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 23, 23) == &amp;quot;-&amp;quot;) ); //24th character is always a dash&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Static parameters for reading card config&lt;br /&gt;
string  ConfigNotecardPrefix    = &amp;quot;.SOUNDS&amp;quot;;     // string identifying config notecards&lt;br /&gt;
float   ConfigTimeout           = 180.0;         // seconds per card to wait for slow server&lt;br /&gt;
&lt;br /&gt;
// Globals for reading card config&lt;br /&gt;
integer ConfigLineIndex;&lt;br /&gt;
key     ConfigRequestID;&lt;br /&gt;
list    ConfigCards;        // list of names of config cards&lt;br /&gt;
string  ConfigCardName;     // name of card being read&lt;br /&gt;
integer ConfigCardIndex;    // index of next card to read&lt;br /&gt;
string  ConfigCardKeys;     // for detecting config change&lt;br /&gt;
&lt;br /&gt;
// return TRUE if there is a config card&lt;br /&gt;
&lt;br /&gt;
integer next_card()&lt;br /&gt;
{&lt;br /&gt;
    if (ConfigCardIndex &amp;gt;= llGetListLength(ConfigCards)) {&lt;br /&gt;
        return (FALSE);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    ConfigLineIndex = 0;&lt;br /&gt;
    ConfigCardName = llList2String(ConfigCards, ConfigCardIndex);&lt;br /&gt;
    ConfigCardIndex++;&lt;br /&gt;
    ConfigRequestID = llGetNotecardLine(ConfigCardName, ConfigLineIndex);&lt;br /&gt;
    llWhisper(0,&amp;quot;Reading &amp;quot; + ConfigCardName);&lt;br /&gt;
    return (TRUE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Get list of config cards, and return list of their keys for use&lt;br /&gt;
// in detecting a config change.&lt;br /&gt;
&lt;br /&gt;
string get_cards() {&lt;br /&gt;
    string item;&lt;br /&gt;
    string keys;&lt;br /&gt;
    &lt;br /&gt;
    ConfigCards = [];&lt;br /&gt;
    integer n = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
    while (n-- &amp;gt; 0) {&lt;br /&gt;
        item = llGetInventoryName(INVENTORY_NOTECARD, n);&lt;br /&gt;
        if (llSubStringIndex(item, ConfigNotecardPrefix) != -1) {&lt;br /&gt;
            ConfigCards += [item];&lt;br /&gt;
            keys += (string) llGetInventoryKey(item);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return keys;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        state s_config;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This state is only used to get into s_config, because going from&lt;br /&gt;
// s_config to s_config won&#039;t redo it&#039;s state_entry.  But we might&lt;br /&gt;
// not want to redo anything we might have put in default state entry.&lt;br /&gt;
&lt;br /&gt;
state s_reconfig&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        state s_config;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Read card config&lt;br /&gt;
// Multiple notecard version - read all cards with the given extension&lt;br /&gt;
&lt;br /&gt;
state s_config&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        config_init();&lt;br /&gt;
        ConfigCardKeys = get_cards();&lt;br /&gt;
        ConfigCardIndex = 0;&lt;br /&gt;
&lt;br /&gt;
        if (next_card()) {&lt;br /&gt;
            llSetTimerEvent(ConfigTimeout);&lt;br /&gt;
        } else {&lt;br /&gt;
            state s_unconfigured;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver(key query_id, string data) {&lt;br /&gt;
        if (query_id == ConfigRequestID) {&lt;br /&gt;
            if (data == EOF) {&lt;br /&gt;
                if (next_card()) {&lt;br /&gt;
                    llSetTimerEvent(ConfigTimeout);&lt;br /&gt;
                } else {&lt;br /&gt;
                    config_done();&lt;br /&gt;
                    state s_active;&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                config_parse(data, ConfigCardName, ConfigLineIndex);&lt;br /&gt;
                ConfigRequestID = llGetNotecardLine(ConfigCardName, ++ConfigLineIndex);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer() {&lt;br /&gt;
        llWhisper(0,&amp;quot;Dataserver time out&amp;quot;);&lt;br /&gt;
        state s_unconfigured;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer num) { state s_reconfig; }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_OWNER) { llResetScript(); }&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) { state s_reconfig; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_exit() {&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
state s_unconfigured&lt;br /&gt;
{&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            if (get_cards() != ConfigCardKeys) {&lt;br /&gt;
                state s_config;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
state s_active {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
     llResetScript();&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    state_entry(){&lt;br /&gt;
        ListLength = llGetListLength(PoseNames);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender_num, integer num, string str, key id) {&lt;br /&gt;
        &lt;br /&gt;
        //  num = 0 and msg = &amp;quot;POSEB&amp;quot;: new pose&lt;br /&gt;
        //  id = pose name&lt;br /&gt;
        if ( (num == 987790) &amp;amp;&amp;amp; (str == &amp;quot;togglesound&amp;quot;) ) {&lt;br /&gt;
            togglesound();&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if (num == 0 &amp;amp;&amp;amp; str == &amp;quot;STOP&amp;quot;) {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        } else if (num == 989999) {&lt;br /&gt;
            if (str == &amp;quot;stopsound&amp;quot;) {&lt;br /&gt;
                llStopSound();&lt;br /&gt;
                llSetTimerEvent(0);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == 0 &amp;amp;&amp;amp; str == &amp;quot;POSEB&amp;quot;) {&lt;br /&gt;
            mystartdelay = 0;&lt;br /&gt;
            mymax = 0;&lt;br /&gt;
            soundcount = 0;&lt;br /&gt;
            soundtotal = 0;&lt;br /&gt;
            TimesPlayed = 0;&lt;br /&gt;
            mysoundlist = [];&lt;br /&gt;
            if (playstatus == &amp;quot;Off&amp;quot;) {&lt;br /&gt;
                llSetTimerEvent(0);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            Pose = llStringTrim( ((string)id) , STRING_TRIM);&lt;br /&gt;
           // llSay(0, &amp;quot;Pose : &amp;quot; + Pose);&lt;br /&gt;
            integer ix = llListFindList(PoseNames, (list)Pose);&lt;br /&gt;
                if ( ix != -1) {&lt;br /&gt;
                    string mysounds = llList2String(Sounds,ix);&lt;br /&gt;
                    integer index = llSubStringIndex(mysounds,&amp;quot;***&amp;quot;);&lt;br /&gt;
                    if(index == -1) {&lt;br /&gt;
                        mysound = mysounds;&lt;br /&gt;
                    }&lt;br /&gt;
                    else {&lt;br /&gt;
                        mysoundlist = llParseStringKeepNulls(mysounds, [&amp;quot;***&amp;quot;], [&amp;quot;&amp;quot;]);&lt;br /&gt;
                        soundtotal = llGetListLength(mysoundlist);&lt;br /&gt;
                        mysound = llList2String(mysoundlist,soundcount);&lt;br /&gt;
                    }&lt;br /&gt;
                    mystartdelay = (float)llList2String(DelayStarts,ix);&lt;br /&gt;
                    mymax = (integer)llList2String(MaxPlays,ix);&lt;br /&gt;
                    mytime = (float)llList2String(SoundTimes,ix);&lt;br /&gt;
                    myvol = (float)llList2String(SoundVols,ix);&lt;br /&gt;
                    myplaydelay = (float)llList2String(DelayDuringPlay,ix);&lt;br /&gt;
&lt;br /&gt;
//                   llSay(0, &lt;br /&gt;
//                   &amp;quot;mysound : &amp;quot; + mysound&lt;br /&gt;
//                   + &amp;quot;/ delay : &amp;quot; + (string) mystartdelay&lt;br /&gt;
//                   + &amp;quot; / repeatseconds : &amp;quot; + (string) mytime&lt;br /&gt;
//                    + &amp;quot; / myvol : &amp;quot; + (string) myvol&lt;br /&gt;
//                     + &amp;quot; / maxrepeats : &amp;quot; + (string) mymax&lt;br /&gt;
//                     + &amp;quot; / delayduringplay : &amp;quot; + (string) myplaydelay &lt;br /&gt;
//                   );&lt;br /&gt;
                    if ( mystartdelay &amp;gt; 0 ) llSleep(mystartdelay);&lt;br /&gt;
                    llPlaySound(mysound,myvol);&lt;br /&gt;
                    TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
                    llSetTimerEvent( mytime  );&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                   // llSay(0, &amp;quot;got a shut off msg&amp;quot;);&lt;br /&gt;
                    llSetTimerEvent( 0 );&lt;br /&gt;
                }&lt;br /&gt;
            }    &lt;br /&gt;
    } //end linkmsg section&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    timer() {&lt;br /&gt;
        //llSay(0, &amp;quot;in timer&amp;quot;);&lt;br /&gt;
        if (mymax == 0) {&lt;br /&gt;
            //llSay(0, &amp;quot;no max so go ahead and play&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if ( (TimesPlayed + 1) &amp;gt; mymax ) {&lt;br /&gt;
                TimesPlayed = 0;&lt;br /&gt;
                llSleep(myplaydelay);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if (soundtotal &amp;gt; 1) {&lt;br /&gt;
            soundcount = soundcount + 1;&lt;br /&gt;
            if ( (soundcount + 1) &amp;gt; soundtotal ) {&lt;br /&gt;
                soundcount = 0; &lt;br /&gt;
            }         &lt;br /&gt;
            &lt;br /&gt;
            mysound = llList2String(mysoundlist,soundcount);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (isKey(mysound) == TRUE) {&lt;br /&gt;
                //it&#039;s a UUID so just play it&lt;br /&gt;
                llPlaySound(mysound, myvol);&lt;br /&gt;
                TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
            }&lt;br /&gt;
        else {&lt;br /&gt;
                //it&#039;s a sound file, so test to make sure it&#039;s present to avoid script errors&lt;br /&gt;
                if ( llGetInventoryType(mysound) != INVENTORY_NONE ) {&lt;br /&gt;
                    llPlaySound(mysound, myvol);&lt;br /&gt;
                    TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
                } &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            if (get_cards() != ConfigCardKeys) {&lt;br /&gt;
                state s_config;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PIECE 2: NOTECARD&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//name card .SOUNDS&lt;br /&gt;
//or .SOUNDS.whatever&lt;br /&gt;
//lines inside card should read like: posename,sound, delaybeforeinitialstart, howoftentorepeat, volume, #repeatsbeforeanotherdelay, delayduringplay&lt;br /&gt;
&lt;br /&gt;
//posename: case (and space sensitive inside pose names), make sure you get it right! You can leave spaces in between the commas or not, your choice.&lt;br /&gt;
//sound. You have two choices.&lt;br /&gt;
//Sound Choice (1) You can put in sound name, but if you do, you must include the sound file inside the prim. You need to have copy / transfer rights to the sound file to include it in products you want to sell to others. You don&#039;t need mod rights to the file.&lt;br /&gt;
//Sound Choice (2) You can instead supply the UUID of the sound file. You need full perm rights (mod / copy / transfer) to the sound file in order to be able to  get the UUID -- right-click over a full-perm sound in your invy. Choose copy UUID, and use that as the sound name. When you list a sound UUID, you don&#039;t need to include the sound file inside the MLP product -- makes for tidier contents and less to proof for perms, etc.&lt;br /&gt;
//delay: how many seconds to pause initially before starting any sound play. Set to 0 if no delay is wanted. Applies only to initial start.&lt;br /&gt;
//howoftentorepeat: how often in seconds the sound should repeat play itself. Enter as a number. Decimal numbers such as 5.5 are fine. 0 equals play only once.&lt;br /&gt;
//volume: Enter a number ranging from .1 (lowest) to 1.0 (that being the loudest possible in SL). Instead of 1.0, you can enter just 1&lt;br /&gt;
// #repeatsbeforeanotherdelay: no of times to play the sound before once again doing the delay. Example: delay of 10 seconds, 15 repeats: script waits 10 seconds before starting playing. Plays sound 15 times (at the x seconds intervals you specified.) &lt;br /&gt;
//delayduringplay: sound plays x number of times, then pauses this long in seconds, then plays x number of times again, then pauses again this long in seconds, etc. Put 0 if no delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//MENU BUTTON&lt;br /&gt;
//Creating a menu button like this will allow users to toggle the playing of sounds off and on&lt;br /&gt;
//LINKMSG buttonname | 0,-4,987790, togglesound&lt;br /&gt;
//change the buttonname part to be anything you like (e.g. SND ON/OFF or TOGGLE SOUND). Don&#039;t change anything else in this line.&lt;br /&gt;
LINKMSG SOUNDON/OFF | 0,-4,987790, togglesound&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//SOUND LINE EXAMPLE&lt;br /&gt;
//Spanking, LoudSpank, 0, 10, 1.0, 0&lt;br /&gt;
//when they are on the Spanking pose, play the sound LoudSpank. No delay in starting. Play every 10 seconds at 1.0 volume (max volume). No limit to repeats.&lt;br /&gt;
//Flogging, 98gyt10f-82e4-788c-2a07-1c32d409yhmv, 10, 3, 1, 5&lt;br /&gt;
//when they are on the Flogging pose, play the sound represented by the UUID. Wait 10 seconds before starting, then play every 3 seconds at max volume which is 1. When the sound has played 5 times, then pause 10 seconds again, they start play all over again.&lt;br /&gt;
&lt;br /&gt;
BInspect, d3b61629-50a3-9716-7683-8972f2bb631c, 14, 1, 1, 4, 26&lt;br /&gt;
BDick, beab335a-c030-0307-0948-c5cc77b3c3ac, 0, 20, 1, 0, 0&lt;br /&gt;
BTowel, 59fbf10f-82e4-788c-2a07-1c32d409fafe, 0, 3, 1, 0, 0&lt;br /&gt;
BSpank, d71bd292-6d72-a830-68a1-8b4322fb091d, 0, 3, 1, 0, 0&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190755</id>
		<title>MLPV2 Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190755"/>
		<updated>2014-05-13T01:05:17Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* 3. Programming a sequence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is intended for &amp;quot;builders&amp;quot;: people adding poses to furniture.&lt;br /&gt;
&lt;br /&gt;
Folks who just want to know how to use their furniture should see [[MLPV2 Users Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Setting up MLPV2 ==&lt;br /&gt;
These instructions look long, but it&#039;s easier than it looks.  Here&#039;s the overview:&lt;br /&gt;
# get the scripts and notecards and drop them into a prim (CREATE YOUR OWN PRIM -- so folks know who made it!)&lt;br /&gt;
# put your anims in the same prim&lt;br /&gt;
# Create and edit one or more .MENUITEMS.* notecards (use whatever you want for &amp;quot;*&amp;quot;).  Configure menus and add poses to the menus.  Mostly the same as old MLP, with enhancements and no need to edit the main menu.)&lt;br /&gt;
# Reset and try the menu&lt;br /&gt;
# adust each pose (same way as old MLP)&lt;br /&gt;
# dump memory and save positions in notecard (nearly same way as old MLP; sellers may want to use modular .POSITIONS.* files)&lt;br /&gt;
&lt;br /&gt;
These instructions are oriented for someone setting up a new object.  However, those who bought one and are adjusting it or adding poses can simply skip the obvious steps that the maker would already have done.&lt;br /&gt;
&lt;br /&gt;
== Get the scripts ==&lt;br /&gt;
The latest scripts are available at jPose Island, in the FREEBIES section.  It is Adult land, so you will need to either have payment info on file or be adult certified.&lt;br /&gt;
&lt;br /&gt;
MLPV2.3 is available on Marketplace, under Lear Cale as merchant.&lt;br /&gt;
&lt;br /&gt;
Take a good look at the .readme file.&lt;br /&gt;
&lt;br /&gt;
== Install scripts ==&lt;br /&gt;
Rez the MLPV2 and copy its contents into inventory and then into your furniture.&lt;br /&gt;
&lt;br /&gt;
Delete the notecards ending in &amp;quot;examples&amp;quot;, along with the ~pillow object and any example animations you don&#039;t plan to use.&lt;br /&gt;
&lt;br /&gt;
Life is easiest if you use your object&#039;s root prim for MLPV2; instructions below for when it&#039;s not.  For your first try, stick with root prim and keep life simple.  (An easy way to add it to an existing bed is to just float it slightly above your mattress and then apply a totally clear texture, available in any freebie depot.)  Below, we&#039;ll call this prim the &amp;quot;MLP prim&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[Tip: You&#039;ll thank yourself later in life if you try to keep the orientation of the MLP prim the same across your products, for example, with rotation 0,0,0.  This makes it easier to transfer poses between products.  However, with sculpties this isn&#039;t always feasible.]&lt;br /&gt;
&lt;br /&gt;
Click the MLP prim so that it starts up for the first time.  If you get a menu, fine; you&#039;ve already done this.  If nothing happens, click again -- an SL bug causes the first click to get lost.&lt;br /&gt;
&lt;br /&gt;
== Install animations ==&lt;br /&gt;
Drag all the anims you&#039;ll use into the prim.  (You can pull these out of poseballs you like.  If the animations are no-copy, this will render the poseballs useless.)&lt;br /&gt;
&lt;br /&gt;
Note: not all animations will work with MLP. See discussion here: [[MLPV2_Reference_Manual#TIP.21_Animations_Caveat]]&lt;br /&gt;
&lt;br /&gt;
== Create and edit your .MENUITEMS.* file ==&lt;br /&gt;
&lt;br /&gt;
Create a new notecard, named &amp;quot;.MENUITEMS.&#039;&#039;mystuff&#039;&#039;&amp;quot;, where &amp;quot;&#039;&#039;mystuff&#039;&#039;&amp;quot; can be anything you want.  MLPV2 can take any number of these, and bed sellers can make different pose sets for different customers.&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorial1.6.png|100px|thumb|left|Click for graphic view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the object.  [You might want to do most of the editing first; objects with lots of things in inventory react slowly to changes, and you might have a lot of animations.  As of Nov/2009, there&#039;s also an issue with editing notecards in object inventory.  Unless you&#039;ve heard the &amp;quot;all clear&amp;quot; on this, or know the workaround, it&#039;s best to edit in your avatar inventory.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a menu:&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;MyMenu&#039;&#039; | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
[Tip! The standard practice is to list the pink ball first, then the blue -- you may do the opposite if you wish, but for what it&#039;s worth, that&#039;s the convention. This convention was established in 2006 with the release of MLP 1.1, and is practised in XPOSE! as well.] &lt;br /&gt;
&lt;br /&gt;
This creates a menu whose button in the top menu will be labeled &#039;&#039;MyMenu&#039;&#039;.  &#039;&#039;&#039;ALL&#039;&#039;&#039; indicates that it will be accessible by everyone (alternatives here are &#039;&#039;&#039;GROUP&#039;&#039;&#039;, only allowing people in the same group as the object, or &#039;&#039;&#039;OWNER&#039;&#039;&#039;, only allowing the owner).  After that, list each ball color for the poses in this menu.  You can have up to six balls.  If you have some solo poses, some couples poses, and some 3some poses, they have to be in different menus.&lt;br /&gt;
&lt;br /&gt;
In this example, a pink and a blue poseball will be rezzed.&lt;br /&gt;
&lt;br /&gt;
For each pose in this menu, add a line like this:&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;pose1&#039;&#039; | &#039;&#039;anim1&#039;&#039; | &#039;&#039;anim2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
: &#039;&#039;pose1&#039;&#039; will be the button name for this pose.&lt;br /&gt;
: &#039;&#039;anim1&#039;&#039; is the name of the animation for the first poseball (which happens to be pink in our example)&lt;br /&gt;
: &#039;&#039;anim2&#039;&#039; is the name of the animation for the second poseball (which happens to be blue in our example)&lt;br /&gt;
&lt;br /&gt;
Zero, one, or two spaces are allowed around the vertical bars.  Avoid extra spaces.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;facial expressions&#039;&#039;&#039;, you add a suffix to the animation names indicating the expression.  Note that you don&#039;t change the actual name of the animation in the inventory, you just add the suffix in this configuration notecard.  These are explained in [[MLPV2_Reference_Manual#Animations_.28Facial.29]] .  For a simple example, appending &amp;quot;*&amp;quot; will give an astonished open-mouth expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following can also be included in your menu:&lt;br /&gt;
 STOP&lt;br /&gt;
 SWAP&lt;br /&gt;
 BACK&lt;br /&gt;
 TOMENU &#039;&#039;MyOtherMenu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;STOP&#039;&#039;&#039; makes a button labeled STOP that de-rezzes the poseballs and unsits everyone.&lt;br /&gt;
: &#039;&#039;&#039;SWAP&#039;&#039;&#039; makes a button labeled SWAP that exchanges the first two balls, by default.  Starting with MLPV2.4, you can configure the swap arrangements for poses with multiple balls, [LINNK TBD].&lt;br /&gt;
: &#039;&#039;&#039;BACK&#039;&#039;&#039; makes a button labeled BACK that goes back to the previous menu.  Every menu should have one of these!&lt;br /&gt;
: &#039;&#039;&#039;TOMENU&#039;&#039;&#039; makes a button labeled &#039;&#039;MyOtherMenu&#039;&#039;, which goes to the &#039;&#039;MyOtherMenu&#039;&#039; menu (which you must create).&lt;br /&gt;
&lt;br /&gt;
With MLPV2 (assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP configuration), any MENU that is &#039;&#039;&#039;not&#039;&#039;&#039; found in a previous &#039;&#039;&#039;TOMENU&#039;&#039;&#039; entry is added to an empty slot in the top menu.  I&#039;ll talk more about this below, under [[MLPV2 Submenus]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good convention to end each menu with the following:&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
For MLPV2 (again, assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP config), buttons are placed in the menu in the same order they appear in the config notecard. To set old MLP configs to using this new (sane) menu order, see here: [http://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#MENUORDER]&lt;br /&gt;
&lt;br /&gt;
Repeat the above for each menu you want.  Poses with different numbers of participants have to be in different menus, since the MENU line gives the number and colors of the balls.&lt;br /&gt;
&lt;br /&gt;
For a menu with 3 or more poses, the POSE line would list that number of animations, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Continuation menus ==&lt;br /&gt;
As we all know, you get at most 12 buttons in an SL menu.  However, starting with MLPV2.1, you can have more than 12 buttons in a configured MENU.  If there are more than 12, MLPV2.1 and later will automatically add a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button after the 11th item, leading to the remaining choices.  (And also after the 22nd item, etc.)&lt;br /&gt;
&lt;br /&gt;
If you wish MLPV2 to automatically a &#039;&#039;&#039;BACK&#039;&#039;&#039; button whenever it adds a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button, add the AUTOBACK directive to your .MENUITEMS config card. It doesn&#039;t matter where it is, but convention is to put it near the top.  Put it alone on a line.&lt;br /&gt;
&lt;br /&gt;
Note that a  &#039;&#039;&#039;BACK&#039;&#039;&#039; button will not be added to the top, main menu (because there is no further back there to go back up to.) Nor will it add it to the last page of a series of sub-menu pages, or to a single-page sub-menu -- you must add the word BACK yourself manually to these if desired.&lt;br /&gt;
&lt;br /&gt;
== Menu Reset ==&lt;br /&gt;
Save your changes.  (If you&#039;re editing a copy in inventory, install it in the MLPV2 prim).&lt;br /&gt;
&lt;br /&gt;
Click the MLPV2 object.  If this is the first time since you installed the scripts, it will start up and read the configurations.  If you get a menu, select &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; Menu Reset&#039;&#039;&#039;.  This button causes it to re-read all .MENUITEMS* files, including yours.&lt;br /&gt;
&lt;br /&gt;
Watch for warning messages.  The most common one is due to an animation being missing or misspelled in the configuration.  Fix any mistakes and do another Menu Reset.  (A reset is &#039;&#039;&#039;not&#039;&#039;&#039; required for missing animations; just drop in the anim.  If you don&#039;t have some of them yet, don&#039;t worry, this won&#039;t do any harm.&lt;br /&gt;
&lt;br /&gt;
Click to get the menu.  You should see the button for your new menu; click it.  You should see the menu you configured.  Click the first pose.  You should see the right number and color balls appear.  They may be in odd places.&lt;br /&gt;
&lt;br /&gt;
Tip! Note that &amp;quot;MenuReset&amp;quot; will not re-read positions from the positions card.  PosReset and Restart will.&lt;br /&gt;
&lt;br /&gt;
== The default pose ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;default pose&amp;quot; is a set of poseball positions and orientations that is used for any new pose, since new poses don&#039;t have saved positions yet.&lt;br /&gt;
&lt;br /&gt;
The default pose in the MLPV2 distribution assumes that the MLPV2 prim is essentially an unrotated box, flattened and stretched like a mattress cover.  If your prim is rotated (as is likely if you&#039;re using a flattened cylinder lying on its side for the mattress, and MLPV2 is in the mattress), you will want to adjust the default pose so none of the balls are underground.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Go to main blue menu and select &#039;&#039;&#039;adj-default -&amp;gt; default&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Tip! If you don&#039;t have this choice, see here: [https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#TIP.21_Default_Pose]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the default pose looks fine (6 balls arranged in a hexagon, avs sitting facing each other), skip this step.&lt;br /&gt;
&lt;br /&gt;
If the default pose looks wrong, adjust it following the instructions below, as for any pose you would add.  You may have to be clever to get at balls that might end up under the floor or buried in your object.&lt;br /&gt;
&lt;br /&gt;
When saving the default pose as described below, be sure to save it to the .POSITIONS notecard, rather than to your .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard.&lt;br /&gt;
&lt;br /&gt;
== The stand pose ==&lt;br /&gt;
&lt;br /&gt;
MLPV2 uses the &#039;&#039;&#039;stand&#039;&#039;&#039; pose whenever STOP is used (or on any reset button in the Shutdown menu), just before unseating the avatars.  This helps avoid them popping high into the sky, which happens when poseballs are buried inside the object.&lt;br /&gt;
&lt;br /&gt;
I suggest using the default pose for the stand pose.  Simply duplicate the &amp;quot;{default} ...&amp;quot; line in .POSITIONS and change &amp;quot;default&amp;quot; to &amp;quot;stand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Adjusting poses ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.3 and later&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; at any time.  Whenever anyone is sitting on a poseball, it will be long and translucent to be easy to find and select.  We call these &amp;quot;beams&amp;quot;.  Participants can hop on and off balls at any time during adjustment.&lt;br /&gt;
* Select the beams (right-click -&amp;gt; Edit) and adjust them as desired.  When done with a pose, simply select the next pose.  The current pose&#039;s position is automatically saved.  Also, you can save the current pose&#039;s position at any time using &#039;&#039;&#039;OPTIONS -&amp;gt; Save Pos&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;To undo changes&#039;&#039;&#039; to the current pose, just select it again.  Alternatively, just quit adjusting.&lt;br /&gt;
* &#039;&#039;&#039;To quit adjusting&#039;&#039;&#039;, make sure the current pose is saved (if desired), and use either &#039;&#039;&#039;STOP&#039;&#039;&#039; or &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039;.  (Stop will also delete the balls and pop off any participants.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.2 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the menu to select whichever pose you want to adjust.  If it&#039;s a new pose, it will get the default pose.  Have avatars sit on the poseballs.  Use the menu &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; to make the poseballs visible and easy to select for editing.  (They get long and translucent, so we call them &amp;quot;beams&amp;quot;.)&lt;br /&gt;
* Select the beams and orient them as desired.  When done, use the &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; button.&lt;br /&gt;
* You may continue with the next pose, or re-adjust this one.  When someone stands, their poseball will go back to the normal shape.  Just click the &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button to make it a beam again.&lt;br /&gt;
* The &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button&#039;s only affect is to change the size and appearance of the poseballs.  Feel free to adjust positions by selecting the clear tiny sat-upon poseballs and moving them, if you prefer.&lt;br /&gt;
&lt;br /&gt;
== Saving pose positions to notecards ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039;: The &#039;&#039;&#039;SavePos&#039;&#039;&#039; button saves the position in MLPV2 memory.  A reset will cause it to forget.  End users will probably want to save the changes to notecards, and sellers will need to.&lt;br /&gt;
&lt;br /&gt;
This is why the .POSITIONS notecard should be ideally released to customers as MODIFY. Note as well, though, that if a notecard is placed in a no modify object, people will not be able to open the notecard at all, regardless of the perms on the notecard. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The ~swap script has to be in and running to save new positions! [for MLPV2.4 and later]&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, new object ===&lt;br /&gt;
&lt;br /&gt;
Follow these instructions if this is a new object and you plan to sell it and possibly a line of related objects with MLPV2 poses.  There is a simpler way for end users, below.&lt;br /&gt;
&lt;br /&gt;
Create a .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard, where &#039;&#039;mystuff&#039;&#039; matches your .MENUITEMS.&#039;&#039;mystuff&#039;&#039; file name.  (This isn&#039;t absolutely required, but makes life simple and I will assume that convention is followed in this tutorial.)&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
  [xx:xx]  : {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paste them into your notecard.  It isn&#039;t necessary to delete the stuff to the left of {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete the {default} line.  (Note: if you changed the default pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
Delete the {stand} line.  (Note: if you changed the stand pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
&lt;br /&gt;
Save, and use &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; PosReset&#039;&#039;&#039;.  This causes the .POSITIONS.* files to be re-read, including yours.&lt;br /&gt;
&lt;br /&gt;
That&#039;s about it; now you&#039;re ready to test your poses.  Have fun!&lt;br /&gt;
&lt;br /&gt;
Tip! For those using old MLP .MENUITEMS files: If the PosReset button is not offered, look for the RESTART option. Note that RESET will not re-read positions from the positions card. Only PosReset and RESTART will.&lt;br /&gt;
&lt;br /&gt;
=== Saving a single position that you&#039;ve updated ===&lt;br /&gt;
&lt;br /&gt;
When you use &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; for, say, &#039;&#039;pose1&#039;&#039;, you&#039;ll see a line in chat looking like this:&lt;br /&gt;
 &lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There may be a timestamp.  You can copy this line and replace it in the corresponding .POSITION.* file (e.g., the one already containing this pose&#039;s position).&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, simplified version for end users ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re adjusting an object you bought that&#039;s already set up, and you&#039;ve adjusted a lot of poses, this is the easiest way to save all your changes.  Note, however, that if your product has pose pack modules and you might want to remove one to make room for other add-on poses, this might not be the best way.&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may include a timestamp.&lt;br /&gt;
&lt;br /&gt;
Paste them into the .POSITIONS notecard, replacing its previous contents.  It is &#039;&#039;&#039;not&#039;&#039;&#039; necessary to delete the stuff before {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete all other .POSITIONS.* files in the MLPV2 prim&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
If you later decide to delete a pose pack (a .MENUITEMS.* file) with poses you won&#039;t use, you can still do that.  The positions for those poses will still be in the .POSITIONS notecard, and you can feel free to delete them manually.&lt;br /&gt;
&lt;br /&gt;
== Deleting adj-default menu button ==&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re happy with the default pose positions, simply delete .MENUITEMS.zz-default from the MLPV2 prim&#039;s inventory.  You can always put it back by dragging that file from the MLPV2 distribution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PROPS ==&lt;br /&gt;
&lt;br /&gt;
Beginning with MLPV2.1, you can provide prop objects that MLP will rez for specific poses.&lt;br /&gt;
&lt;br /&gt;
When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear in a few minutes.&lt;br /&gt;
&lt;br /&gt;
For any pose, you can have at most &#039;&#039;&#039;one&#039;&#039;&#039; prop object.  If you need more than one prop to rez, you&#039;ll have to link them so that they can be treated by MLPV2 as one object.&lt;br /&gt;
&lt;br /&gt;
1) The following lines are required in your MLP menu.  Starting with MLPV2.1, they&#039;re already in the standard .MENUITEMS, in the OPTIONS menu.  Add them if you&#039;re starting with an older version.&lt;br /&gt;
&lt;br /&gt;
 *LINKMSG DumpProps | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
 *LINKMSG SaveProp | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
2) Find the prim prop object that you want MLP to rez, and rez it.&lt;br /&gt;
&lt;br /&gt;
3) Add to this prop object the &amp;quot;~prop&amp;quot; script (you&#039;ll find this inside the supplied &amp;quot;~pillow&amp;quot; object).  Take your prop object back into inventory and drop it into the MLP prim&#039;s inventory.  Note: the prop object and everything in it will need to be copiable for next owner -- otherwise, it will only rez once for them!&lt;br /&gt;
&lt;br /&gt;
4) Edit a .PROPS notecard or add a new one (named .PROPS.* where * is whatever you want, for a modular config.)  Copy this example line and paste it into your .PROPS file.&lt;br /&gt;
&lt;br /&gt;
 | mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Don&#039;t omit the vertical bar (&amp;quot;|&amp;quot;) at the left.)&lt;br /&gt;
&lt;br /&gt;
: *Replace &amp;quot;mypose&amp;quot; with the name of the pose that the object should rez for.&amp;lt;br/&amp;gt;&lt;br /&gt;
: *Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save your work.&lt;br /&gt;
&lt;br /&gt;
5) Use the MLP menu&#039;s PosReset or Restart button.  When the MLP has restarted, select the pose that the prop goes with.  The prop should appear.  It might be underneath the MLP object, or some distance away, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time.&lt;br /&gt;
&lt;br /&gt;
6) Edit the prop, and use the editing arrows to move the prop to where you want it. Then, use the MLP menu &amp;quot;SaveProp&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
To make the change permanent, select the text in the chat  line (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .PROPS* file.  Or, do all your props, saving their positions, and then use the DumpProps button.  This works the same way as saving positions in .POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
7) To get MLP to reread .PROPS* files, use PosReset (which resets positions as well as props), or Restart.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved separately, so if you adjust a pose and its prop, you need to save both pose position and prop.  (When using AdjustPos feature with MLPV2.4 or later, both pose and prop positions are saved when you select a new pose.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;Worn or Hand-held Props&#039;&#039;&#039;: For props to be worn by the user, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&lt;br /&gt;
&lt;br /&gt;
== SEQUENCES ==&lt;br /&gt;
&lt;br /&gt;
Starting with MLPV2.3, you can create sequences of poses that run automatically once started.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a little complicated.  You need to:&lt;br /&gt;
&lt;br /&gt;
# set up menus (and often poses as well) for the sequences to use&lt;br /&gt;
# set up a control menu for the user to access and control the sequences&lt;br /&gt;
# program the sequences&lt;br /&gt;
&lt;br /&gt;
=== 1. Set up the menus (and poses)===&lt;br /&gt;
&lt;br /&gt;
In a .MENUITEMS.* notecard, create menus for the sequences to use. These menus:&lt;br /&gt;
&lt;br /&gt;
(a) tell sequences how many balls to rez, and of what colour;&amp;lt;br /&amp;gt;&lt;br /&gt;
(b) are used to set up poses for the sequences&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that are already in your menus, you&#039;re done here, nothing special to do.&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that you don&#039;t want to appear in any menu, you need to set up a &amp;quot;hidden menu&amp;quot;.  To do this, just make a menu the usual way, except use &amp;quot;HIDDEN&amp;quot; rather than &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, like this:&lt;br /&gt;
&lt;br /&gt;
 MENU ROMNIGHT | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Add your poses to this menu.  Avoid extra spaces, especially between MENU and the menu name.&lt;br /&gt;
&lt;br /&gt;
If you have sequences with different numbers of participants, you&#039;ll need to use additional menus with the appropriate number and color poseballs.&lt;br /&gt;
&lt;br /&gt;
=== 2. Create a control menu for the sequence(s) ===&lt;br /&gt;
&lt;br /&gt;
See the .MENUITEMS.example notecard in MLPV2 distribution as an example.  This menu has two buttons to start sequences, and two buttons to stop and continue them, along with the usual navigation and swap buttons:&lt;br /&gt;
&lt;br /&gt;
 // example menu containing 2 sequences, and sequence controls&lt;br /&gt;
 MENU Tours... | ALL&lt;br /&gt;
 LINKMSG *Tour1* | 0,-4,-12001,SEQUENCE Tour1-seq&lt;br /&gt;
 LINKMSG *Tour2* | 0,-4,-12001,SEQUENCE tour2-seq&lt;br /&gt;
 LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
 LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
 LINKMSG NARRATION | 0,-4,-12001,NARRATION&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
In the above, &amp;quot;*Tour1*&amp;quot; and &amp;quot;*Tour2*&amp;quot; are button labels -- that&#039;s what the user will see in the menu.&lt;br /&gt;
The &amp;quot;| 0,-4,-12001,SEQUENCE&amp;quot; part is pure magic, don&#039;t mess with that unless you&#039;re a magician.&lt;br /&gt;
&amp;quot;Tour1-seq&amp;quot; and &amp;quot;tour2-seq&amp;quot; are names of sequences in the .SEQUENCE* notecards.&lt;br /&gt;
Be careful: the names need to match exactly.&lt;br /&gt;
&lt;br /&gt;
PAUSE causes the sequence to stop advancing.&lt;br /&gt;
&lt;br /&gt;
RESUME causes the sequence to resume where it left off.  Alternatively, if you didn&#039;t PAUSE, RESUME advances to the next step.  This is handy for quickly testing a sequence with long wait times.&lt;br /&gt;
&lt;br /&gt;
NARRATION allows the user to toggle off and on any WHISPER or SAY messages you might have programmed.&lt;br /&gt;
&lt;br /&gt;
STOP stops the sequence and unrezzes the balls.  After a STOP, RESUME and PAUSE have no effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039; Avoid having two different buttons in an MLP/MLPV2 menu with the same button name.  Only the first of the two will work.  Subsequent ones (duplicates) will only cause the first button&#039;s effect.  (It&#039;s OK to have the same button appear in multiple places, if you want them all to do the same thing. BUT:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE MASSAGESCENE-seq&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE BJSCENE-seq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
in the same menu will cause havok, as the menu will get confused about the duplicate button label of PLAYALL&lt;br /&gt;
&lt;br /&gt;
=== 3. Programming a sequence ===&lt;br /&gt;
&lt;br /&gt;
Create a notecard whose name starts with .SEQUENCES, followed by whatever you wish.  In the MLPV2 distribution, this is .SEQUENCES.example.  I&#039;ll go through an example sequence explaining what each line does.&lt;br /&gt;
&lt;br /&gt;
Start the sequence with the sequence name specified in the control menu in .MENUITEMS file; in this case, &amp;quot;Tour1-seq&amp;quot;.  The name is arbitrary, it just has to match between the MENUITEMS notecard and the SEQUENCES notecard.  For example:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq&lt;br /&gt;
&lt;br /&gt;
Next, give it the name of a menu to use to model itself after for setting the number and color of balls.  You can change the menu later in the sequence using more MENU lines.&lt;br /&gt;
&lt;br /&gt;
 MENU | Example&lt;br /&gt;
&lt;br /&gt;
Note the vertical bar (&amp;quot;|&amp;quot;), unlike in a .MENUITEMS* card.  Note as well that all you put is the name of the menu, and not the stuff that would follow it in a .MENUITEMS* card.&lt;br /&gt;
&lt;br /&gt;
Now, program the steps in the sequence as poses followed by timed pauses, and possibly waiting for participants to hop on. (Note the pipe symbol | required, unlike in the .MENUITEMS card. Note as well that you only list the name of the pose -- not any associated animation.)&lt;br /&gt;
&lt;br /&gt;
 POSE | standing&lt;br /&gt;
&lt;br /&gt;
The line above starts the &amp;quot;standing&amp;quot; pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;:  The sequencer script currently (2011) won&#039;t give you any error messages if the Pose you reference doesn&#039;t actually exist. You&#039;re on your own here, Bernice, to get it right!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 | Waiting for someone to sit on blue ball&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for someone to sit on ~ball0.  (To see which ball a ball is, pick the pose using the menu and right-click-&amp;gt;Edit the ball.  The number at the end of the name is the number to put between the &amp;quot;|&amp;quot; characters above.)  The text after the final &amp;quot;|&amp;quot; is optional; it&#039;s what the object chats if it needs to wait.&lt;br /&gt;
&lt;br /&gt;
You can specify any number of balls here; for example, you can use:&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 1 2 3 | Waiting for all participants!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: Any looping sequence should have an AVWAIT in the loop.  We don&#039;t want to disturb the neighborhood with an unused bed running endlessly through a sequence.  In a future version, Lear might in fact make it an error to have a loop without an avwait.&lt;br /&gt;
&lt;br /&gt;
 WHISPER | 0 | /0 and /1 stand together&lt;br /&gt;
&lt;br /&gt;
The line above causes the object to whisper the given line on channel 0 (the number between the &amp;quot;|&amp;quot; characters).  &amp;quot;/0&amp;quot; through &amp;quot;/5&amp;quot; get substituted with the first name of the av on the corresponding ball.  If nobody is on the ball, it uses &amp;quot;somebody&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for 10 seconds before proceeding.&lt;br /&gt;
&lt;br /&gt;
 POSE | pillow-sit | 0 | /0 and /1 sit with a comfy pillow&lt;br /&gt;
&lt;br /&gt;
The line above selects a new pose and whispers the text on channel 0.  Note that we omitted this optional chat in the POSE line above.  As earlier, /0 and /1 are replaced with the participant&#039;s first names. Although you have two poses within the 10m rule, if the next pose in the sequence is 10m+ from the previous pose the balls won&#039;t go the distance.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
 POSE | sit2 | 0 | The pillow disappears&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
You should know by now what the lines above do.&lt;br /&gt;
&lt;br /&gt;
=== Programming a loop ===&lt;br /&gt;
&lt;br /&gt;
The next line causes the whole sequence to repeat.&lt;br /&gt;
&lt;br /&gt;
 REPEAT&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use a LABEL line anywhere in the sequence, and end the sequence with a GOTO line, as in the other example provided with the MLPV2 distribution:&lt;br /&gt;
&lt;br /&gt;
 LABEL | mylabel&lt;br /&gt;
 AVWAIT | 0 1|   //make sure we&#039;re not looping with no one using the balls, so check for people on both ball0 and ball1&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 GOTO | mylabel&lt;br /&gt;
&lt;br /&gt;
TIP! Don&#039;t re-use a label name twice in the same sequence notecard or funky things may happen.&lt;br /&gt;
&lt;br /&gt;
Or, you can just have the sequence end by not adding any more steps (or, by starting a new sequence).  If the sequence doesn&#039;t end with GOTO or REPEAT, it simply pauses at the end, leaving the participants in the last pose.&lt;br /&gt;
&lt;br /&gt;
TIP! It doesn&#039;t matter whether you leave spaces or not around the | symbol; the sequences script will sort it out.&lt;br /&gt;
&lt;br /&gt;
=== Avoiding the posename chat ===&lt;br /&gt;
&lt;br /&gt;
By default, MLPV2 chats the pose name whenever it starts, either by menu or sequence.  If you don&#039;t want it chatting pose names during sequence, add &amp;quot;| NOCHAT&amp;quot; to the end of the SEQUENCE line, like this:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq | NOCHAT&lt;br /&gt;
&lt;br /&gt;
=== Hiding the poses from the menu ===&lt;br /&gt;
&lt;br /&gt;
You can hide any MENU in the notecards from the user by using &amp;quot;HIDDEN&amp;quot; instead of &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, as below:&lt;br /&gt;
&lt;br /&gt;
 MENU | seq1-poses | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Put your sequenced poses in such a menu and they&#039;ll be invisible to the user.  Just remember to set up the pose positions before hiding the menu they&#039;re in!  Of course, you can use &amp;quot;Adjust pos&amp;quot;, PAUSE in the sequence, and adjust.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TIP: Sequence naming rules ===&lt;br /&gt;
&lt;br /&gt;
A sequence has&lt;br /&gt;
# a button name&lt;br /&gt;
# a sequence name&lt;br /&gt;
&lt;br /&gt;
The button name and sequence name appear in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Cuddle | 0,-4,-12001,SEQUENCE WarmUp&lt;br /&gt;
&lt;br /&gt;
Cuddle is the button name, WarmUp is the sequence name.&lt;br /&gt;
&lt;br /&gt;
The sequence name also appears in the .SEQUENCES.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | WarmUp&lt;br /&gt;
&lt;br /&gt;
This is the fist line of the sequence.  WarmUp is the sequence name.  &#039;&#039;&#039;It must exactly match the sequence name&#039;&#039;&#039; (WarmUp) in the LINKMSG line in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard!&lt;br /&gt;
&lt;br /&gt;
The button name does &#039;&#039;&#039;not&#039;&#039;&#039; need to match the sequence name.  It&#039;s OK if it does.&lt;br /&gt;
&lt;br /&gt;
== Configurable SWAPs ==&lt;br /&gt;
&lt;br /&gt;
By default, the SWAP button swaps the first two balls, which is appropriate for couples poses.  Therefore, there is no need to configure swaps for solo and couples poses.&lt;br /&gt;
&lt;br /&gt;
For poses with 3 or more parties, you may want to configure what the swap button does.  In this case, the button will cycle through a set of ball orders for the pose.&lt;br /&gt;
&lt;br /&gt;
It&#039;s confusing, but stick with me and we&#039;ll muddle through.  Here&#039;s the big picture.  Each line in the .SWAPS.&#039;&#039;myStuff&#039;&#039; notecard configures the swaps for one pose.  (I would rather have done it per menu, but that just didn&#039;t work out, sorry!)&lt;br /&gt;
&lt;br /&gt;
For a pose, we configure a set of ball permutations (arrangements, or orders).  When the user hits SWAP, the balls will cycle through the given permutations.  The first perumtation is always 0 1 2 3 4 5, meaning that ball0 is first, ball1 is second, ball2 is next, etc.  (For a PINK | BLUE | RED menu, ball0 is pink, ball1 is blue, and ball2 is red.)&lt;br /&gt;
&lt;br /&gt;
Since the &amp;quot;0 1 2 3 4 5&amp;quot; permutation is the default, it is NOT configured but is assumed.  We only configure the 2nd, 3rd, and subsequent permutation (as many as we like).&lt;br /&gt;
&lt;br /&gt;
Each line of the swap configuration notecard looks like this:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;posename&#039;&#039; | &#039;&#039;permu2&#039;&#039; : &#039;&#039;permu3&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where there can be any number of permutations, separated by a colon (&amp;quot;:&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the orders are given by a list of poseball position numbers.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at an example, with a 3-ball menu that uses PINK | BLUE | RED balls.  Let&#039;s say we want the pink and red balls to swap, but leave the blue ball alone.&lt;br /&gt;
&lt;br /&gt;
So, the permutations would be first the implicit 0 1 2 permutation, and then the swapped one, which in this case would be 2 1 0.  It would be configured like this:&lt;br /&gt;
&lt;br /&gt;
 fmf-cuddle | 2 1 0&lt;br /&gt;
&lt;br /&gt;
where fmf-cuddle is the pose name.&lt;br /&gt;
&lt;br /&gt;
Confused yet?  Yeah, me too.  Now let&#039;s try a 3some pose where we want to rotate all three.  For example, they&#039;re sitting around a round table, and we just want each one to move one position to the side.&lt;br /&gt;
&lt;br /&gt;
The first permutation is always 0 1 2.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 2 0 1.  Balls 0 and 1 move right one place, and ball 2 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 1 2 0.  Balls 2 and 0 move right one place, and ball 1 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
We&#039;d configure it like this.  Remember we omit the first permutation, since it&#039;s the default permutation and is implicit:&lt;br /&gt;
&lt;br /&gt;
 3-sitting | 2 0 1 : 1 2 0&lt;br /&gt;
&lt;br /&gt;
When we hit SWAP the first time, we get the 2 0 1 permutation.  Hit it again, we get 1 2 0.  Hit it again and we go back to 0 1 2, the implicit default permutation.  And so on, until the avatars get dizzy.&lt;br /&gt;
&lt;br /&gt;
When I configure swaps, I actually write down the default permutation and keep it there to help me think, and then delete it when I create the pose configuration line.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s try a two couples 4some for a PINK BLUE RED GREEN menu (female, male, female, male), where first we want the females to swap, and then we want the males to swap.  I&#039;ll start out with the default permutation shown because it helps my feeble mind.  Then I&#039;ll put the subsequent permutations below, in sequence.&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
&lt;br /&gt;
for the next one, let&#039;s swap the men but leave the women swapped:&lt;br /&gt;
&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
&lt;br /&gt;
Are we done?  Well, if we stopped here, the next click on SWAP would move all 4 balls.  Instead, let&#039;s swap the men again, and then moving back to the default will only swap the women.&lt;br /&gt;
&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
So, putting them all together:&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
I hope you&#039;re getting the picture by now.  If your head hurts, well, mine does too.  Just try doing some 6some swaps for real fun!&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the resulting configuration line:&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1 &lt;br /&gt;
&lt;br /&gt;
NOTE: I did not test these configs, and I make mistakes.  I&#039;ll try to find time to test.  In the meantime, please feel free to try it out and &#039;&#039;&#039;please&#039;&#039;&#039; let me know of any mistakes.&lt;br /&gt;
&lt;br /&gt;
Here are some common useful swaps, including the examples above.  Delete the comments before using, and of course, replace the name I&#039;ve given here with the actual pose name.&lt;br /&gt;
&lt;br /&gt;
3somes&lt;br /&gt;
&lt;br /&gt;
 mfm-mfm | 2 0 1 : 1 2 0                                // swap first &amp;amp; third of 3some&lt;br /&gt;
 3-swap-other | 0 2 1                                   // swap 2nd pair of 3some&lt;br /&gt;
 3-rotate-1 | 2 0 1 : 1 2 0                             // rotate three, one direction&lt;br /&gt;
 3-rotate-2 | 1 2 0 : 2 0 1                             // rotate three, other direction&lt;br /&gt;
 3-all | 0 1 2 : 0 2 1 : 2 0 1 : 2 1 0 : 1 2 0 : 1 0 2  // all permutations&lt;br /&gt;
&lt;br /&gt;
4somes&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1&lt;br /&gt;
 fmmm-rotate-m | 0 2 3 1 : 0 3 1 2                      // hold 0, rotate others&lt;br /&gt;
 mfmm-rotate-m | 2 1 3 0 : 3 1 0 2                      // hold 1, rotate others&lt;br /&gt;
&lt;br /&gt;
5somes&lt;br /&gt;
&lt;br /&gt;
 fmfmf | 2 1 4 3 0 : 2 3 4 1 0 : 4 3 0 1 2 : 4 1 0 3 2  // alternately rotate women, swap men&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Expandability ===&lt;br /&gt;
&lt;br /&gt;
For expandability, we recommend that each .MENUITEMS* file contain one &amp;quot;unanchored&amp;quot; menu at the top, with any submenus in the notecard hanging off of that unanchored one. This allows 10 independent modules and only memory limitations on the total number of menus. We also suggest dividing menus &amp;amp; positions into separate notecards making it easy for customers to delete the ones they won&#039;t use.&lt;br /&gt;
&lt;br /&gt;
(An &amp;quot;unanchored&amp;quot; menu is one that doesn&#039;t have any TOMENU button leading to it.)&lt;br /&gt;
&lt;br /&gt;
MLPV2 loads the notecards in the same order they appear in object inventory.  The buttons for the unanchored menus in these notecards are added to the main menu in the same order.  So, name your extensions so your notecards sort in the order you want these buttons to appear.&lt;br /&gt;
&lt;br /&gt;
=== Main menu ===&lt;br /&gt;
&lt;br /&gt;
By convention, the top, &amp;quot;main menu&amp;quot; often includes buttons such as OPTIONS, SHUTDOWN, etc, as well as buttons providing access to the sub-menus.  By convention, this menu is defined in the .MENUITEMS notecard (note, no suffix).&lt;br /&gt;
&lt;br /&gt;
Don&#039;t attempt to put actual poses in the menus found here. They won&#039;t work reliably, since these menus don&#039;t list the number and color of poseballs.&lt;br /&gt;
&lt;br /&gt;
=== Help button ===&lt;br /&gt;
&lt;br /&gt;
You may wish to add at this top level a HELP button.&lt;br /&gt;
&lt;br /&gt;
The configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
LINKMSG HELP | 1,-4,987789,-Help for XYZProduct##Here&#039;s your help notecard&lt;br /&gt;
&lt;br /&gt;
Put this line at the end of the &amp;quot;TOMENU -&amp;quot; lines below MAIN MENU.&lt;br /&gt;
&lt;br /&gt;
Then drop in the ~give script add-on found here [[MLPV2_Give_Item_Add-on]]&lt;br /&gt;
&lt;br /&gt;
It might be better to name the help notecard something other than just &amp;quot;Help&amp;quot;, so that your users can identify it more easily when it ends up in their inventories.&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190751</id>
		<title>MLPV2 Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190751"/>
		<updated>2014-05-12T22:31:37Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* 3. Programming a sequence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is intended for &amp;quot;builders&amp;quot;: people adding poses to furniture.&lt;br /&gt;
&lt;br /&gt;
Folks who just want to know how to use their furniture should see [[MLPV2 Users Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Setting up MLPV2 ==&lt;br /&gt;
These instructions look long, but it&#039;s easier than it looks.  Here&#039;s the overview:&lt;br /&gt;
# get the scripts and notecards and drop them into a prim (CREATE YOUR OWN PRIM -- so folks know who made it!)&lt;br /&gt;
# put your anims in the same prim&lt;br /&gt;
# Create and edit one or more .MENUITEMS.* notecards (use whatever you want for &amp;quot;*&amp;quot;).  Configure menus and add poses to the menus.  Mostly the same as old MLP, with enhancements and no need to edit the main menu.)&lt;br /&gt;
# Reset and try the menu&lt;br /&gt;
# adust each pose (same way as old MLP)&lt;br /&gt;
# dump memory and save positions in notecard (nearly same way as old MLP; sellers may want to use modular .POSITIONS.* files)&lt;br /&gt;
&lt;br /&gt;
These instructions are oriented for someone setting up a new object.  However, those who bought one and are adjusting it or adding poses can simply skip the obvious steps that the maker would already have done.&lt;br /&gt;
&lt;br /&gt;
== Get the scripts ==&lt;br /&gt;
The latest scripts are available at jPose Island, in the FREEBIES section.  It is Adult land, so you will need to either have payment info on file or be adult certified.&lt;br /&gt;
&lt;br /&gt;
MLPV2.3 is available on Marketplace, under Lear Cale as merchant.&lt;br /&gt;
&lt;br /&gt;
Take a good look at the .readme file.&lt;br /&gt;
&lt;br /&gt;
== Install scripts ==&lt;br /&gt;
Rez the MLPV2 and copy its contents into inventory and then into your furniture.&lt;br /&gt;
&lt;br /&gt;
Delete the notecards ending in &amp;quot;examples&amp;quot;, along with the ~pillow object and any example animations you don&#039;t plan to use.&lt;br /&gt;
&lt;br /&gt;
Life is easiest if you use your object&#039;s root prim for MLPV2; instructions below for when it&#039;s not.  For your first try, stick with root prim and keep life simple.  (An easy way to add it to an existing bed is to just float it slightly above your mattress and then apply a totally clear texture, available in any freebie depot.)  Below, we&#039;ll call this prim the &amp;quot;MLP prim&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[Tip: You&#039;ll thank yourself later in life if you try to keep the orientation of the MLP prim the same across your products, for example, with rotation 0,0,0.  This makes it easier to transfer poses between products.  However, with sculpties this isn&#039;t always feasible.]&lt;br /&gt;
&lt;br /&gt;
Click the MLP prim so that it starts up for the first time.  If you get a menu, fine; you&#039;ve already done this.  If nothing happens, click again -- an SL bug causes the first click to get lost.&lt;br /&gt;
&lt;br /&gt;
== Install animations ==&lt;br /&gt;
Drag all the anims you&#039;ll use into the prim.  (You can pull these out of poseballs you like.  If the animations are no-copy, this will render the poseballs useless.)&lt;br /&gt;
&lt;br /&gt;
Note: not all animations will work with MLP. See discussion here: [[MLPV2_Reference_Manual#TIP.21_Animations_Caveat]]&lt;br /&gt;
&lt;br /&gt;
== Create and edit your .MENUITEMS.* file ==&lt;br /&gt;
&lt;br /&gt;
Create a new notecard, named &amp;quot;.MENUITEMS.&#039;&#039;mystuff&#039;&#039;&amp;quot;, where &amp;quot;&#039;&#039;mystuff&#039;&#039;&amp;quot; can be anything you want.  MLPV2 can take any number of these, and bed sellers can make different pose sets for different customers.&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorial1.6.png|100px|thumb|left|Click for graphic view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the object.  [You might want to do most of the editing first; objects with lots of things in inventory react slowly to changes, and you might have a lot of animations.  As of Nov/2009, there&#039;s also an issue with editing notecards in object inventory.  Unless you&#039;ve heard the &amp;quot;all clear&amp;quot; on this, or know the workaround, it&#039;s best to edit in your avatar inventory.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a menu:&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;MyMenu&#039;&#039; | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
[Tip! The standard practice is to list the pink ball first, then the blue -- you may do the opposite if you wish, but for what it&#039;s worth, that&#039;s the convention. This convention was established in 2006 with the release of MLP 1.1, and is practised in XPOSE! as well.] &lt;br /&gt;
&lt;br /&gt;
This creates a menu whose button in the top menu will be labeled &#039;&#039;MyMenu&#039;&#039;.  &#039;&#039;&#039;ALL&#039;&#039;&#039; indicates that it will be accessible by everyone (alternatives here are &#039;&#039;&#039;GROUP&#039;&#039;&#039;, only allowing people in the same group as the object, or &#039;&#039;&#039;OWNER&#039;&#039;&#039;, only allowing the owner).  After that, list each ball color for the poses in this menu.  You can have up to six balls.  If you have some solo poses, some couples poses, and some 3some poses, they have to be in different menus.&lt;br /&gt;
&lt;br /&gt;
In this example, a pink and a blue poseball will be rezzed.&lt;br /&gt;
&lt;br /&gt;
For each pose in this menu, add a line like this:&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;pose1&#039;&#039; | &#039;&#039;anim1&#039;&#039; | &#039;&#039;anim2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
: &#039;&#039;pose1&#039;&#039; will be the button name for this pose.&lt;br /&gt;
: &#039;&#039;anim1&#039;&#039; is the name of the animation for the first poseball (which happens to be pink in our example)&lt;br /&gt;
: &#039;&#039;anim2&#039;&#039; is the name of the animation for the second poseball (which happens to be blue in our example)&lt;br /&gt;
&lt;br /&gt;
Zero, one, or two spaces are allowed around the vertical bars.  Avoid extra spaces.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;facial expressions&#039;&#039;&#039;, you add a suffix to the animation names indicating the expression.  Note that you don&#039;t change the actual name of the animation in the inventory, you just add the suffix in this configuration notecard.  These are explained in [[MLPV2_Reference_Manual#Animations_.28Facial.29]] .  For a simple example, appending &amp;quot;*&amp;quot; will give an astonished open-mouth expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following can also be included in your menu:&lt;br /&gt;
 STOP&lt;br /&gt;
 SWAP&lt;br /&gt;
 BACK&lt;br /&gt;
 TOMENU &#039;&#039;MyOtherMenu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;STOP&#039;&#039;&#039; makes a button labeled STOP that de-rezzes the poseballs and unsits everyone.&lt;br /&gt;
: &#039;&#039;&#039;SWAP&#039;&#039;&#039; makes a button labeled SWAP that exchanges the first two balls, by default.  Starting with MLPV2.4, you can configure the swap arrangements for poses with multiple balls, [LINNK TBD].&lt;br /&gt;
: &#039;&#039;&#039;BACK&#039;&#039;&#039; makes a button labeled BACK that goes back to the previous menu.  Every menu should have one of these!&lt;br /&gt;
: &#039;&#039;&#039;TOMENU&#039;&#039;&#039; makes a button labeled &#039;&#039;MyOtherMenu&#039;&#039;, which goes to the &#039;&#039;MyOtherMenu&#039;&#039; menu (which you must create).&lt;br /&gt;
&lt;br /&gt;
With MLPV2 (assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP configuration), any MENU that is &#039;&#039;&#039;not&#039;&#039;&#039; found in a previous &#039;&#039;&#039;TOMENU&#039;&#039;&#039; entry is added to an empty slot in the top menu.  I&#039;ll talk more about this below, under [[MLPV2 Submenus]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good convention to end each menu with the following:&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
For MLPV2 (again, assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP config), buttons are placed in the menu in the same order they appear in the config notecard. To set old MLP configs to using this new (sane) menu order, see here: [http://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#MENUORDER]&lt;br /&gt;
&lt;br /&gt;
Repeat the above for each menu you want.  Poses with different numbers of participants have to be in different menus, since the MENU line gives the number and colors of the balls.&lt;br /&gt;
&lt;br /&gt;
For a menu with 3 or more poses, the POSE line would list that number of animations, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Continuation menus ==&lt;br /&gt;
As we all know, you get at most 12 buttons in an SL menu.  However, starting with MLPV2.1, you can have more than 12 buttons in a configured MENU.  If there are more than 12, MLPV2.1 and later will automatically add a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button after the 11th item, leading to the remaining choices.  (And also after the 22nd item, etc.)&lt;br /&gt;
&lt;br /&gt;
If you wish MLPV2 to automatically a &#039;&#039;&#039;BACK&#039;&#039;&#039; button whenever it adds a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button, add the AUTOBACK directive to your .MENUITEMS config card. It doesn&#039;t matter where it is, but convention is to put it near the top.  Put it alone on a line.&lt;br /&gt;
&lt;br /&gt;
Note that a  &#039;&#039;&#039;BACK&#039;&#039;&#039; button will not be added to the top, main menu (because there is no further back there to go back up to.) Nor will it add it to the last page of a series of sub-menu pages, or to a single-page sub-menu -- you must add the word BACK yourself manually to these if desired.&lt;br /&gt;
&lt;br /&gt;
== Menu Reset ==&lt;br /&gt;
Save your changes.  (If you&#039;re editing a copy in inventory, install it in the MLPV2 prim).&lt;br /&gt;
&lt;br /&gt;
Click the MLPV2 object.  If this is the first time since you installed the scripts, it will start up and read the configurations.  If you get a menu, select &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; Menu Reset&#039;&#039;&#039;.  This button causes it to re-read all .MENUITEMS* files, including yours.&lt;br /&gt;
&lt;br /&gt;
Watch for warning messages.  The most common one is due to an animation being missing or misspelled in the configuration.  Fix any mistakes and do another Menu Reset.  (A reset is &#039;&#039;&#039;not&#039;&#039;&#039; required for missing animations; just drop in the anim.  If you don&#039;t have some of them yet, don&#039;t worry, this won&#039;t do any harm.&lt;br /&gt;
&lt;br /&gt;
Click to get the menu.  You should see the button for your new menu; click it.  You should see the menu you configured.  Click the first pose.  You should see the right number and color balls appear.  They may be in odd places.&lt;br /&gt;
&lt;br /&gt;
Tip! Note that &amp;quot;MenuReset&amp;quot; will not re-read positions from the positions card.  PosReset and Restart will.&lt;br /&gt;
&lt;br /&gt;
== The default pose ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;default pose&amp;quot; is a set of poseball positions and orientations that is used for any new pose, since new poses don&#039;t have saved positions yet.&lt;br /&gt;
&lt;br /&gt;
The default pose in the MLPV2 distribution assumes that the MLPV2 prim is essentially an unrotated box, flattened and stretched like a mattress cover.  If your prim is rotated (as is likely if you&#039;re using a flattened cylinder lying on its side for the mattress, and MLPV2 is in the mattress), you will want to adjust the default pose so none of the balls are underground.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Go to main blue menu and select &#039;&#039;&#039;adj-default -&amp;gt; default&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Tip! If you don&#039;t have this choice, see here: [https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#TIP.21_Default_Pose]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the default pose looks fine (6 balls arranged in a hexagon, avs sitting facing each other), skip this step.&lt;br /&gt;
&lt;br /&gt;
If the default pose looks wrong, adjust it following the instructions below, as for any pose you would add.  You may have to be clever to get at balls that might end up under the floor or buried in your object.&lt;br /&gt;
&lt;br /&gt;
When saving the default pose as described below, be sure to save it to the .POSITIONS notecard, rather than to your .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard.&lt;br /&gt;
&lt;br /&gt;
== The stand pose ==&lt;br /&gt;
&lt;br /&gt;
MLPV2 uses the &#039;&#039;&#039;stand&#039;&#039;&#039; pose whenever STOP is used (or on any reset button in the Shutdown menu), just before unseating the avatars.  This helps avoid them popping high into the sky, which happens when poseballs are buried inside the object.&lt;br /&gt;
&lt;br /&gt;
I suggest using the default pose for the stand pose.  Simply duplicate the &amp;quot;{default} ...&amp;quot; line in .POSITIONS and change &amp;quot;default&amp;quot; to &amp;quot;stand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Adjusting poses ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.3 and later&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; at any time.  Whenever anyone is sitting on a poseball, it will be long and translucent to be easy to find and select.  We call these &amp;quot;beams&amp;quot;.  Participants can hop on and off balls at any time during adjustment.&lt;br /&gt;
* Select the beams (right-click -&amp;gt; Edit) and adjust them as desired.  When done with a pose, simply select the next pose.  The current pose&#039;s position is automatically saved.  Also, you can save the current pose&#039;s position at any time using &#039;&#039;&#039;OPTIONS -&amp;gt; Save Pos&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;To undo changes&#039;&#039;&#039; to the current pose, just select it again.  Alternatively, just quit adjusting.&lt;br /&gt;
* &#039;&#039;&#039;To quit adjusting&#039;&#039;&#039;, make sure the current pose is saved (if desired), and use either &#039;&#039;&#039;STOP&#039;&#039;&#039; or &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039;.  (Stop will also delete the balls and pop off any participants.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.2 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the menu to select whichever pose you want to adjust.  If it&#039;s a new pose, it will get the default pose.  Have avatars sit on the poseballs.  Use the menu &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; to make the poseballs visible and easy to select for editing.  (They get long and translucent, so we call them &amp;quot;beams&amp;quot;.)&lt;br /&gt;
* Select the beams and orient them as desired.  When done, use the &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; button.&lt;br /&gt;
* You may continue with the next pose, or re-adjust this one.  When someone stands, their poseball will go back to the normal shape.  Just click the &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button to make it a beam again.&lt;br /&gt;
* The &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button&#039;s only affect is to change the size and appearance of the poseballs.  Feel free to adjust positions by selecting the clear tiny sat-upon poseballs and moving them, if you prefer.&lt;br /&gt;
&lt;br /&gt;
== Saving pose positions to notecards ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039;: The &#039;&#039;&#039;SavePos&#039;&#039;&#039; button saves the position in MLPV2 memory.  A reset will cause it to forget.  End users will probably want to save the changes to notecards, and sellers will need to.&lt;br /&gt;
&lt;br /&gt;
This is why the .POSITIONS notecard should be ideally released to customers as MODIFY. Note as well, though, that if a notecard is placed in a no modify object, people will not be able to open the notecard at all, regardless of the perms on the notecard. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The ~swap script has to be in and running to save new positions! [for MLPV2.4 and later]&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, new object ===&lt;br /&gt;
&lt;br /&gt;
Follow these instructions if this is a new object and you plan to sell it and possibly a line of related objects with MLPV2 poses.  There is a simpler way for end users, below.&lt;br /&gt;
&lt;br /&gt;
Create a .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard, where &#039;&#039;mystuff&#039;&#039; matches your .MENUITEMS.&#039;&#039;mystuff&#039;&#039; file name.  (This isn&#039;t absolutely required, but makes life simple and I will assume that convention is followed in this tutorial.)&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
  [xx:xx]  : {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paste them into your notecard.  It isn&#039;t necessary to delete the stuff to the left of {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete the {default} line.  (Note: if you changed the default pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
Delete the {stand} line.  (Note: if you changed the stand pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
&lt;br /&gt;
Save, and use &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; PosReset&#039;&#039;&#039;.  This causes the .POSITIONS.* files to be re-read, including yours.&lt;br /&gt;
&lt;br /&gt;
That&#039;s about it; now you&#039;re ready to test your poses.  Have fun!&lt;br /&gt;
&lt;br /&gt;
Tip! For those using old MLP .MENUITEMS files: If the PosReset button is not offered, look for the RESTART option. Note that RESET will not re-read positions from the positions card. Only PosReset and RESTART will.&lt;br /&gt;
&lt;br /&gt;
=== Saving a single position that you&#039;ve updated ===&lt;br /&gt;
&lt;br /&gt;
When you use &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; for, say, &#039;&#039;pose1&#039;&#039;, you&#039;ll see a line in chat looking like this:&lt;br /&gt;
 &lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There may be a timestamp.  You can copy this line and replace it in the corresponding .POSITION.* file (e.g., the one already containing this pose&#039;s position).&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, simplified version for end users ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re adjusting an object you bought that&#039;s already set up, and you&#039;ve adjusted a lot of poses, this is the easiest way to save all your changes.  Note, however, that if your product has pose pack modules and you might want to remove one to make room for other add-on poses, this might not be the best way.&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may include a timestamp.&lt;br /&gt;
&lt;br /&gt;
Paste them into the .POSITIONS notecard, replacing its previous contents.  It is &#039;&#039;&#039;not&#039;&#039;&#039; necessary to delete the stuff before {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete all other .POSITIONS.* files in the MLPV2 prim&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
If you later decide to delete a pose pack (a .MENUITEMS.* file) with poses you won&#039;t use, you can still do that.  The positions for those poses will still be in the .POSITIONS notecard, and you can feel free to delete them manually.&lt;br /&gt;
&lt;br /&gt;
== Deleting adj-default menu button ==&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re happy with the default pose positions, simply delete .MENUITEMS.zz-default from the MLPV2 prim&#039;s inventory.  You can always put it back by dragging that file from the MLPV2 distribution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PROPS ==&lt;br /&gt;
&lt;br /&gt;
Beginning with MLPV2.1, you can provide prop objects that MLP will rez for specific poses.&lt;br /&gt;
&lt;br /&gt;
When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear in a few minutes.&lt;br /&gt;
&lt;br /&gt;
For any pose, you can have at most &#039;&#039;&#039;one&#039;&#039;&#039; prop object.  If you need more than one prop to rez, you&#039;ll have to link them so that they can be treated by MLPV2 as one object.&lt;br /&gt;
&lt;br /&gt;
1) The following lines are required in your MLP menu.  Starting with MLPV2.1, they&#039;re already in the standard .MENUITEMS, in the OPTIONS menu.  Add them if you&#039;re starting with an older version.&lt;br /&gt;
&lt;br /&gt;
 *LINKMSG DumpProps | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
 *LINKMSG SaveProp | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
2) Find the prim prop object that you want MLP to rez, and rez it.&lt;br /&gt;
&lt;br /&gt;
3) Add to this prop object the &amp;quot;~prop&amp;quot; script (you&#039;ll find this inside the supplied &amp;quot;~pillow&amp;quot; object).  Take your prop object back into inventory and drop it into the MLP prim&#039;s inventory.  Note: the prop object and everything in it will need to be copiable for next owner -- otherwise, it will only rez once for them!&lt;br /&gt;
&lt;br /&gt;
4) Edit a .PROPS notecard or add a new one (named .PROPS.* where * is whatever you want, for a modular config.)  Copy this example line and paste it into your .PROPS file.&lt;br /&gt;
&lt;br /&gt;
 | mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Don&#039;t omit the vertical bar (&amp;quot;|&amp;quot;) at the left.)&lt;br /&gt;
&lt;br /&gt;
: *Replace &amp;quot;mypose&amp;quot; with the name of the pose that the object should rez for.&amp;lt;br/&amp;gt;&lt;br /&gt;
: *Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save your work.&lt;br /&gt;
&lt;br /&gt;
5) Use the MLP menu&#039;s PosReset or Restart button.  When the MLP has restarted, select the pose that the prop goes with.  The prop should appear.  It might be underneath the MLP object, or some distance away, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time.&lt;br /&gt;
&lt;br /&gt;
6) Edit the prop, and use the editing arrows to move the prop to where you want it. Then, use the MLP menu &amp;quot;SaveProp&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
To make the change permanent, select the text in the chat  line (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .PROPS* file.  Or, do all your props, saving their positions, and then use the DumpProps button.  This works the same way as saving positions in .POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
7) To get MLP to reread .PROPS* files, use PosReset (which resets positions as well as props), or Restart.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved separately, so if you adjust a pose and its prop, you need to save both pose position and prop.  (When using AdjustPos feature with MLPV2.4 or later, both pose and prop positions are saved when you select a new pose.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;Worn or Hand-held Props&#039;&#039;&#039;: For props to be worn by the user, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&lt;br /&gt;
&lt;br /&gt;
== SEQUENCES ==&lt;br /&gt;
&lt;br /&gt;
Starting with MLPV2.3, you can create sequences of poses that run automatically once started.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a little complicated.  You need to:&lt;br /&gt;
&lt;br /&gt;
# set up menus (and often poses as well) for the sequences to use&lt;br /&gt;
# set up a control menu for the user to access and control the sequences&lt;br /&gt;
# program the sequences&lt;br /&gt;
&lt;br /&gt;
=== 1. Set up the menus (and poses)===&lt;br /&gt;
&lt;br /&gt;
In a .MENUITEMS.* notecard, create menus for the sequences to use. These menus:&lt;br /&gt;
&lt;br /&gt;
(a) tell sequences how many balls to rez, and of what colour;&amp;lt;br /&amp;gt;&lt;br /&gt;
(b) are used to set up poses for the sequences&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that are already in your menus, you&#039;re done here, nothing special to do.&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that you don&#039;t want to appear in any menu, you need to set up a &amp;quot;hidden menu&amp;quot;.  To do this, just make a menu the usual way, except use &amp;quot;HIDDEN&amp;quot; rather than &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, like this:&lt;br /&gt;
&lt;br /&gt;
 MENU ROMNIGHT | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Add your poses to this menu.  Avoid extra spaces, especially between MENU and the menu name.&lt;br /&gt;
&lt;br /&gt;
If you have sequences with different numbers of participants, you&#039;ll need to use additional menus with the appropriate number and color poseballs.&lt;br /&gt;
&lt;br /&gt;
=== 2. Create a control menu for the sequence(s) ===&lt;br /&gt;
&lt;br /&gt;
See the .MENUITEMS.example notecard in MLPV2 distribution as an example.  This menu has two buttons to start sequences, and two buttons to stop and continue them, along with the usual navigation and swap buttons:&lt;br /&gt;
&lt;br /&gt;
 // example menu containing 2 sequences, and sequence controls&lt;br /&gt;
 MENU Tours... | ALL&lt;br /&gt;
 LINKMSG *Tour1* | 0,-4,-12001,SEQUENCE Tour1-seq&lt;br /&gt;
 LINKMSG *Tour2* | 0,-4,-12001,SEQUENCE tour2-seq&lt;br /&gt;
 LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
 LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
 LINKMSG NARRATION | 0,-4,-12001,NARRATION&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
In the above, &amp;quot;*Tour1*&amp;quot; and &amp;quot;*Tour2*&amp;quot; are button labels -- that&#039;s what the user will see in the menu.&lt;br /&gt;
The &amp;quot;| 0,-4,-12001,SEQUENCE&amp;quot; part is pure magic, don&#039;t mess with that unless you&#039;re a magician.&lt;br /&gt;
&amp;quot;Tour1-seq&amp;quot; and &amp;quot;tour2-seq&amp;quot; are names of sequences in the .SEQUENCE* notecards.&lt;br /&gt;
Be careful: the names need to match exactly.&lt;br /&gt;
&lt;br /&gt;
PAUSE causes the sequence to stop advancing.&lt;br /&gt;
&lt;br /&gt;
RESUME causes the sequence to resume where it left off.  Alternatively, if you didn&#039;t PAUSE, RESUME advances to the next step.  This is handy for quickly testing a sequence with long wait times.&lt;br /&gt;
&lt;br /&gt;
NARRATION allows the user to toggle off and on any WHISPER or SAY messages you might have programmed.&lt;br /&gt;
&lt;br /&gt;
STOP stops the sequence and unrezzes the balls.  After a STOP, RESUME and PAUSE have no effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039; Avoid having two different buttons in an MLP/MLPV2 menu with the same button name.  Only the first of the two will work.  Subsequent ones (duplicates) will only cause the first button&#039;s effect.  (It&#039;s OK to have the same button appear in multiple places, if you want them all to do the same thing. BUT:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE MASSAGESCENE-seq&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE BJSCENE-seq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
in the same menu will cause havok, as the menu will get confused about the duplicate button label of PLAYALL&lt;br /&gt;
&lt;br /&gt;
=== 3. Programming a sequence ===&lt;br /&gt;
&lt;br /&gt;
Create a notecard whose name starts with .SEQUENCES, followed by whatever you wish.  In the MLPV2 distribution, this is .SEQUENCES.example.  I&#039;ll go through an example sequence explaining what each line does.&lt;br /&gt;
&lt;br /&gt;
Start the sequence with the sequence name specified in the control menu in .MENUITEMS file; in this case, &amp;quot;Tour1-seq&amp;quot;.  The name is arbitrary, it just has to match between the MENUITEMS notecard and the SEQUENCES notecard.  For example:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq&lt;br /&gt;
&lt;br /&gt;
Next, give it the name of a menu to use to model itself after for setting the number and color of balls.  You can change the menu later in the sequence using more MENU lines.&lt;br /&gt;
&lt;br /&gt;
 MENU | Example&lt;br /&gt;
&lt;br /&gt;
Note the vertical bar (&amp;quot;|&amp;quot;), unlike in a .MENUITEMS* card.  Note as well that all you put is the name of the menu, and not the stuff that would follow it in a .MENUITEMS* card.&lt;br /&gt;
&lt;br /&gt;
Now, program the steps in the sequence as poses followed by timed pauses, and possibly waiting for participants to hop on. (Note the pipe symbol | required, unlike in the .MENUITEMS card. Note as well that you only list the name of the pose -- not any associated animation.)&lt;br /&gt;
&lt;br /&gt;
 POSE | standing&lt;br /&gt;
&lt;br /&gt;
The line above starts the &amp;quot;standing&amp;quot; pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;:  The sequencer script currently (2011) won&#039;t give you any error messages if the Pose you reference doesn&#039;t actually exist. You&#039;re on your own here, Bernice, to get it right!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 | Waiting for someone to sit on blue ball&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for someone to sit on ~ball0.  (To see which ball a ball is, pick the pose using the menu and right-click-&amp;gt;Edit the ball.  The number at the end of the name is the number to put between the &amp;quot;|&amp;quot; characters above.)  The text after the final &amp;quot;|&amp;quot; is optional; it&#039;s what the object chats if it needs to wait.&lt;br /&gt;
&lt;br /&gt;
You can specify any number of balls here; for example, you can use:&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 1 2 3 | Waiting for all participants!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: Any looping sequence should have an AVWAIT in the loop.  We don&#039;t want to disturb the neighborhood with an unused bed running endlessly through a sequence.  In a future version, Lear might in fact make it an error to have a loop without an avwait.&lt;br /&gt;
&lt;br /&gt;
 WHISPER | 0 | /0 and /1 stand together&lt;br /&gt;
&lt;br /&gt;
The line above causes the object to whisper the given line on channel 0 (the number between the &amp;quot;|&amp;quot; characters).  &amp;quot;/0&amp;quot; through &amp;quot;/5&amp;quot; get substituted with the first name of the av on the corresponding ball.  If nobody is on the ball, it uses &amp;quot;somebody&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for 10 seconds before proceeding.&lt;br /&gt;
&lt;br /&gt;
 POSE | pillow-sit | 0 | /0 and /1 sit with a comfy pillow&lt;br /&gt;
&lt;br /&gt;
The line above selects a new pose and whispers the text on channel 0.  Note that we omitted this optional chat in the POSE line above.  As earlier, /0 and /1 are replaced with the participant&#039;s first names. Although you have two poses within the 10m rule, if the next pose in the sequence is 10m+ from the previous pose the balls won&#039;t go the distance.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
 POSE | sit2 | 0 | The pillow disappears&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
You should know by now what the lines above do.&lt;br /&gt;
&lt;br /&gt;
The next line causes the whole sequence to repeat.&lt;br /&gt;
&lt;br /&gt;
 REPEAT&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use a LABEL line anywhere in the sequence, and end the sequence with a GOTO line, as in the other example provided with the MLPV2 distribution:&lt;br /&gt;
&lt;br /&gt;
 LABEL | mylabel&lt;br /&gt;
 AVWAIT | 0 1|   //make sure we&#039;re not looping with no one using the balls, so check for people on both ball0 and ball1&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 GOTO | mylabel&lt;br /&gt;
&lt;br /&gt;
Or, you can just have the sequence end by not adding any more steps (or, by starting a new sequence).  If the sequence doesn&#039;t end with GOTO or REPEAT, it simply pauses at the end, leaving the participants in the last pose.&lt;br /&gt;
&lt;br /&gt;
TIP! It doesn&#039;t matter whether you leave spaces or not around the | symbol; the sequences script will sort it out.&lt;br /&gt;
&lt;br /&gt;
=== Avoiding the posename chat ===&lt;br /&gt;
&lt;br /&gt;
By default, MLPV2 chats the pose name whenever it starts, either by menu or sequence.  If you don&#039;t want it chatting pose names during sequence, add &amp;quot;| NOCHAT&amp;quot; to the end of the SEQUENCE line, like this:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq | NOCHAT&lt;br /&gt;
&lt;br /&gt;
=== Hiding the poses from the menu ===&lt;br /&gt;
&lt;br /&gt;
You can hide any MENU in the notecards from the user by using &amp;quot;HIDDEN&amp;quot; instead of &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, as below:&lt;br /&gt;
&lt;br /&gt;
 MENU | seq1-poses | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Put your sequenced poses in such a menu and they&#039;ll be invisible to the user.  Just remember to set up the pose positions before hiding the menu they&#039;re in!  Of course, you can use &amp;quot;Adjust pos&amp;quot;, PAUSE in the sequence, and adjust.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TIP: Sequence naming rules ===&lt;br /&gt;
&lt;br /&gt;
A sequence has&lt;br /&gt;
# a button name&lt;br /&gt;
# a sequence name&lt;br /&gt;
&lt;br /&gt;
The button name and sequence name appear in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Cuddle | 0,-4,-12001,SEQUENCE WarmUp&lt;br /&gt;
&lt;br /&gt;
Cuddle is the button name, WarmUp is the sequence name.&lt;br /&gt;
&lt;br /&gt;
The sequence name also appears in the .SEQUENCES.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | WarmUp&lt;br /&gt;
&lt;br /&gt;
This is the fist line of the sequence.  WarmUp is the sequence name.  &#039;&#039;&#039;It must exactly match the sequence name&#039;&#039;&#039; (WarmUp) in the LINKMSG line in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard!&lt;br /&gt;
&lt;br /&gt;
The button name does &#039;&#039;&#039;not&#039;&#039;&#039; need to match the sequence name.  It&#039;s OK if it does.&lt;br /&gt;
&lt;br /&gt;
== Configurable SWAPs ==&lt;br /&gt;
&lt;br /&gt;
By default, the SWAP button swaps the first two balls, which is appropriate for couples poses.  Therefore, there is no need to configure swaps for solo and couples poses.&lt;br /&gt;
&lt;br /&gt;
For poses with 3 or more parties, you may want to configure what the swap button does.  In this case, the button will cycle through a set of ball orders for the pose.&lt;br /&gt;
&lt;br /&gt;
It&#039;s confusing, but stick with me and we&#039;ll muddle through.  Here&#039;s the big picture.  Each line in the .SWAPS.&#039;&#039;myStuff&#039;&#039; notecard configures the swaps for one pose.  (I would rather have done it per menu, but that just didn&#039;t work out, sorry!)&lt;br /&gt;
&lt;br /&gt;
For a pose, we configure a set of ball permutations (arrangements, or orders).  When the user hits SWAP, the balls will cycle through the given permutations.  The first perumtation is always 0 1 2 3 4 5, meaning that ball0 is first, ball1 is second, ball2 is next, etc.  (For a PINK | BLUE | RED menu, ball0 is pink, ball1 is blue, and ball2 is red.)&lt;br /&gt;
&lt;br /&gt;
Since the &amp;quot;0 1 2 3 4 5&amp;quot; permutation is the default, it is NOT configured but is assumed.  We only configure the 2nd, 3rd, and subsequent permutation (as many as we like).&lt;br /&gt;
&lt;br /&gt;
Each line of the swap configuration notecard looks like this:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;posename&#039;&#039; | &#039;&#039;permu2&#039;&#039; : &#039;&#039;permu3&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where there can be any number of permutations, separated by a colon (&amp;quot;:&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the orders are given by a list of poseball position numbers.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at an example, with a 3-ball menu that uses PINK | BLUE | RED balls.  Let&#039;s say we want the pink and red balls to swap, but leave the blue ball alone.&lt;br /&gt;
&lt;br /&gt;
So, the permutations would be first the implicit 0 1 2 permutation, and then the swapped one, which in this case would be 2 1 0.  It would be configured like this:&lt;br /&gt;
&lt;br /&gt;
 fmf-cuddle | 2 1 0&lt;br /&gt;
&lt;br /&gt;
where fmf-cuddle is the pose name.&lt;br /&gt;
&lt;br /&gt;
Confused yet?  Yeah, me too.  Now let&#039;s try a 3some pose where we want to rotate all three.  For example, they&#039;re sitting around a round table, and we just want each one to move one position to the side.&lt;br /&gt;
&lt;br /&gt;
The first permutation is always 0 1 2.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 2 0 1.  Balls 0 and 1 move right one place, and ball 2 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 1 2 0.  Balls 2 and 0 move right one place, and ball 1 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
We&#039;d configure it like this.  Remember we omit the first permutation, since it&#039;s the default permutation and is implicit:&lt;br /&gt;
&lt;br /&gt;
 3-sitting | 2 0 1 : 1 2 0&lt;br /&gt;
&lt;br /&gt;
When we hit SWAP the first time, we get the 2 0 1 permutation.  Hit it again, we get 1 2 0.  Hit it again and we go back to 0 1 2, the implicit default permutation.  And so on, until the avatars get dizzy.&lt;br /&gt;
&lt;br /&gt;
When I configure swaps, I actually write down the default permutation and keep it there to help me think, and then delete it when I create the pose configuration line.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s try a two couples 4some for a PINK BLUE RED GREEN menu (female, male, female, male), where first we want the females to swap, and then we want the males to swap.  I&#039;ll start out with the default permutation shown because it helps my feeble mind.  Then I&#039;ll put the subsequent permutations below, in sequence.&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
&lt;br /&gt;
for the next one, let&#039;s swap the men but leave the women swapped:&lt;br /&gt;
&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
&lt;br /&gt;
Are we done?  Well, if we stopped here, the next click on SWAP would move all 4 balls.  Instead, let&#039;s swap the men again, and then moving back to the default will only swap the women.&lt;br /&gt;
&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
So, putting them all together:&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
I hope you&#039;re getting the picture by now.  If your head hurts, well, mine does too.  Just try doing some 6some swaps for real fun!&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the resulting configuration line:&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1 &lt;br /&gt;
&lt;br /&gt;
NOTE: I did not test these configs, and I make mistakes.  I&#039;ll try to find time to test.  In the meantime, please feel free to try it out and &#039;&#039;&#039;please&#039;&#039;&#039; let me know of any mistakes.&lt;br /&gt;
&lt;br /&gt;
Here are some common useful swaps, including the examples above.  Delete the comments before using, and of course, replace the name I&#039;ve given here with the actual pose name.&lt;br /&gt;
&lt;br /&gt;
3somes&lt;br /&gt;
&lt;br /&gt;
 mfm-mfm | 2 0 1 : 1 2 0                                // swap first &amp;amp; third of 3some&lt;br /&gt;
 3-swap-other | 0 2 1                                   // swap 2nd pair of 3some&lt;br /&gt;
 3-rotate-1 | 2 0 1 : 1 2 0                             // rotate three, one direction&lt;br /&gt;
 3-rotate-2 | 1 2 0 : 2 0 1                             // rotate three, other direction&lt;br /&gt;
 3-all | 0 1 2 : 0 2 1 : 2 0 1 : 2 1 0 : 1 2 0 : 1 0 2  // all permutations&lt;br /&gt;
&lt;br /&gt;
4somes&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1&lt;br /&gt;
 fmmm-rotate-m | 0 2 3 1 : 0 3 1 2                      // hold 0, rotate others&lt;br /&gt;
 mfmm-rotate-m | 2 1 3 0 : 3 1 0 2                      // hold 1, rotate others&lt;br /&gt;
&lt;br /&gt;
5somes&lt;br /&gt;
&lt;br /&gt;
 fmfmf | 2 1 4 3 0 : 2 3 4 1 0 : 4 3 0 1 2 : 4 1 0 3 2  // alternately rotate women, swap men&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Expandability ===&lt;br /&gt;
&lt;br /&gt;
For expandability, we recommend that each .MENUITEMS* file contain one &amp;quot;unanchored&amp;quot; menu at the top, with any submenus in the notecard hanging off of that unanchored one. This allows 10 independent modules and only memory limitations on the total number of menus. We also suggest dividing menus &amp;amp; positions into separate notecards making it easy for customers to delete the ones they won&#039;t use.&lt;br /&gt;
&lt;br /&gt;
(An &amp;quot;unanchored&amp;quot; menu is one that doesn&#039;t have any TOMENU button leading to it.)&lt;br /&gt;
&lt;br /&gt;
MLPV2 loads the notecards in the same order they appear in object inventory.  The buttons for the unanchored menus in these notecards are added to the main menu in the same order.  So, name your extensions so your notecards sort in the order you want these buttons to appear.&lt;br /&gt;
&lt;br /&gt;
=== Main menu ===&lt;br /&gt;
&lt;br /&gt;
By convention, the top, &amp;quot;main menu&amp;quot; often includes buttons such as OPTIONS, SHUTDOWN, etc, as well as buttons providing access to the sub-menus.  By convention, this menu is defined in the .MENUITEMS notecard (note, no suffix).&lt;br /&gt;
&lt;br /&gt;
Don&#039;t attempt to put actual poses in the menus found here. They won&#039;t work reliably, since these menus don&#039;t list the number and color of poseballs.&lt;br /&gt;
&lt;br /&gt;
=== Help button ===&lt;br /&gt;
&lt;br /&gt;
You may wish to add at this top level a HELP button.&lt;br /&gt;
&lt;br /&gt;
The configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
LINKMSG HELP | 1,-4,987789,-Help for XYZProduct##Here&#039;s your help notecard&lt;br /&gt;
&lt;br /&gt;
Put this line at the end of the &amp;quot;TOMENU -&amp;quot; lines below MAIN MENU.&lt;br /&gt;
&lt;br /&gt;
Then drop in the ~give script add-on found here [[MLPV2_Give_Item_Add-on]]&lt;br /&gt;
&lt;br /&gt;
It might be better to name the help notecard something other than just &amp;quot;Help&amp;quot;, so that your users can identify it more easily when it ends up in their inventories.&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190750</id>
		<title>MLPV2 Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Tutorial&amp;diff=1190750"/>
		<updated>2014-05-12T22:18:18Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* 2. Create a control menu for the sequence(s) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is intended for &amp;quot;builders&amp;quot;: people adding poses to furniture.&lt;br /&gt;
&lt;br /&gt;
Folks who just want to know how to use their furniture should see [[MLPV2 Users Tutorial]].&lt;br /&gt;
&lt;br /&gt;
== Setting up MLPV2 ==&lt;br /&gt;
These instructions look long, but it&#039;s easier than it looks.  Here&#039;s the overview:&lt;br /&gt;
# get the scripts and notecards and drop them into a prim (CREATE YOUR OWN PRIM -- so folks know who made it!)&lt;br /&gt;
# put your anims in the same prim&lt;br /&gt;
# Create and edit one or more .MENUITEMS.* notecards (use whatever you want for &amp;quot;*&amp;quot;).  Configure menus and add poses to the menus.  Mostly the same as old MLP, with enhancements and no need to edit the main menu.)&lt;br /&gt;
# Reset and try the menu&lt;br /&gt;
# adust each pose (same way as old MLP)&lt;br /&gt;
# dump memory and save positions in notecard (nearly same way as old MLP; sellers may want to use modular .POSITIONS.* files)&lt;br /&gt;
&lt;br /&gt;
These instructions are oriented for someone setting up a new object.  However, those who bought one and are adjusting it or adding poses can simply skip the obvious steps that the maker would already have done.&lt;br /&gt;
&lt;br /&gt;
== Get the scripts ==&lt;br /&gt;
The latest scripts are available at jPose Island, in the FREEBIES section.  It is Adult land, so you will need to either have payment info on file or be adult certified.&lt;br /&gt;
&lt;br /&gt;
MLPV2.3 is available on Marketplace, under Lear Cale as merchant.&lt;br /&gt;
&lt;br /&gt;
Take a good look at the .readme file.&lt;br /&gt;
&lt;br /&gt;
== Install scripts ==&lt;br /&gt;
Rez the MLPV2 and copy its contents into inventory and then into your furniture.&lt;br /&gt;
&lt;br /&gt;
Delete the notecards ending in &amp;quot;examples&amp;quot;, along with the ~pillow object and any example animations you don&#039;t plan to use.&lt;br /&gt;
&lt;br /&gt;
Life is easiest if you use your object&#039;s root prim for MLPV2; instructions below for when it&#039;s not.  For your first try, stick with root prim and keep life simple.  (An easy way to add it to an existing bed is to just float it slightly above your mattress and then apply a totally clear texture, available in any freebie depot.)  Below, we&#039;ll call this prim the &amp;quot;MLP prim&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[Tip: You&#039;ll thank yourself later in life if you try to keep the orientation of the MLP prim the same across your products, for example, with rotation 0,0,0.  This makes it easier to transfer poses between products.  However, with sculpties this isn&#039;t always feasible.]&lt;br /&gt;
&lt;br /&gt;
Click the MLP prim so that it starts up for the first time.  If you get a menu, fine; you&#039;ve already done this.  If nothing happens, click again -- an SL bug causes the first click to get lost.&lt;br /&gt;
&lt;br /&gt;
== Install animations ==&lt;br /&gt;
Drag all the anims you&#039;ll use into the prim.  (You can pull these out of poseballs you like.  If the animations are no-copy, this will render the poseballs useless.)&lt;br /&gt;
&lt;br /&gt;
Note: not all animations will work with MLP. See discussion here: [[MLPV2_Reference_Manual#TIP.21_Animations_Caveat]]&lt;br /&gt;
&lt;br /&gt;
== Create and edit your .MENUITEMS.* file ==&lt;br /&gt;
&lt;br /&gt;
Create a new notecard, named &amp;quot;.MENUITEMS.&#039;&#039;mystuff&#039;&#039;&amp;quot;, where &amp;quot;&#039;&#039;mystuff&#039;&#039;&amp;quot; can be anything you want.  MLPV2 can take any number of these, and bed sellers can make different pose sets for different customers.&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorial1.6.png|100px|thumb|left|Click for graphic view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the object.  [You might want to do most of the editing first; objects with lots of things in inventory react slowly to changes, and you might have a lot of animations.  As of Nov/2009, there&#039;s also an issue with editing notecards in object inventory.  Unless you&#039;ve heard the &amp;quot;all clear&amp;quot; on this, or know the workaround, it&#039;s best to edit in your avatar inventory.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a menu:&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;MyMenu&#039;&#039; | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
[Tip! The standard practice is to list the pink ball first, then the blue -- you may do the opposite if you wish, but for what it&#039;s worth, that&#039;s the convention. This convention was established in 2006 with the release of MLP 1.1, and is practised in XPOSE! as well.] &lt;br /&gt;
&lt;br /&gt;
This creates a menu whose button in the top menu will be labeled &#039;&#039;MyMenu&#039;&#039;.  &#039;&#039;&#039;ALL&#039;&#039;&#039; indicates that it will be accessible by everyone (alternatives here are &#039;&#039;&#039;GROUP&#039;&#039;&#039;, only allowing people in the same group as the object, or &#039;&#039;&#039;OWNER&#039;&#039;&#039;, only allowing the owner).  After that, list each ball color for the poses in this menu.  You can have up to six balls.  If you have some solo poses, some couples poses, and some 3some poses, they have to be in different menus.&lt;br /&gt;
&lt;br /&gt;
In this example, a pink and a blue poseball will be rezzed.&lt;br /&gt;
&lt;br /&gt;
For each pose in this menu, add a line like this:&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;pose1&#039;&#039; | &#039;&#039;anim1&#039;&#039; | &#039;&#039;anim2&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
: &#039;&#039;pose1&#039;&#039; will be the button name for this pose.&lt;br /&gt;
: &#039;&#039;anim1&#039;&#039; is the name of the animation for the first poseball (which happens to be pink in our example)&lt;br /&gt;
: &#039;&#039;anim2&#039;&#039; is the name of the animation for the second poseball (which happens to be blue in our example)&lt;br /&gt;
&lt;br /&gt;
Zero, one, or two spaces are allowed around the vertical bars.  Avoid extra spaces.&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;facial expressions&#039;&#039;&#039;, you add a suffix to the animation names indicating the expression.  Note that you don&#039;t change the actual name of the animation in the inventory, you just add the suffix in this configuration notecard.  These are explained in [[MLPV2_Reference_Manual#Animations_.28Facial.29]] .  For a simple example, appending &amp;quot;*&amp;quot; will give an astonished open-mouth expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following can also be included in your menu:&lt;br /&gt;
 STOP&lt;br /&gt;
 SWAP&lt;br /&gt;
 BACK&lt;br /&gt;
 TOMENU &#039;&#039;MyOtherMenu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;STOP&#039;&#039;&#039; makes a button labeled STOP that de-rezzes the poseballs and unsits everyone.&lt;br /&gt;
: &#039;&#039;&#039;SWAP&#039;&#039;&#039; makes a button labeled SWAP that exchanges the first two balls, by default.  Starting with MLPV2.4, you can configure the swap arrangements for poses with multiple balls, [LINNK TBD].&lt;br /&gt;
: &#039;&#039;&#039;BACK&#039;&#039;&#039; makes a button labeled BACK that goes back to the previous menu.  Every menu should have one of these!&lt;br /&gt;
: &#039;&#039;&#039;TOMENU&#039;&#039;&#039; makes a button labeled &#039;&#039;MyOtherMenu&#039;&#039;, which goes to the &#039;&#039;MyOtherMenu&#039;&#039; menu (which you must create).&lt;br /&gt;
&lt;br /&gt;
With MLPV2 (assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP configuration), any MENU that is &#039;&#039;&#039;not&#039;&#039;&#039; found in a previous &#039;&#039;&#039;TOMENU&#039;&#039;&#039; entry is added to an empty slot in the top menu.  I&#039;ll talk more about this below, under [[MLPV2 Submenus]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s a good convention to end each menu with the following:&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
For MLPV2 (again, assuming you&#039;re using the .MENUITEMS that comes with MLPV2 rather than an old MLP config), buttons are placed in the menu in the same order they appear in the config notecard. To set old MLP configs to using this new (sane) menu order, see here: [http://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#MENUORDER]&lt;br /&gt;
&lt;br /&gt;
Repeat the above for each menu you want.  Poses with different numbers of participants have to be in different menus, since the MENU line gives the number and colors of the balls.&lt;br /&gt;
&lt;br /&gt;
For a menu with 3 or more poses, the POSE line would list that number of animations, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Continuation menus ==&lt;br /&gt;
As we all know, you get at most 12 buttons in an SL menu.  However, starting with MLPV2.1, you can have more than 12 buttons in a configured MENU.  If there are more than 12, MLPV2.1 and later will automatically add a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button after the 11th item, leading to the remaining choices.  (And also after the 22nd item, etc.)&lt;br /&gt;
&lt;br /&gt;
If you wish MLPV2 to automatically a &#039;&#039;&#039;BACK&#039;&#039;&#039; button whenever it adds a &#039;&#039;&#039;MORE--&amp;gt;&#039;&#039;&#039; button, add the AUTOBACK directive to your .MENUITEMS config card. It doesn&#039;t matter where it is, but convention is to put it near the top.  Put it alone on a line.&lt;br /&gt;
&lt;br /&gt;
Note that a  &#039;&#039;&#039;BACK&#039;&#039;&#039; button will not be added to the top, main menu (because there is no further back there to go back up to.) Nor will it add it to the last page of a series of sub-menu pages, or to a single-page sub-menu -- you must add the word BACK yourself manually to these if desired.&lt;br /&gt;
&lt;br /&gt;
== Menu Reset ==&lt;br /&gt;
Save your changes.  (If you&#039;re editing a copy in inventory, install it in the MLPV2 prim).&lt;br /&gt;
&lt;br /&gt;
Click the MLPV2 object.  If this is the first time since you installed the scripts, it will start up and read the configurations.  If you get a menu, select &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; Menu Reset&#039;&#039;&#039;.  This button causes it to re-read all .MENUITEMS* files, including yours.&lt;br /&gt;
&lt;br /&gt;
Watch for warning messages.  The most common one is due to an animation being missing or misspelled in the configuration.  Fix any mistakes and do another Menu Reset.  (A reset is &#039;&#039;&#039;not&#039;&#039;&#039; required for missing animations; just drop in the anim.  If you don&#039;t have some of them yet, don&#039;t worry, this won&#039;t do any harm.&lt;br /&gt;
&lt;br /&gt;
Click to get the menu.  You should see the button for your new menu; click it.  You should see the menu you configured.  Click the first pose.  You should see the right number and color balls appear.  They may be in odd places.&lt;br /&gt;
&lt;br /&gt;
Tip! Note that &amp;quot;MenuReset&amp;quot; will not re-read positions from the positions card.  PosReset and Restart will.&lt;br /&gt;
&lt;br /&gt;
== The default pose ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;default pose&amp;quot; is a set of poseball positions and orientations that is used for any new pose, since new poses don&#039;t have saved positions yet.&lt;br /&gt;
&lt;br /&gt;
The default pose in the MLPV2 distribution assumes that the MLPV2 prim is essentially an unrotated box, flattened and stretched like a mattress cover.  If your prim is rotated (as is likely if you&#039;re using a flattened cylinder lying on its side for the mattress, and MLPV2 is in the mattress), you will want to adjust the default pose so none of the balls are underground.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Go to main blue menu and select &#039;&#039;&#039;adj-default -&amp;gt; default&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Tip! If you don&#039;t have this choice, see here: [https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#TIP.21_Default_Pose]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the default pose looks fine (6 balls arranged in a hexagon, avs sitting facing each other), skip this step.&lt;br /&gt;
&lt;br /&gt;
If the default pose looks wrong, adjust it following the instructions below, as for any pose you would add.  You may have to be clever to get at balls that might end up under the floor or buried in your object.&lt;br /&gt;
&lt;br /&gt;
When saving the default pose as described below, be sure to save it to the .POSITIONS notecard, rather than to your .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard.&lt;br /&gt;
&lt;br /&gt;
== The stand pose ==&lt;br /&gt;
&lt;br /&gt;
MLPV2 uses the &#039;&#039;&#039;stand&#039;&#039;&#039; pose whenever STOP is used (or on any reset button in the Shutdown menu), just before unseating the avatars.  This helps avoid them popping high into the sky, which happens when poseballs are buried inside the object.&lt;br /&gt;
&lt;br /&gt;
I suggest using the default pose for the stand pose.  Simply duplicate the &amp;quot;{default} ...&amp;quot; line in .POSITIONS and change &amp;quot;default&amp;quot; to &amp;quot;stand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Adjusting poses ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.3 and later&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Select &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; at any time.  Whenever anyone is sitting on a poseball, it will be long and translucent to be easy to find and select.  We call these &amp;quot;beams&amp;quot;.  Participants can hop on and off balls at any time during adjustment.&lt;br /&gt;
* Select the beams (right-click -&amp;gt; Edit) and adjust them as desired.  When done with a pose, simply select the next pose.  The current pose&#039;s position is automatically saved.  Also, you can save the current pose&#039;s position at any time using &#039;&#039;&#039;OPTIONS -&amp;gt; Save Pos&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;To undo changes&#039;&#039;&#039; to the current pose, just select it again.  Alternatively, just quit adjusting.&lt;br /&gt;
* &#039;&#039;&#039;To quit adjusting&#039;&#039;&#039;, make sure the current pose is saved (if desired), and use either &#039;&#039;&#039;STOP&#039;&#039;&#039; or &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039;.  (Stop will also delete the balls and pop off any participants.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2.2 and earlier&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Use the menu to select whichever pose you want to adjust.  If it&#039;s a new pose, it will get the default pose.  Have avatars sit on the poseballs.  Use the menu &#039;&#039;&#039;OPTIONS -&amp;gt; Adjust Pos&#039;&#039;&#039; to make the poseballs visible and easy to select for editing.  (They get long and translucent, so we call them &amp;quot;beams&amp;quot;.)&lt;br /&gt;
* Select the beams and orient them as desired.  When done, use the &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; button.&lt;br /&gt;
* You may continue with the next pose, or re-adjust this one.  When someone stands, their poseball will go back to the normal shape.  Just click the &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button to make it a beam again.&lt;br /&gt;
* The &#039;&#039;&#039;AdjustPos&#039;&#039;&#039; button&#039;s only affect is to change the size and appearance of the poseballs.  Feel free to adjust positions by selecting the clear tiny sat-upon poseballs and moving them, if you prefer.&lt;br /&gt;
&lt;br /&gt;
== Saving pose positions to notecards ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039;: The &#039;&#039;&#039;SavePos&#039;&#039;&#039; button saves the position in MLPV2 memory.  A reset will cause it to forget.  End users will probably want to save the changes to notecards, and sellers will need to.&lt;br /&gt;
&lt;br /&gt;
This is why the .POSITIONS notecard should be ideally released to customers as MODIFY. Note as well, though, that if a notecard is placed in a no modify object, people will not be able to open the notecard at all, regardless of the perms on the notecard. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: The ~swap script has to be in and running to save new positions! [for MLPV2.4 and later]&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, new object ===&lt;br /&gt;
&lt;br /&gt;
Follow these instructions if this is a new object and you plan to sell it and possibly a line of related objects with MLPV2 poses.  There is a simpler way for end users, below.&lt;br /&gt;
&lt;br /&gt;
Create a .POSITIONS.&#039;&#039;mystuff&#039;&#039; notecard, where &#039;&#039;mystuff&#039;&#039; matches your .MENUITEMS.&#039;&#039;mystuff&#039;&#039; file name.  (This isn&#039;t absolutely required, but makes life simple and I will assume that convention is followed in this tutorial.)&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
  [xx:xx]  : {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paste them into your notecard.  It isn&#039;t necessary to delete the stuff to the left of {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete the {default} line.  (Note: if you changed the default pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
Delete the {stand} line.  (Note: if you changed the stand pose, save this line in &#039;&#039;&#039;.POSITIONS&#039;&#039;&#039; notecard.)&lt;br /&gt;
&lt;br /&gt;
Save, and use &#039;&#039;&#039;OPTIONS -&amp;gt; ShutDown -&amp;gt; PosReset&#039;&#039;&#039;.  This causes the .POSITIONS.* files to be re-read, including yours.&lt;br /&gt;
&lt;br /&gt;
That&#039;s about it; now you&#039;re ready to test your poses.  Have fun!&lt;br /&gt;
&lt;br /&gt;
Tip! For those using old MLP .MENUITEMS files: If the PosReset button is not offered, look for the RESTART option. Note that RESET will not re-read positions from the positions card. Only PosReset and RESTART will.&lt;br /&gt;
&lt;br /&gt;
=== Saving a single position that you&#039;ve updated ===&lt;br /&gt;
&lt;br /&gt;
When you use &#039;&#039;&#039;OPTIONS -&amp;gt; SavePos&#039;&#039;&#039; for, say, &#039;&#039;pose1&#039;&#039;, you&#039;ll see a line in chat looking like this:&lt;br /&gt;
 &lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There may be a timestamp.  You can copy this line and replace it in the corresponding .POSITION.* file (e.g., the one already containing this pose&#039;s position).&lt;br /&gt;
&lt;br /&gt;
=== Saving pose positions, simplified version for end users ===&lt;br /&gt;
&lt;br /&gt;
If you&#039;re adjusting an object you bought that&#039;s already set up, and you&#039;ve adjusted a lot of poses, this is the easiest way to save all your changes.  Note, however, that if your product has pose pack modules and you might want to remove one to make room for other add-on poses, this might not be the best way.&lt;br /&gt;
&lt;br /&gt;
Use &#039;&#039;&#039;OPTIONS -&amp;gt; Dump Pos&#039;&#039;&#039; to dump all the positions.  Using the chat history window, copy the text between the &amp;quot;-----&amp;quot; lines, which looks something like this:&lt;br /&gt;
&lt;br /&gt;
 MLPV2 (empty): {pose1} &amp;lt;... &#039;&#039;numbers&#039;&#039; ...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may include a timestamp.&lt;br /&gt;
&lt;br /&gt;
Paste them into the .POSITIONS notecard, replacing its previous contents.  It is &#039;&#039;&#039;not&#039;&#039;&#039; necessary to delete the stuff before {pose1}, but you can if you like things tidy.&lt;br /&gt;
&lt;br /&gt;
Delete all other .POSITIONS.* files in the MLPV2 prim&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
If you later decide to delete a pose pack (a .MENUITEMS.* file) with poses you won&#039;t use, you can still do that.  The positions for those poses will still be in the .POSITIONS notecard, and you can feel free to delete them manually.&lt;br /&gt;
&lt;br /&gt;
== Deleting adj-default menu button ==&lt;br /&gt;
&lt;br /&gt;
Once you&#039;re happy with the default pose positions, simply delete .MENUITEMS.zz-default from the MLPV2 prim&#039;s inventory.  You can always put it back by dragging that file from the MLPV2 distribution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PROPS ==&lt;br /&gt;
&lt;br /&gt;
Beginning with MLPV2.1, you can provide prop objects that MLP will rez for specific poses.&lt;br /&gt;
&lt;br /&gt;
When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear in a few minutes.&lt;br /&gt;
&lt;br /&gt;
For any pose, you can have at most &#039;&#039;&#039;one&#039;&#039;&#039; prop object.  If you need more than one prop to rez, you&#039;ll have to link them so that they can be treated by MLPV2 as one object.&lt;br /&gt;
&lt;br /&gt;
1) The following lines are required in your MLP menu.  Starting with MLPV2.1, they&#039;re already in the standard .MENUITEMS, in the OPTIONS menu.  Add them if you&#039;re starting with an older version.&lt;br /&gt;
&lt;br /&gt;
 *LINKMSG DumpProps | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
 *LINKMSG SaveProp | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
2) Find the prim prop object that you want MLP to rez, and rez it.&lt;br /&gt;
&lt;br /&gt;
3) Add to this prop object the &amp;quot;~prop&amp;quot; script (you&#039;ll find this inside the supplied &amp;quot;~pillow&amp;quot; object).  Take your prop object back into inventory and drop it into the MLP prim&#039;s inventory.  Note: the prop object and everything in it will need to be copiable for next owner -- otherwise, it will only rez once for them!&lt;br /&gt;
&lt;br /&gt;
4) Edit a .PROPS notecard or add a new one (named .PROPS.* where * is whatever you want, for a modular config.)  Copy this example line and paste it into your .PROPS file.&lt;br /&gt;
&lt;br /&gt;
 | mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Don&#039;t omit the vertical bar (&amp;quot;|&amp;quot;) at the left.)&lt;br /&gt;
&lt;br /&gt;
: *Replace &amp;quot;mypose&amp;quot; with the name of the pose that the object should rez for.&amp;lt;br/&amp;gt;&lt;br /&gt;
: *Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save your work.&lt;br /&gt;
&lt;br /&gt;
5) Use the MLP menu&#039;s PosReset or Restart button.  When the MLP has restarted, select the pose that the prop goes with.  The prop should appear.  It might be underneath the MLP object, or some distance away, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time.&lt;br /&gt;
&lt;br /&gt;
6) Edit the prop, and use the editing arrows to move the prop to where you want it. Then, use the MLP menu &amp;quot;SaveProp&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
To make the change permanent, select the text in the chat  line (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .PROPS* file.  Or, do all your props, saving their positions, and then use the DumpProps button.  This works the same way as saving positions in .POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
7) To get MLP to reread .PROPS* files, use PosReset (which resets positions as well as props), or Restart.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved separately, so if you adjust a pose and its prop, you need to save both pose position and prop.  (When using AdjustPos feature with MLPV2.4 or later, both pose and prop positions are saved when you select a new pose.)&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
&#039;&#039;&#039;Worn or Hand-held Props&#039;&#039;&#039;: For props to be worn by the user, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&lt;br /&gt;
&lt;br /&gt;
== SEQUENCES ==&lt;br /&gt;
&lt;br /&gt;
Starting with MLPV2.3, you can create sequences of poses that run automatically once started.&lt;br /&gt;
&lt;br /&gt;
It&#039;s a little complicated.  You need to:&lt;br /&gt;
&lt;br /&gt;
# set up menus (and often poses as well) for the sequences to use&lt;br /&gt;
# set up a control menu for the user to access and control the sequences&lt;br /&gt;
# program the sequences&lt;br /&gt;
&lt;br /&gt;
=== 1. Set up the menus (and poses)===&lt;br /&gt;
&lt;br /&gt;
In a .MENUITEMS.* notecard, create menus for the sequences to use. These menus:&lt;br /&gt;
&lt;br /&gt;
(a) tell sequences how many balls to rez, and of what colour;&amp;lt;br /&amp;gt;&lt;br /&gt;
(b) are used to set up poses for the sequences&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that are already in your menus, you&#039;re done here, nothing special to do.&lt;br /&gt;
&lt;br /&gt;
If your sequence will use poses that you don&#039;t want to appear in any menu, you need to set up a &amp;quot;hidden menu&amp;quot;.  To do this, just make a menu the usual way, except use &amp;quot;HIDDEN&amp;quot; rather than &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, like this:&lt;br /&gt;
&lt;br /&gt;
 MENU ROMNIGHT | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Add your poses to this menu.  Avoid extra spaces, especially between MENU and the menu name.&lt;br /&gt;
&lt;br /&gt;
If you have sequences with different numbers of participants, you&#039;ll need to use additional menus with the appropriate number and color poseballs.&lt;br /&gt;
&lt;br /&gt;
=== 2. Create a control menu for the sequence(s) ===&lt;br /&gt;
&lt;br /&gt;
See the .MENUITEMS.example notecard in MLPV2 distribution as an example.  This menu has two buttons to start sequences, and two buttons to stop and continue them, along with the usual navigation and swap buttons:&lt;br /&gt;
&lt;br /&gt;
 // example menu containing 2 sequences, and sequence controls&lt;br /&gt;
 MENU Tours... | ALL&lt;br /&gt;
 LINKMSG *Tour1* | 0,-4,-12001,SEQUENCE Tour1-seq&lt;br /&gt;
 LINKMSG *Tour2* | 0,-4,-12001,SEQUENCE tour2-seq&lt;br /&gt;
 LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
 LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
 LINKMSG NARRATION | 0,-4,-12001,NARRATION&lt;br /&gt;
 SWAP&lt;br /&gt;
 STOP&lt;br /&gt;
 BACK&lt;br /&gt;
&lt;br /&gt;
In the above, &amp;quot;*Tour1*&amp;quot; and &amp;quot;*Tour2*&amp;quot; are button labels -- that&#039;s what the user will see in the menu.&lt;br /&gt;
The &amp;quot;| 0,-4,-12001,SEQUENCE&amp;quot; part is pure magic, don&#039;t mess with that unless you&#039;re a magician.&lt;br /&gt;
&amp;quot;Tour1-seq&amp;quot; and &amp;quot;tour2-seq&amp;quot; are names of sequences in the .SEQUENCE* notecards.&lt;br /&gt;
Be careful: the names need to match exactly.&lt;br /&gt;
&lt;br /&gt;
PAUSE causes the sequence to stop advancing.&lt;br /&gt;
&lt;br /&gt;
RESUME causes the sequence to resume where it left off.  Alternatively, if you didn&#039;t PAUSE, RESUME advances to the next step.  This is handy for quickly testing a sequence with long wait times.&lt;br /&gt;
&lt;br /&gt;
NARRATION allows the user to toggle off and on any WHISPER or SAY messages you might have programmed.&lt;br /&gt;
&lt;br /&gt;
STOP stops the sequence and unrezzes the balls.  After a STOP, RESUME and PAUSE have no effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE WELL&#039;&#039;&#039; Avoid having two different buttons in an MLP/MLPV2 menu with the same button name.  Only the first of the two will work.  Subsequent ones (duplicates) will only cause the first button&#039;s effect.  (It&#039;s OK to have the same button appear in multiple places, if you want them all to do the same thing. BUT:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE MASSAGESCENE-seq&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
LINKMSG PLAYALL | 0,-4,-12001,SEQUENCE BJSCENE-seq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
in the same menu will cause havok, as the menu will get confused about the duplicate button label of PLAYALL&lt;br /&gt;
&lt;br /&gt;
=== 3. Programming a sequence ===&lt;br /&gt;
&lt;br /&gt;
Create a notecard whose name starts with .SEQUENCES, followed by whatever you wish.  In the MLPV2 distribution, this is .SEQUENCES.example.  I&#039;ll go through an example sequence explaining what each line does.&lt;br /&gt;
&lt;br /&gt;
Start the sequence with the sequence name specified in the control menu in .MENUITEMS file; in this case, &amp;quot;Tour1-seq&amp;quot;.  The name is arbitrary, it just has to match between the MENUITEMS notecard and the SEQUENCES notecard.  For example:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq&lt;br /&gt;
&lt;br /&gt;
Next, tell what menu you&#039;ll be using for subsequent poses.  Currently, this only sets the number and color of balls, but that might change in the future.  You can change the menu later in the sequence using more MENU lines.&lt;br /&gt;
&lt;br /&gt;
 MENU | Example&lt;br /&gt;
&lt;br /&gt;
The line above tells us that the following poses are poses in the &amp;quot;Example&amp;quot; menu.  Note the vertical bar (&amp;quot;|&amp;quot;), unlike in a .MENUITEMS* card.  Note as well that all you put is the name of the menu, and not the stuff that would follow it in a .MENUITEMS* card.)&lt;br /&gt;
&lt;br /&gt;
Now, program the steps in the sequence as poses followed by timed pauses, and possibly waiting for participants to hop on. (Note the pipe symbol | required, unlike in the .MENUITEMS card. Note as well that you only list the name of the pose -- not any associated animation.)&lt;br /&gt;
&lt;br /&gt;
 POSE | standing&lt;br /&gt;
&lt;br /&gt;
The line above starts the &amp;quot;standing&amp;quot; pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;:  The sequencer script currently (2011) won&#039;t give you any error messages if the Pose you reference doesn&#039;t actually exist. You&#039;re on your own here, Bernice, to get it right!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 | Waiting for someone to sit on blue ball&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for someone to sit on ~ball0.  (To see which ball a ball is, pick the pose using the menu and right-click-&amp;gt;Edit the ball.  The number at the end of the name is the number to put between the &amp;quot;|&amp;quot; characters above.)  The text after the final &amp;quot;|&amp;quot; is optional; it&#039;s what the object chats if it needs to wait.&lt;br /&gt;
&lt;br /&gt;
You can specify any number of balls here; for example, you can use:&lt;br /&gt;
&lt;br /&gt;
 AVWAIT | 0 1 2 3 | Waiting for all participants!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: Any looping sequence should have an AVWAIT in the loop.  We don&#039;t want to disturb the neighborhood with an unused bed running endlessly through a sequence.  In a future version, I might make it an error to have a loop without an avwait.&lt;br /&gt;
&lt;br /&gt;
 WHISPER | 0 | /0 and /1 stand together&lt;br /&gt;
&lt;br /&gt;
The line above causes the object to whisper the given line on channel 0 (the number between the &amp;quot;|&amp;quot; characters).  &amp;quot;/0&amp;quot; through &amp;quot;/5&amp;quot; get substituted with the first name of the av on the corresponding ball.  If nobody is on the ball, it uses &amp;quot;somebody&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
The line above causes the sequence to wait for 10 seconds before proceeding.&lt;br /&gt;
&lt;br /&gt;
 POSE | pillow-sit | 0 | /0 and /1 sit with a comfy pillow&lt;br /&gt;
&lt;br /&gt;
The line above selects a new pose and whispers the text on channel 0.  Note that we omitted this optional chat in the POSE line above.  As earlier, /0 and /1 are replaced with the participant&#039;s first names. Although you have two poses within the 10m rule, if the next pose in the sequence is 10m+ from the previous pose the balls won&#039;t go the distance.&lt;br /&gt;
&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
 POSE | sit2 | 0 | The pillow disappears&lt;br /&gt;
 WAIT | 10&lt;br /&gt;
&lt;br /&gt;
You should know by now what the lines above do.&lt;br /&gt;
&lt;br /&gt;
The next line causes the whole sequence to repeat.&lt;br /&gt;
&lt;br /&gt;
 REPEAT&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use a LABEL line anywhere in the sequence, and end the sequence with a GOTO line, as in the other example provided with the MLPV2 distribution:&lt;br /&gt;
&lt;br /&gt;
 LABEL | mylabel&lt;br /&gt;
 AVWAIT | 0 1|   //make sure we&#039;re not looping with no one using the balls, so check for people on both ball0 and ball1&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 GOTO | mylabel&lt;br /&gt;
&lt;br /&gt;
Or, you can just have the sequence end by not adding any more steps (or, by starting a new sequence).  If the sequence doesn&#039;t end with GOTO or REPEAT, it simply pauses at the end, leaving the participants in the last pose.&lt;br /&gt;
&lt;br /&gt;
TIP! It doesn&#039;t matter whether you leave spaces or not around the | symbol; the sequences script will sort it out.&lt;br /&gt;
&lt;br /&gt;
=== Avoiding the posename chat ===&lt;br /&gt;
&lt;br /&gt;
By default, MLPV2 chats the pose name whenever it starts, either by menu or sequence.  If you don&#039;t want it chatting pose names during sequence, add &amp;quot;| NOCHAT&amp;quot; to the end of the SEQUENCE line, like this:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | Tour1-seq | NOCHAT&lt;br /&gt;
&lt;br /&gt;
=== Hiding the poses from the menu ===&lt;br /&gt;
&lt;br /&gt;
You can hide any MENU in the notecards from the user by using &amp;quot;HIDDEN&amp;quot; instead of &amp;quot;ALL&amp;quot;, &amp;quot;GROUP&amp;quot;, or &amp;quot;OWNER&amp;quot;, as below:&lt;br /&gt;
&lt;br /&gt;
 MENU | seq1-poses | HIDDEN | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Put your sequenced poses in such a menu and they&#039;ll be invisible to the user.  Just remember to set up the pose positions before hiding the menu they&#039;re in!  Of course, you can use &amp;quot;Adjust pos&amp;quot;, PAUSE in the sequence, and adjust.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TIP: Sequence naming rules ===&lt;br /&gt;
&lt;br /&gt;
A sequence has&lt;br /&gt;
# a button name&lt;br /&gt;
# a sequence name&lt;br /&gt;
&lt;br /&gt;
The button name and sequence name appear in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Cuddle | 0,-4,-12001,SEQUENCE WarmUp&lt;br /&gt;
&lt;br /&gt;
Cuddle is the button name, WarmUp is the sequence name.&lt;br /&gt;
&lt;br /&gt;
The sequence name also appears in the .SEQUENCES.&#039;&#039;myStuff&#039;&#039; notecard:&lt;br /&gt;
&lt;br /&gt;
 SEQUENCE | WarmUp&lt;br /&gt;
&lt;br /&gt;
This is the fist line of the sequence.  WarmUp is the sequence name.  &#039;&#039;&#039;It must exactly match the sequence name&#039;&#039;&#039; (WarmUp) in the LINKMSG line in the .MENUITEMS.&#039;&#039;myStuff&#039;&#039; notecard!&lt;br /&gt;
&lt;br /&gt;
The button name does &#039;&#039;&#039;not&#039;&#039;&#039; need to match the sequence name.  It&#039;s OK if it does.&lt;br /&gt;
&lt;br /&gt;
== Configurable SWAPs ==&lt;br /&gt;
&lt;br /&gt;
By default, the SWAP button swaps the first two balls, which is appropriate for couples poses.  Therefore, there is no need to configure swaps for solo and couples poses.&lt;br /&gt;
&lt;br /&gt;
For poses with 3 or more parties, you may want to configure what the swap button does.  In this case, the button will cycle through a set of ball orders for the pose.&lt;br /&gt;
&lt;br /&gt;
It&#039;s confusing, but stick with me and we&#039;ll muddle through.  Here&#039;s the big picture.  Each line in the .SWAPS.&#039;&#039;myStuff&#039;&#039; notecard configures the swaps for one pose.  (I would rather have done it per menu, but that just didn&#039;t work out, sorry!)&lt;br /&gt;
&lt;br /&gt;
For a pose, we configure a set of ball permutations (arrangements, or orders).  When the user hits SWAP, the balls will cycle through the given permutations.  The first perumtation is always 0 1 2 3 4 5, meaning that ball0 is first, ball1 is second, ball2 is next, etc.  (For a PINK | BLUE | RED menu, ball0 is pink, ball1 is blue, and ball2 is red.)&lt;br /&gt;
&lt;br /&gt;
Since the &amp;quot;0 1 2 3 4 5&amp;quot; permutation is the default, it is NOT configured but is assumed.  We only configure the 2nd, 3rd, and subsequent permutation (as many as we like).&lt;br /&gt;
&lt;br /&gt;
Each line of the swap configuration notecard looks like this:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;posename&#039;&#039; | &#039;&#039;permu2&#039;&#039; : &#039;&#039;permu3&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where there can be any number of permutations, separated by a colon (&amp;quot;:&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
As mentioned above, the orders are given by a list of poseball position numbers.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at an example, with a 3-ball menu that uses PINK | BLUE | RED balls.  Let&#039;s say we want the pink and red balls to swap, but leave the blue ball alone.&lt;br /&gt;
&lt;br /&gt;
So, the permutations would be first the implicit 0 1 2 permutation, and then the swapped one, which in this case would be 2 1 0.  It would be configured like this:&lt;br /&gt;
&lt;br /&gt;
 fmf-cuddle | 2 1 0&lt;br /&gt;
&lt;br /&gt;
where fmf-cuddle is the pose name.&lt;br /&gt;
&lt;br /&gt;
Confused yet?  Yeah, me too.  Now let&#039;s try a 3some pose where we want to rotate all three.  For example, they&#039;re sitting around a round table, and we just want each one to move one position to the side.&lt;br /&gt;
&lt;br /&gt;
The first permutation is always 0 1 2.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 2 0 1.  Balls 0 and 1 move right one place, and ball 2 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
For the next permutation, we want 1 2 0.  Balls 2 and 0 move right one place, and ball 1 slips back around to the first position.&lt;br /&gt;
&lt;br /&gt;
We&#039;d configure it like this.  Remember we omit the first permutation, since it&#039;s the default permutation and is implicit:&lt;br /&gt;
&lt;br /&gt;
 3-sitting | 2 0 1 : 1 2 0&lt;br /&gt;
&lt;br /&gt;
When we hit SWAP the first time, we get the 2 0 1 permutation.  Hit it again, we get 1 2 0.  Hit it again and we go back to 0 1 2, the implicit default permutation.  And so on, until the avatars get dizzy.&lt;br /&gt;
&lt;br /&gt;
When I configure swaps, I actually write down the default permutation and keep it there to help me think, and then delete it when I create the pose configuration line.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s try a two couples 4some for a PINK BLUE RED GREEN menu (female, male, female, male), where first we want the females to swap, and then we want the males to swap.  I&#039;ll start out with the default permutation shown because it helps my feeble mind.  Then I&#039;ll put the subsequent permutations below, in sequence.&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
&lt;br /&gt;
for the next one, let&#039;s swap the men but leave the women swapped:&lt;br /&gt;
&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
&lt;br /&gt;
Are we done?  Well, if we stopped here, the next click on SWAP would move all 4 balls.  Instead, let&#039;s swap the men again, and then moving back to the default will only swap the women.&lt;br /&gt;
&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
So, putting them all together:&lt;br /&gt;
&lt;br /&gt;
 0 1 2 3 - default&lt;br /&gt;
 2 1 0 3 - females swapped&lt;br /&gt;
 2 3 0 1 - females swapped, males swapped&lt;br /&gt;
 0 3 2 1 - males swapped&lt;br /&gt;
&lt;br /&gt;
I hope you&#039;re getting the picture by now.  If your head hurts, well, mine does too.  Just try doing some 6some swaps for real fun!&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the resulting configuration line:&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1 &lt;br /&gt;
&lt;br /&gt;
NOTE: I did not test these configs, and I make mistakes.  I&#039;ll try to find time to test.  In the meantime, please feel free to try it out and &#039;&#039;&#039;please&#039;&#039;&#039; let me know of any mistakes.&lt;br /&gt;
&lt;br /&gt;
Here are some common useful swaps, including the examples above.  Delete the comments before using, and of course, replace the name I&#039;ve given here with the actual pose name.&lt;br /&gt;
&lt;br /&gt;
3somes&lt;br /&gt;
&lt;br /&gt;
 mfm-mfm | 2 0 1 : 1 2 0                                // swap first &amp;amp; third of 3some&lt;br /&gt;
 3-swap-other | 0 2 1                                   // swap 2nd pair of 3some&lt;br /&gt;
 3-rotate-1 | 2 0 1 : 1 2 0                             // rotate three, one direction&lt;br /&gt;
 3-rotate-2 | 1 2 0 : 2 0 1                             // rotate three, other direction&lt;br /&gt;
 3-all | 0 1 2 : 0 2 1 : 2 0 1 : 2 1 0 : 1 2 0 : 1 0 2  // all permutations&lt;br /&gt;
&lt;br /&gt;
4somes&lt;br /&gt;
&lt;br /&gt;
 Swingers | 2 1 0 3 : 2 3 0 1 : 0 3 2 1&lt;br /&gt;
 fmmm-rotate-m | 0 2 3 1 : 0 3 1 2                      // hold 0, rotate others&lt;br /&gt;
 mfmm-rotate-m | 2 1 3 0 : 3 1 0 2                      // hold 1, rotate others&lt;br /&gt;
&lt;br /&gt;
5somes&lt;br /&gt;
&lt;br /&gt;
 fmfmf | 2 1 4 3 0 : 2 3 4 1 0 : 4 3 0 1 2 : 4 1 0 3 2  // alternately rotate women, swap men&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Expandability ===&lt;br /&gt;
&lt;br /&gt;
For expandability, we recommend that each .MENUITEMS* file contain one &amp;quot;unanchored&amp;quot; menu at the top, with any submenus in the notecard hanging off of that unanchored one. This allows 10 independent modules and only memory limitations on the total number of menus. We also suggest dividing menus &amp;amp; positions into separate notecards making it easy for customers to delete the ones they won&#039;t use.&lt;br /&gt;
&lt;br /&gt;
(An &amp;quot;unanchored&amp;quot; menu is one that doesn&#039;t have any TOMENU button leading to it.)&lt;br /&gt;
&lt;br /&gt;
MLPV2 loads the notecards in the same order they appear in object inventory.  The buttons for the unanchored menus in these notecards are added to the main menu in the same order.  So, name your extensions so your notecards sort in the order you want these buttons to appear.&lt;br /&gt;
&lt;br /&gt;
=== Main menu ===&lt;br /&gt;
&lt;br /&gt;
By convention, the top, &amp;quot;main menu&amp;quot; often includes buttons such as OPTIONS, SHUTDOWN, etc, as well as buttons providing access to the sub-menus.  By convention, this menu is defined in the .MENUITEMS notecard (note, no suffix).&lt;br /&gt;
&lt;br /&gt;
Don&#039;t attempt to put actual poses in the menus found here. They won&#039;t work reliably, since these menus don&#039;t list the number and color of poseballs.&lt;br /&gt;
&lt;br /&gt;
=== Help button ===&lt;br /&gt;
&lt;br /&gt;
You may wish to add at this top level a HELP button.&lt;br /&gt;
&lt;br /&gt;
The configuration would be something like this:&lt;br /&gt;
&lt;br /&gt;
LINKMSG HELP | 1,-4,987789,-Help for XYZProduct##Here&#039;s your help notecard&lt;br /&gt;
&lt;br /&gt;
Put this line at the end of the &amp;quot;TOMENU -&amp;quot; lines below MAIN MENU.&lt;br /&gt;
&lt;br /&gt;
Then drop in the ~give script add-on found here [[MLPV2_Give_Item_Add-on]]&lt;br /&gt;
&lt;br /&gt;
It might be better to name the help notecard something other than just &amp;quot;Help&amp;quot;, so that your users can identify it more easily when it ends up in their inventories.&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1188171</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1188171"/>
		<updated>2014-03-08T01:30:02Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[Check Animations Permissions Tool|MLPV2 Check Animations Permissions Tool ]]&lt;br /&gt;
*[[Cleaner MLP Say|MLPV2 &amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[Reset_from_Child_Plugin|MLPV2 Reset_from_Child_Plugin ]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Master | MLPV2 Rez Prop Independent of Pose (Master rezzer script that goes in with other MLP scripts)]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Item|MLPV2 Rez Prop Independent of Pose (Child script that goes into each item)]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on|MLPV2_Sounds as background music]]&lt;br /&gt;
*[[MLPV2_Sound_Effects]] (Triggered by poses)&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Sound_Effects&amp;diff=1188169</id>
		<title>MLPV2 Sound Effects</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Sound_Effects&amp;diff=1188169"/>
		<updated>2014-03-08T01:26:05Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Created page with &amp;quot;MLP Sound Effects by Chaz Longstaff  This MLP sound tool will trigger sounds when poses of your choosing are played. You control if the sounds loop or not, how long they play, et…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MLP Sound Effects by Chaz Longstaff&lt;br /&gt;
&lt;br /&gt;
This MLP sound tool will trigger sounds when poses of your choosing are played. You control if the sounds loop or not, how long they play, etc. The script also allows users to turn all sounds off or back on via a button.&lt;br /&gt;
&lt;br /&gt;
You need two things, both provided on this page: A script and a notecard. Make the script (call it &amp;quot;~sounds&amp;quot; or really anything you want) and the notecard (call it .SOUNDS or .SOUNDS.whatever) and drop into your MLPV2 product. Full usage instructions are within the notecard.&lt;br /&gt;
&lt;br /&gt;
PIECE 1: SCRIPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MLP Sounds&lt;br /&gt;
//v. 1.1 by Chaz Longstaff 2014-03-7&lt;br /&gt;
//This script also requires a notecard named .SOUNDS or .SOUNDS.whatever&lt;br /&gt;
//lines inside card should read like: posename,sound, delaybeforeinitialstart, howoftentorepeat, volume, #repeatsbeforeanotherdelay, delayduringplay. See sample notecard provided with full usage instructions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list DelayDuringPlay = [&amp;quot;&amp;quot;];&lt;br /&gt;
list DelayStarts = [&amp;quot;&amp;quot;];&lt;br /&gt;
list MaxPlays = [&amp;quot;&amp;quot;];&lt;br /&gt;
list PoseNames = [&amp;quot;&amp;quot;];&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;];&lt;br /&gt;
list SoundTimes = [&amp;quot;&amp;quot;];&lt;br /&gt;
list SoundVols = [&amp;quot;&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
integer ListLength;&lt;br /&gt;
string mysound;&lt;br /&gt;
list mysoundlist;&lt;br /&gt;
float mystartdelay;&lt;br /&gt;
float myplaydelay;&lt;br /&gt;
integer mymax;&lt;br /&gt;
float mytime;&lt;br /&gt;
float myvol;&lt;br /&gt;
string playstatus = &amp;quot;On&amp;quot;;&lt;br /&gt;
integer soundtotal;&lt;br /&gt;
integer soundcount;&lt;br /&gt;
integer TimesPlayed;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
float   Interval;&lt;br /&gt;
integer Debug;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer PoseCfgCount;&lt;br /&gt;
string Pose;&lt;br /&gt;
&lt;br /&gt;
config_init()&lt;br /&gt;
{&lt;br /&gt;
    PoseCfgCount    = 0;&lt;br /&gt;
    DelayStarts     = [];&lt;br /&gt;
    DelayDuringPlay = [];&lt;br /&gt;
    MaxPlays        = [];&lt;br /&gt;
    PoseNames       = [];&lt;br /&gt;
    Sounds          = [];&lt;br /&gt;
    SoundTimes      = [];&lt;br /&gt;
    SoundVols       = [];&lt;br /&gt;
    Debug           = 0;&lt;br /&gt;
    Interval        = 15.;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
config_parse(string str, string cardName, integer lineNum)&lt;br /&gt;
{&lt;br /&gt;
    str = llStringTrim(str, STRING_TRIM_HEAD);  // delete leading spaces&lt;br /&gt;
&lt;br /&gt;
    // lines beginning with slash are comments -- ignore them&lt;br /&gt;
    if ( (llGetSubString(str,0,0) == &amp;quot;/&amp;quot;) || (str == &amp;quot;&amp;quot;) ) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    list ldata      = llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [&amp;quot;&amp;quot;]);&lt;br /&gt;
    PoseCfgCount += 1;&lt;br /&gt;
    string  pose    = llStringTrim(llList2String(ldata,0), STRING_TRIM);&lt;br /&gt;
    string  mysoundstr  = llStringTrim(llList2String(ldata,1), STRING_TRIM);&lt;br /&gt;
    string  mystartdelaystr = llStringTrim(llList2String(ldata,2), STRING_TRIM);&lt;br /&gt;
    string  mytimestr = llStringTrim(llList2String(ldata,3), STRING_TRIM);&lt;br /&gt;
    string  myvolstr  = llStringTrim(llList2String(ldata,4), STRING_TRIM);&lt;br /&gt;
    string  mymaxstr  = llStringTrim(llList2String(ldata,5), STRING_TRIM);&lt;br /&gt;
    string  myplaydelaystr  = llStringTrim(llList2String(ldata,6), STRING_TRIM);&lt;br /&gt;
    &lt;br /&gt;
    // posename, sound, delay, howoftentorepeat, volume, #repeatsbeforeanotherdelay&lt;br /&gt;
    &lt;br /&gt;
    addConfig(pose, mysoundstr, mystartdelaystr, mytimestr, myvolstr, mymaxstr, myplaydelaystr);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
addConfig(string ref, string sound, string delayref, string time, string vol, string maxref, string playdelayref) {&lt;br /&gt;
    PoseNames   += (list)ref;&lt;br /&gt;
    Sounds     += (list)sound;&lt;br /&gt;
    DelayStarts    += (list)delayref;&lt;br /&gt;
    SoundTimes   += (list)time;&lt;br /&gt;
    SoundVols       += (list)vol;&lt;br /&gt;
    MaxPlays       += (list)maxref;&lt;br /&gt;
    DelayDuringPlay += (list)playdelayref;&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Post-process any config, if necessary&lt;br /&gt;
config_done() {&lt;br /&gt;
    announce();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
announce() {&lt;br /&gt;
    //integer acount = llGetListLength(AnimNames);&lt;br /&gt;
    &lt;br /&gt;
        llWhisper(0,&lt;br /&gt;
       // + plural(&amp;quot;anim&amp;quot;, &amp;quot;anims&amp;quot;, acount)&lt;br /&gt;
        //+ &amp;quot; and &amp;quot;&lt;br /&gt;
         (string) PoseCfgCount&lt;br /&gt;
        + &amp;quot; pose(s) configured specially for sound (&amp;quot;&lt;br /&gt;
        + llGetScriptName()&lt;br /&gt;
        + &amp;quot;: &amp;quot;&lt;br /&gt;
        + (string)llGetFreeMemory()&lt;br /&gt;
        + &amp;quot; bytes free).&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
togglesound() {&lt;br /&gt;
    if (playstatus == &amp;quot;On&amp;quot;) {&lt;br /&gt;
        playstatus = &amp;quot;Off&amp;quot;;&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        playstatus = &amp;quot;On&amp;quot;;&lt;br /&gt;
        llSetTimerEvent( mytime  );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ==== Utilities ====&lt;br /&gt;
&lt;br /&gt;
integer isKey(string str) { //Identifies whether a certain string is a UUID or not. TRUE if it is     &lt;br /&gt;
 return ( (llStringLength(str) == 36) &amp;amp;&amp;amp; //UUIDs are always 36 characters &lt;br /&gt;
        (llGetSubString(str, 8, 8) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //9th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 13, 13) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //14th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 18, 18) == &amp;quot;-&amp;quot;) &amp;amp;&amp;amp; //19th character is always a dash&lt;br /&gt;
        (llGetSubString(str, 23, 23) == &amp;quot;-&amp;quot;) ); //24th character is always a dash&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Static parameters for reading card config&lt;br /&gt;
string  ConfigNotecardPrefix    = &amp;quot;.SOUNDS&amp;quot;;     // string identifying config notecards&lt;br /&gt;
float   ConfigTimeout           = 180.0;         // seconds per card to wait for slow server&lt;br /&gt;
&lt;br /&gt;
// Globals for reading card config&lt;br /&gt;
integer ConfigLineIndex;&lt;br /&gt;
key     ConfigRequestID;&lt;br /&gt;
list    ConfigCards;        // list of names of config cards&lt;br /&gt;
string  ConfigCardName;     // name of card being read&lt;br /&gt;
integer ConfigCardIndex;    // index of next card to read&lt;br /&gt;
string  ConfigCardKeys;     // for detecting config change&lt;br /&gt;
&lt;br /&gt;
// return TRUE if there is a config card&lt;br /&gt;
&lt;br /&gt;
integer next_card()&lt;br /&gt;
{&lt;br /&gt;
    if (ConfigCardIndex &amp;gt;= llGetListLength(ConfigCards)) {&lt;br /&gt;
        return (FALSE);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    ConfigLineIndex = 0;&lt;br /&gt;
    ConfigCardName = llList2String(ConfigCards, ConfigCardIndex);&lt;br /&gt;
    ConfigCardIndex++;&lt;br /&gt;
    ConfigRequestID = llGetNotecardLine(ConfigCardName, ConfigLineIndex);&lt;br /&gt;
    llWhisper(0,&amp;quot;Reading &amp;quot; + ConfigCardName);&lt;br /&gt;
    return (TRUE);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Get list of config cards, and return list of their keys for use&lt;br /&gt;
// in detecting a config change.&lt;br /&gt;
&lt;br /&gt;
string get_cards() {&lt;br /&gt;
    string item;&lt;br /&gt;
    string keys;&lt;br /&gt;
    &lt;br /&gt;
    ConfigCards = [];&lt;br /&gt;
    integer n = llGetInventoryNumber(INVENTORY_NOTECARD);&lt;br /&gt;
    while (n-- &amp;gt; 0) {&lt;br /&gt;
        item = llGetInventoryName(INVENTORY_NOTECARD, n);&lt;br /&gt;
        if (llSubStringIndex(item, ConfigNotecardPrefix) != -1) {&lt;br /&gt;
            ConfigCards += [item];&lt;br /&gt;
            keys += (string) llGetInventoryKey(item);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return keys;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        state s_config;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// This state is only used to get into s_config, because going from&lt;br /&gt;
// s_config to s_config won&#039;t redo it&#039;s state_entry.  But we might&lt;br /&gt;
// not want to redo anything we might have put in default state entry.&lt;br /&gt;
&lt;br /&gt;
state s_reconfig&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        state s_config;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Read card config&lt;br /&gt;
// Multiple notecard version - read all cards with the given extension&lt;br /&gt;
&lt;br /&gt;
state s_config&lt;br /&gt;
{&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        config_init();&lt;br /&gt;
        ConfigCardKeys = get_cards();&lt;br /&gt;
        ConfigCardIndex = 0;&lt;br /&gt;
&lt;br /&gt;
        if (next_card()) {&lt;br /&gt;
            llSetTimerEvent(ConfigTimeout);&lt;br /&gt;
        } else {&lt;br /&gt;
            state s_unconfigured;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dataserver(key query_id, string data) {&lt;br /&gt;
        if (query_id == ConfigRequestID) {&lt;br /&gt;
            if (data == EOF) {&lt;br /&gt;
                if (next_card()) {&lt;br /&gt;
                    llSetTimerEvent(ConfigTimeout);&lt;br /&gt;
                } else {&lt;br /&gt;
                    config_done();&lt;br /&gt;
                    state s_active;&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                config_parse(data, ConfigCardName, ConfigLineIndex);&lt;br /&gt;
                ConfigRequestID = llGetNotecardLine(ConfigCardName, ++ConfigLineIndex);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer() {&lt;br /&gt;
        llWhisper(0,&amp;quot;Dataserver time out&amp;quot;);&lt;br /&gt;
        state s_unconfigured;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    on_rez(integer num) { state s_reconfig; }&lt;br /&gt;
&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_OWNER) { llResetScript(); }&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) { state s_reconfig; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    state_exit() {&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
state s_unconfigured&lt;br /&gt;
{&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            if (get_cards() != ConfigCardKeys) {&lt;br /&gt;
                state s_config;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
state s_active {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
     llResetScript();&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    state_entry(){&lt;br /&gt;
        ListLength = llGetListLength(PoseNames);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    link_message(integer sender_num, integer num, string str, key id) {&lt;br /&gt;
        &lt;br /&gt;
        //  num = 0 and msg = &amp;quot;POSEB&amp;quot;: new pose&lt;br /&gt;
        //  id = pose name&lt;br /&gt;
        if ( (num == 987790) &amp;amp;&amp;amp; (str == &amp;quot;togglesound&amp;quot;) ) {&lt;br /&gt;
            togglesound();&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if (num == 0 &amp;amp;&amp;amp; str == &amp;quot;STOP&amp;quot;) {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
            llSetTimerEvent(0);&lt;br /&gt;
        } else if (num == 989999) {&lt;br /&gt;
            if (str == &amp;quot;stopsound&amp;quot;) {&lt;br /&gt;
                llStopSound();&lt;br /&gt;
                llSetTimerEvent(0);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == 0 &amp;amp;&amp;amp; str == &amp;quot;POSEB&amp;quot;) {&lt;br /&gt;
            mystartdelay = 0;&lt;br /&gt;
            mymax = 0;&lt;br /&gt;
            soundcount = 0;&lt;br /&gt;
            soundtotal = 0;&lt;br /&gt;
            TimesPlayed = 0;&lt;br /&gt;
            mysoundlist = [];&lt;br /&gt;
            if (playstatus == &amp;quot;Off&amp;quot;) {&lt;br /&gt;
                llSetTimerEvent(0);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            Pose = llStringTrim( ((string)id) , STRING_TRIM);&lt;br /&gt;
           // llSay(0, &amp;quot;Pose : &amp;quot; + Pose);&lt;br /&gt;
            integer ix = llListFindList(PoseNames, (list)Pose);&lt;br /&gt;
                if ( ix != -1) {&lt;br /&gt;
                    string mysounds = llList2String(Sounds,ix);&lt;br /&gt;
                    integer index = llSubStringIndex(mysounds,&amp;quot;***&amp;quot;);&lt;br /&gt;
                    if(index == -1) {&lt;br /&gt;
                        mysound = mysounds;&lt;br /&gt;
                    }&lt;br /&gt;
                    else {&lt;br /&gt;
                        mysoundlist = llParseStringKeepNulls(mysounds, [&amp;quot;***&amp;quot;], [&amp;quot;&amp;quot;]);&lt;br /&gt;
                        soundtotal = llGetListLength(mysoundlist);&lt;br /&gt;
                        mysound = llList2String(mysoundlist,soundcount);&lt;br /&gt;
                    }&lt;br /&gt;
                    mystartdelay = (float)llList2String(DelayStarts,ix);&lt;br /&gt;
                    mymax = (integer)llList2String(MaxPlays,ix);&lt;br /&gt;
                    mytime = (float)llList2String(SoundTimes,ix);&lt;br /&gt;
                    myvol = (float)llList2String(SoundVols,ix);&lt;br /&gt;
                    myplaydelay = (float)llList2String(DelayDuringPlay,ix);&lt;br /&gt;
&lt;br /&gt;
//                   llSay(0, &lt;br /&gt;
//                   &amp;quot;mysound : &amp;quot; + mysound&lt;br /&gt;
//                   + &amp;quot;/ delay : &amp;quot; + (string) mystartdelay&lt;br /&gt;
//                   + &amp;quot; / repeatseconds : &amp;quot; + (string) mytime&lt;br /&gt;
//                    + &amp;quot; / myvol : &amp;quot; + (string) myvol&lt;br /&gt;
//                     + &amp;quot; / maxrepeats : &amp;quot; + (string) mymax&lt;br /&gt;
//                     + &amp;quot; / delayduringplay : &amp;quot; + (string) myplaydelay &lt;br /&gt;
//                   );&lt;br /&gt;
                    if ( mystartdelay &amp;gt; 0 ) llSleep(mystartdelay);&lt;br /&gt;
                    llPlaySound(mysound,myvol);&lt;br /&gt;
                    TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
                    llSetTimerEvent( mytime  );&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                   // llSay(0, &amp;quot;got a shut off msg&amp;quot;);&lt;br /&gt;
                    llSetTimerEvent( 0 );&lt;br /&gt;
                }&lt;br /&gt;
            }    &lt;br /&gt;
    } //end linkmsg section&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    timer() {&lt;br /&gt;
        //llSay(0, &amp;quot;in timer&amp;quot;);&lt;br /&gt;
        if (mymax == 0) {&lt;br /&gt;
            //llSay(0, &amp;quot;no max so go ahead and play&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if ( (TimesPlayed + 1) &amp;gt; mymax ) {&lt;br /&gt;
                TimesPlayed = 0;&lt;br /&gt;
                llSleep(myplaydelay);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if (soundtotal &amp;gt; 1) {&lt;br /&gt;
            soundcount = soundcount + 1;&lt;br /&gt;
            if ( (soundcount + 1) &amp;gt; soundtotal ) {&lt;br /&gt;
                soundcount = 0; &lt;br /&gt;
            }         &lt;br /&gt;
            &lt;br /&gt;
            mysound = llList2String(mysoundlist,soundcount);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if (isKey(mysound) == TRUE) {&lt;br /&gt;
                //it&#039;s a UUID so just play it&lt;br /&gt;
                llPlaySound(mysound, myvol);&lt;br /&gt;
                TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
            }&lt;br /&gt;
        else {&lt;br /&gt;
                //it&#039;s a sound file, so test to make sure it&#039;s present to avoid script errors&lt;br /&gt;
                if ( llGetInventoryType(mysound) != INVENTORY_NONE ) {&lt;br /&gt;
                    llPlaySound(mysound, myvol);&lt;br /&gt;
                    TimesPlayed = TimesPlayed + 1;&lt;br /&gt;
                } &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            if (get_cards() != ConfigCardKeys) {&lt;br /&gt;
                state s_config;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PIECE 2: NOTECARD&lt;br /&gt;
&lt;br /&gt;
//name card .SOUNDS&lt;br /&gt;
//or .SOUNDS.whatever&lt;br /&gt;
//lines inside card should read like: posename,sound, delaybeforeinitialstart, howoftentorepeat, volume, #repeatsbeforeanotherdelay, delayduringplay&lt;br /&gt;
&lt;br /&gt;
//posename: case (and space sensitive inside pose names), make sure you get it right! You can leave spaces in between the commas or not, your choice.&lt;br /&gt;
//sound. You have two choices.&lt;br /&gt;
//Sound Choice (1) You can put in sound name, but if you do, you must include the sound file inside the prim. You need to have copy / transfer rights to the sound file to include it in products you want to sell to others. You don&#039;t need mod rights to the file.&lt;br /&gt;
//Sound Choice (2) You can instead supply the UUID of the sound file. You need full perm rights (mod / copy / transfer) to the sound file in order to be able to  get the UUID -- right-click over a full-perm sound in your invy. Choose copy UUID, and use that as the sound name. When you list a sound UUID, you don&#039;t need to include the sound file inside the MLP product -- makes for tidier contents and less to proof for perms, etc.&lt;br /&gt;
//delay: how many seconds to pause initially before starting any sound play. Set to 0 if no delay is wanted. Applies only to initial start.&lt;br /&gt;
//howoftentorepeat: how often in seconds the sound should repeat play itself. Enter as a number. Decimal numbers such as 5.5 are fine. 0 equals play only once.&lt;br /&gt;
//volume: Enter a number ranging from .1 (lowest) to 1.0 (that being the loudest possible in SL). Instead of 1.0, you can enter just 1&lt;br /&gt;
// #repeatsbeforeanotherdelay: no of times to play the sound before once again doing the delay. Example: delay of 10 seconds, 15 repeats: script waits 10 seconds before starting playing. Plays sound 15 times (at the x seconds intervals you specified.) &lt;br /&gt;
//delayduringplay: sound plays x number of times, then pauses this long in seconds, then plays x number of times again, then pauses again this long in seconds, etc. Put 0 if no delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//MENU BUTTON&lt;br /&gt;
//Creating a menu button like this will allow users to toggle the playing of sounds off and on&lt;br /&gt;
//LINKMSG buttonname | 0,-4,987790, togglesound&lt;br /&gt;
//change the buttonname part to be anything you like (e.g. SND ON/OFF or TOGGLE SOUND). Don&#039;t change anything else in this line.&lt;br /&gt;
LINKMSG SOUNDON/OFF | 0,-4,987790, togglesound&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//SOUND LINE EXAMPLE&lt;br /&gt;
//Spanking, LoudSpank, 0, 10, 1.0, 0&lt;br /&gt;
//when they are on the Spanking pose, play the sound LoudSpank. No delay in starting. Play every 10 seconds at 1.0 volume (max volume). No limit to repeats.&lt;br /&gt;
//Flogging, 98gyt10f-82e4-788c-2a07-1c32d409yhmv, 10, 3, 1, 5&lt;br /&gt;
//when they are on the Flogging pose, play the sound represented by the UUID. Wait 10 seconds before starting, then play every 3 seconds at max volume which is 1. When the sound has played 5 times, then pause 10 seconds again, they start play all over again.&lt;br /&gt;
&lt;br /&gt;
BInspect, d3b61629-50a3-9716-7683-8972f2bb631c, 14, 1, 1, 4, 26&lt;br /&gt;
BDick, beab335a-c030-0307-0948-c5cc77b3c3ac, 0, 20, 1, 0, 0&lt;br /&gt;
BTowel, 59fbf10f-82e4-788c-2a07-1c32d409fafe, 0, 3, 1, 0, 0&lt;br /&gt;
BSpank, d71bd292-6d72-a830-68a1-8b4322fb091d, 0, 3, 1, 0, 0&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1188168</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1188168"/>
		<updated>2014-03-08T01:18:25Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[Check Animations Permissions Tool|MLPV2 Check Animations Permissions Tool ]]&lt;br /&gt;
*[[Cleaner MLP Say|MLPV2 &amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[Reset_from_Child_Plugin|MLPV2 Reset_from_Child_Plugin ]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Master | MLPV2 Rez Prop Independent of Pose (Master rezzer script that goes in with other MLP scripts)]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Item|MLPV2 Rez Prop Independent of Pose (Child script that goes into each item)]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[MLPV2_Sound_Effects]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187833</id>
		<title>MLPV2 Rez Prop Independent of Pose Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187833"/>
		<updated>2014-02-23T04:06:10Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script to [[MLPV2_Rez_Prop_Independent_of_Pose_Master| ~prop permanent rezzer (MASTER) script]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//~prop permanent derezzer&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
//put this script in a prop that you have rezzed via the ~prop permanent rezzer (MASTER) script in MLP&lt;br /&gt;
//when the ~prop permanent rezzer script in MLP hears a button command to derez, it informs this rezzed object of that command to derez&lt;br /&gt;
//so this rezzed object will go away&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-09&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 integer ch;&lt;br /&gt;
 integer ListenHandle;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer channel) {&lt;br /&gt;
        ch = channel;&lt;br /&gt;
        ListenHandle = llListen(ch,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key object, string str) {&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string command = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            string object = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if ( (command == &amp;quot;DeRezAll&amp;quot;) ||   ((command == &amp;quot;DeRez&amp;quot;)&amp;amp;&amp;amp;(object == llGetObjectName()))  )   {&lt;br /&gt;
            llDie();&lt;br /&gt;
        }     &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187832</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187832"/>
		<updated>2014-02-23T03:54:46Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//with this script, users rez an item by clicking a button (e.g. a Throne, a campfire, etc.)&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
//allows multiple props to be rezzed at the same time, the only maximum is how many you allow the user to rez / prim limits on land&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez AThing| 0,-4,987790,Rez##Tiki Torch bb Rezable ##X#.15#.70&lt;br /&gt;
//LINKMSG DeRez AThing | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
//LINKMSG Clear Everything| 1,-4,987790,DeRezAll##dummytext&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ. Separate each of them with a single #&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187831</id>
		<title>MLPV2 Rez Prop Independent of Pose Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187831"/>
		<updated>2014-02-23T03:53:26Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script to [[MLPV2_Rez_Prop_Independent_of_Pose_Master| ~prop permanent rezzer (MASTER) script]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//~prop permanent derezzer&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
//put this script in a prop that you have rezzed via the ~prop permanent rezzer (MASTER) script in MLP&lt;br /&gt;
//when the ~prop permanent rezzer script in MLP hears a button command to derez, it informs this rezzed object of that command to derez&lt;br /&gt;
//so this rezzed object will go away&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-09&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 integer ch;&lt;br /&gt;
 integer ListenHandle;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer channel) {&lt;br /&gt;
        ch = channel;&lt;br /&gt;
        ListenHandle = llListen(ch,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key object, string str) {&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string command = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            string object = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if ( (command == &amp;quot;DeRez&amp;quot;) &amp;amp;&amp;amp; ( object == llGetObjectName() ) ) ( (command == &amp;quot;DeRezAll&amp;quot;)  ) {&lt;br /&gt;
            llDie();&lt;br /&gt;
        }     &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187707</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187707"/>
		<updated>2014-02-12T18:18:57Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//with this script, users rez an item by clicking a button (e.g. a Throne, a campfire, etc.)&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
//allows multiple props to be rezzed at the same time, the only maximum is how many you allow the user to rez / prim limits on land&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez AThing| 0,-4,987790,Rez##Tiki Torch bb Rezable ##X#.15#.70&lt;br /&gt;
//LINKMSG DeRez AThing | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ. Separate each of them with a single #&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187706</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187706"/>
		<updated>2014-02-12T18:12:12Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
//allows multiple props to be rezzed at the same time, the only maximum is how many you allow the user to rez / prim limits on land&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez AThing| 0,-4,987790,Rez##Tiki Torch bb Rezable ##X#.15#.70&lt;br /&gt;
//LINKMSG DeRez AThing | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ. Separate each of them with a single #&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187695</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187695"/>
		<updated>2014-02-11T22:38:17Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez AThing| 0,-4,987790,Rez##Tiki Torch bb Rezable ##X#.15#.70&lt;br /&gt;
//LINKMSG DeRez AThing | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ. Separate each of them with a single #&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187694</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187694"/>
		<updated>2014-02-11T21:47:26Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez Sling | 1,-4,987790,Rez##ItemToRez##X|Y|Z&lt;br /&gt;
//LINKMSG DeRez Sling | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ&lt;br /&gt;
//Yes, that means the rotation is hard coded, so you just need to make your prop something that doesn&#039;t need rotational adjustments during rezzing. Sorry about that, rotations do&lt;br /&gt;
//my head in so I suck at them! Someone whose head can handle rotations is welcome to mod this to add flexible rotations on if they want...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187692</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187692"/>
		<updated>2014-02-11T21:01:20Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: organized into alpha order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[Check Animations Permissions Tool|MLPV2 Check Animations Permissions Tool ]]&lt;br /&gt;
*[[Cleaner MLP Say|MLPV2 &amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[Reset_from_Child_Plugin|MLPV2 Reset_from_Child_Plugin ]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Master | MLPV2 Rez Prop Independent of Pose (Master rezzer script that goes in with other MLP scripts)]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Item|MLPV2 Rez Prop Independent of Pose (Child script that goes into each item)]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187691</id>
		<title>MLPV2 Rez Prop Independent of Pose Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187691"/>
		<updated>2014-02-11T20:23:08Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script to [[MLPV2_Rez_Prop_Independent_of_Pose_Master| ~prop permanent rezzer (MASTER) script]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//~prop permanent derezzer&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
//put this script in a prop that you have rezzed via the ~prop permanent rezzer (MASTER) script in MLP&lt;br /&gt;
//when the ~prop permanent rezzer script in MLP hears a button command to derez, it informs this rezzed object of that command to derez&lt;br /&gt;
//so this rezzed object will go away&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-09&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 integer ch;&lt;br /&gt;
 integer ListenHandle;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer channel) {&lt;br /&gt;
        ch = channel;&lt;br /&gt;
        ListenHandle = llListen(ch,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key object, string str) {&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string command = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            string object = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if ( (command == &amp;quot;DeRez&amp;quot;) &amp;amp;&amp;amp; ( object == llGetObjectName() ) ) {&lt;br /&gt;
            llDie();&lt;br /&gt;
        }     &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187690</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187690"/>
		<updated>2014-02-11T20:22:54Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez Sling | 1,-4,987790,Rez##ItemToRez##X|Y|Z&lt;br /&gt;
//LINKMSG DeRez Sling | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187689</id>
		<title>MLPV2 Rez Prop Independent of Pose Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Item&amp;diff=1187689"/>
		<updated>2014-02-11T20:22:24Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Created page with &amp;quot;Companion script to  ~prop permanent rezzer (MASTER) script  &amp;lt;lsl&amp;gt; //~prop permanent derezzer //  //put this script in a prop that y…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Companion script to [[MLPV2_Rez_Prop_Independent_of_Pose_Master| ~prop permanent rezzer (MASTER) script]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//~prop permanent derezzer&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
//put this script in a prop that you have rezzed via the ~prop permanent rezzer (MASTER) script in MLP&lt;br /&gt;
//when the ~prop permanent rezzer script in MLP hears a button command to derez, it informs this rezzed object of that command to derez&lt;br /&gt;
//so this rezzed object will go away&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-09&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 integer ch;&lt;br /&gt;
 integer ListenHandle;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer channel) {&lt;br /&gt;
        ch = channel;&lt;br /&gt;
        ListenHandle = llListen(ch,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key object, string str) {&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string command = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            string object = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        if ( (command == &amp;quot;DeRez&amp;quot;) &amp;amp;&amp;amp; ( object == llGetObjectName() ) ) {&lt;br /&gt;
            llDie();&lt;br /&gt;
        }     &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187688</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187688"/>
		<updated>2014-02-11T20:22:10Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Companion script: [[MLPV2_Rez_Prop_Independent_of_Pose_Item|~prop permanent derezzer&amp;quot; (ITEM)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
//PURPOSE&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez Sling | 1,-4,987790,Rez##ItemToRez##X|Y|Z&lt;br /&gt;
//LINKMSG DeRez Sling | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187687</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187687"/>
		<updated>2014-02-11T20:14:29Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez Sling | 1,-4,987790,Rez##ItemToRez##X|Y|Z&lt;br /&gt;
//LINKMSG DeRez Sling | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187686</id>
		<title>MLPV2 Rez Prop Independent of Pose Master</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Rez_Prop_Independent_of_Pose_Master&amp;diff=1187686"/>
		<updated>2014-02-11T20:14:15Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Created page with &amp;quot;&amp;lt;/lsl&amp;gt; //MASTER &amp;quot;~prop permanent rezzer&amp;quot; script //version 1.2 by Chaz Longstaff 2014-02-9   //to rez an item semi-permanently from MLP menu independent of a pose //when the item …&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;/lsl&amp;gt;&lt;br /&gt;
//MASTER &amp;quot;~prop permanent rezzer&amp;quot; script&lt;br /&gt;
//version 1.2 by Chaz Longstaff 2014-02-9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//to rez an item semi-permanently from MLP menu independent of a pose&lt;br /&gt;
//when the item is rezzed, it will stay rezzed until it hears a command to go away&lt;br /&gt;
&lt;br /&gt;
//there are 3 parts needed:&lt;br /&gt;
//1. Your menu commands in the MLP menu notecard;&lt;br /&gt;
//2. This script that goes into the MLP along with other MLP scripts -- &amp;quot;~prop permanent rezzer&amp;quot; (MASTER) script;&lt;br /&gt;
//3. A small script &amp;quot;~prop permanent derezzer&amp;quot; (ITEM) that you put into each item that you will semi-permanently rez; this listens for the derez command later.&lt;br /&gt;
//you can of course name the scripts whatever you want, the name of the scripts doesn&#039;t actually matter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//instructions&lt;br /&gt;
//1. put this &amp;quot;~prop permanent rezzer&amp;quot; script inside the MLP product with the other MLP Scripts&lt;br /&gt;
//2. put the script &amp;quot;~prop permanent derezzer&amp;quot; in objects you are going to rez &amp;quot;semi-permanently&amp;quot;&lt;br /&gt;
//3. add menu buttons to your MLP .MENUITEMS notecard as follows&lt;br /&gt;
//&lt;br /&gt;
//format of menu buttons:&lt;br /&gt;
//&lt;br /&gt;
//LINKMSG Rez Sling | 1,-4,987790,Rez##ItemToRez##X|Y|Z&lt;br /&gt;
//LINKMSG DeRez Sling | 1,-4,987790,DeRez##ItemToRez&lt;br /&gt;
&lt;br /&gt;
//X Y Z are the coordinates that you have figured out manually by placing an object where you want it, editing it, and making a note of the XYZ&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer ch;&lt;br /&gt;
string ObjectName;&lt;br /&gt;
vector TargetVector;&lt;br /&gt;
integer x;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
integer IsVector(string str) {&lt;br /&gt;
    if ( (vector)str )&lt;br /&gt;
        return TRUE;&lt;br /&gt;
     if(llSubStringIndex(str, &amp;quot;&amp;lt;&amp;quot;)  != -1) &lt;br /&gt;
        if(llSubStringIndex(str, &amp;quot;&amp;gt;&amp;quot;)  != -1) &lt;br /&gt;
            if(llGetListLength(llParseStringKeepNulls(str, [&amp;quot;,&amp;quot;], [])) == 3)&lt;br /&gt;
                return TRUE;&lt;br /&gt;
     return FALSE; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default {&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer start) {&lt;br /&gt;
&lt;br /&gt;
        llResetScript(); &lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
      link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
&lt;br /&gt;
         if (num == 987790) { &lt;br /&gt;
            list TempList1 = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string status = llStringTrim(llList2String(TempList1, 0),STRING_TRIM);&lt;br /&gt;
            if (status == &amp;quot;DeRez&amp;quot;) {&lt;br /&gt;
                llShout(ch, str);&lt;br /&gt;
                return; &lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            ObjectName = llStringTrim(llList2String(TempList1, 1),STRING_TRIM);&lt;br /&gt;
            string params = llStringTrim(llList2String(TempList1, 2),STRING_TRIM);&lt;br /&gt;
            list TempList2 = llParseStringKeepNulls(params,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            string tmpx = llStringTrim(llList2String(TempList2, 0),STRING_TRIM);&lt;br /&gt;
            if (tmpx == &amp;quot;&amp;quot;) tmpx = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpy = llStringTrim(llList2String(TempList2, 1),STRING_TRIM);&lt;br /&gt;
            if (tmpy == &amp;quot;&amp;quot;) tmpy = &amp;quot;0&amp;quot;;&lt;br /&gt;
            string tmpz = llStringTrim(llList2String(TempList2, 2),STRING_TRIM);&lt;br /&gt;
            if (tmpz == &amp;quot;&amp;quot;) tmpz = &amp;quot;0&amp;quot;;               &lt;br /&gt;
            TargetVector = &amp;lt;0 + (float)tmpx, 0 + (float)tmpy, 0 + (float)tmpz&amp;gt;;&lt;br /&gt;
            //TargetVector = llEuler2Rot(TargetVector );&lt;br /&gt;
            string object = &amp;quot;Object&amp;quot;; // Name of object in inventory&lt;br /&gt;
            vector relativePosOffset = TargetVector; // &amp;quot;Forward&amp;quot; and a little &amp;quot;above&amp;quot; this prim&lt;br /&gt;
            vector relativeVel = &amp;lt;0.0, 0.0, 0.0&amp;gt;; // Traveling in this prim&#039;s &amp;quot;forward&amp;quot; direction at 1m/s&lt;br /&gt;
            rotation relativeRot = &amp;lt;0.0, 0.0, 0.0, 90&amp;gt;; // Rotated 90 degrees on the x-axis compared to this prim&lt;br /&gt;
            if (IsVector( (string)TargetVector  )) {&lt;br /&gt;
                &amp;quot;&amp;quot;;&lt;br /&gt;
                //I forget what I wanted to do here!&lt;br /&gt;
            }   &lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            if (status == &amp;quot;Rez&amp;quot;) {&lt;br /&gt;
                vector myPos = llGetPos();&lt;br /&gt;
                rotation myRot = llGetRot();&lt;br /&gt;
                vector rezPos = myPos+relativePosOffset*myRot;&lt;br /&gt;
                vector rezVel = relativeVel*myRot;&lt;br /&gt;
                rotation rezRot = relativeRot*myRot;&lt;br /&gt;
                llRezAtRoot(ObjectName, rezPos, rezVel, rezRot, ch);                      &lt;br /&gt;
             }&lt;br /&gt;
        }&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187685</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187685"/>
		<updated>2014-02-11T20:13:05Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
*[[Check Animations Permissions Tool]]&lt;br /&gt;
*[[Cleaner MLP Say|&amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Master]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose_Item]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[Reset_from_Child_Plugin]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187684</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1187684"/>
		<updated>2014-02-11T19:58:45Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
*[[Check Animations Permissions Tool]]&lt;br /&gt;
*[[Cleaner MLP Say|&amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Rez_Prop_Independent_of_Pose]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[Reset_from_Child_Plugin]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Timer&amp;diff=1187619</id>
		<title>Timer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Timer&amp;diff=1187619"/>
		<updated>2014-02-09T03:38:11Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Event|event_id=11|event_delay|event=timer|event_desc=Repeats the code in the timer(). Result of the [[llSetTimerEvent]] library function call.&lt;br /&gt;
|constants&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=&lt;br /&gt;
*The time between timer events can be longer than that specified with [[llSetTimerEvent]], this is caused by:&lt;br /&gt;
** &#039;&#039;&#039;Time dilation&#039;&#039;&#039; -  See [[llGetRegionTimeDilation]] for more information;&lt;br /&gt;
** &#039;&#039;&#039;Default event delay&#039;&#039;&#039; - Only so many events can be triggered per second;&lt;br /&gt;
** &#039;&#039;&#039;Event Execution&#039;&#039;&#039; - If the execution of an event takes too long;&lt;br /&gt;
** &#039;&#039;&#039;llSleep()&#039;&#039;&#039;.&lt;br /&gt;
*Only one timer can be active at one time.&lt;br /&gt;
*The timer survives state changes, but does not survive resets.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float gap = 2.0;&lt;br /&gt;
float counter = 0.0;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // Activate the timer listener every 2 seconds&lt;br /&gt;
        llSetTimerEvent(gap);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        counter = counter + gap; &lt;br /&gt;
        llSay(0, (string)counter+&amp;quot; seconds have passed&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_header&lt;br /&gt;
|also_events&lt;br /&gt;
|also_functions={{LSL DefineRow||[[llSetTimerEvent]]|}}&lt;br /&gt;
|also_articles&lt;br /&gt;
|also_footer&lt;br /&gt;
|notes&lt;br /&gt;
|mode&lt;br /&gt;
|deprecated&lt;br /&gt;
|cat1=Script&lt;br /&gt;
|cat2=Time&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2&amp;diff=1187607</id>
		<title>MLPV2</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2&amp;diff=1187607"/>
		<updated>2014-02-08T02:34:43Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{multi-lang}}&lt;br /&gt;
{{Navbox/MLPV2}}&lt;br /&gt;
* Back to [[Using MLP or MLPV2]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MLPV2 - Multi-Love-Pose, Version 2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MLPV2 is a set of scripts and configuration files that enable you to put multiple poses, with different animations and avatar positions for each pose, into an object such as furniture or a HUD.  Poses are selected by menu.  MLPV2 is freeware based on Miffy Fluffy&#039;s MLP; MLP is gnu-licenced.&lt;br /&gt;
&lt;br /&gt;
MLPV2 is commonly used for sex beds, but can be used for a variety of purposes.  It is relatively easy to set up new poses once you have the animations you need and sufficient building skills to move and orient objects where you want them.  In this case, you&#039;re orienting the avatars in the poses.  If the object is sold, as long as the seller allows full permissions on certain configuration files, ends user can adjust the poses to suit their own avatars or add new poses of their own.  All this is possible without modifying any scripts.&lt;br /&gt;
&lt;br /&gt;
The MLP 2.x line was developed by Lear Cale over a period of three years ranging from early spring 2008 until December 2010. There have been no additional versions since then, with the latest version being 2.5c. The 2.4 versions tend to be more used by older builders owing to possibly memory issues in the nascent 2.5x line.&lt;br /&gt;
&lt;br /&gt;
See the navigation box at the right for tutorials and reference information.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
Currently available for free, copy/mod/xfer, at:&lt;br /&gt;
* [http://marketplace.secondlife.com/p/MLPV2-Pose-Menu-script-system-FULL-PERM/470710 MLPV2.3] - at Marketplace&lt;br /&gt;
* Inworld at jPose Villa (use Search or see Lear Cale&#039;s profile pics for FREEBIES).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Features in MLPV2.5 ==&lt;br /&gt;
&lt;br /&gt;
* MLPV2 now reduces its memory limits after reading the configuration, to reduce parcel memory usage. This happens by default without any change to notecards.&lt;br /&gt;
* MEMORY commands for all notecards&lt;br /&gt;
* The &amp;quot;Adjust&amp;quot; menu button now prints free memory.&lt;br /&gt;
* During &amp;quot;Adjust&amp;quot; mode, ~memory script&#039;s limit is set to max, to allow storing new pose positions. Its limit goes back down when you leave Adjust mode.&lt;br /&gt;
&lt;br /&gt;
NOTE from Chaz in 2014: some builders have reported that MLP 2.5x may be too aggressive in trying to limit memory and cause unexpected memory stack heap crashes in scripts such as sequences which aren&#039;t overloaded at all. In this case, using the MEMORY [[MLPV2_Reference_Manual#DIRECTIVES|directive]] in the SEQUENCES notecard (and maybe others), and maxing it to 65535 seems to help. Otherwise, if you&#039;re not concerned about memory management overly, you may want to stick to the highest 2.4 version, which is MLPV 2.4z9.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Features in MLPV2.4 ==&lt;br /&gt;
&lt;br /&gt;
* Each sitter can adjust his or her position&lt;br /&gt;
* SWAP behavior is configurable, per-pose&lt;br /&gt;
* HIDDEN attribute for menus, for hiding poses used only by sequences&lt;br /&gt;
* NOCHAT attribute for sequences (so they don&#039;t chat pose name at each change)&lt;br /&gt;
* Elimination of trailing zeros in POSITIONS (on &amp;quot;save pos&amp;quot;) to reduce memory usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature Summary, as of MLPV2.3 ==&lt;br /&gt;
&lt;br /&gt;
* Notecard configured (.MENUITEMS* and .POSITIONS* files)&lt;br /&gt;
* Backwards-compatible with MLP V1.2 configurations.&lt;br /&gt;
* Up to 6 avatars per pose.  When you select a pose, poseballs appear in the colors configured in the notecards.&lt;br /&gt;
* Supports over 200 couples poses, limited by script memory.&lt;br /&gt;
* Poses can be added by the end user, without scripting (but only if notecards are modifiable)&lt;br /&gt;
* Poses can be adjusted by the end user (but only if notecards are modifiable)&lt;br /&gt;
* Configurable facial expressions per pose.  All standard built-in SL expressions, plus &amp;quot;sleeping&amp;quot; which is emulated using a combination of two built-in expressions.&lt;br /&gt;
* Extended menus: if a menu has more than 9 buttons, a &amp;quot;More--&amp;gt;&amp;quot; button is automatically appended, leading to subsequent buttons.&lt;br /&gt;
* Modular configurations: Put a menu and position file along with all the necessary animations in a folder; drop the folder into an MLPV2 object, and use its menu to reset it, and the new poses are instantly available.  (Of course, they may need to be adjusted to fit the size and orientation of the object.)&lt;br /&gt;
* Menu buttons are ordered as they appear in the configuration files, rather than the odd default LSL style (optional; the default is to work the same way as MLP1.2)&lt;br /&gt;
* Poseball hovertext is configurable via the inventory poseball&#039;s description&lt;br /&gt;
* Warnings for duplicate .POSITIONS* file entries&lt;br /&gt;
* Option to check configuration for missing or unused position entries&lt;br /&gt;
* Can rez a prop object from inventory, configurable per-pose&lt;br /&gt;
* Compatibility with Xcite, Sensations, and chains scripts, without modifying standard MLPV2 scripts.  (You do need adaptor scripts; examples are provided.)&lt;br /&gt;
* Sequences: configure sequences of poses and chats (including participants&#039; names) to play automatically on using one menu button.&lt;br /&gt;
* Reorientation -- drop in this menu module to re-orient all the poses for a new item.  Allows you to change the rotation and offset on all 3 axes.&lt;br /&gt;
* MLP bug fix: if you rez a copy, it uses the same channel as the original, and on MLP V1.2 you&#039;d get crosstalk.  The menu channel is now reset on rez.  This does not reset positions; saved positions are not lost.&lt;br /&gt;
* MLP bug fix: Avoid reanimating a non-sitting avatar! This happened in these cases that I&#039;m aware of:&lt;br /&gt;
** Avatar is posed and STOP button is hit and then a new pose is selected. The avatar (no longer sitting) would get animated.&lt;br /&gt;
** Same as above, but instead of STOP button, avatar teleports or relogs&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1187606</id>
		<title>MLPV2 Reference Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1187606"/>
		<updated>2014-02-08T02:14:32Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* DIRECTIVES */  expanded memory documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
== .MENUITEMS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
Menu notecards create menus.&lt;br /&gt;
&lt;br /&gt;
When MLP2 starts up, it reads all *.MENUITEMS* notecards (&amp;quot;*&amp;quot; can be anything), in the same order as they&#039;re shown in object contents.  You can have as many MENUITEMS notecards as you wish, or just one.  MLP2 essentially reads all MENUITEMS notecards as though they&#039;ve been concatenated into one big file.&lt;br /&gt;
&lt;br /&gt;
The first two things (other than comments) MLPV2 reads from the first *.MENUITEMS* notecard MUST be two POSE statements, first for &amp;quot;default&amp;quot; and second for &amp;quot;stand&amp;quot; -- even if you don&#039;t use the STAND button anywhere.  Note that these must not be repeated in subsequent *.MENUITEMS* notecards.  See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.)&lt;br /&gt;
&lt;br /&gt;
After the first two POSE statements, it expects directives and then MENU commands to build menus.&lt;br /&gt;
&lt;br /&gt;
An example, to be clear:&lt;br /&gt;
&lt;br /&gt;
 POSE stand | stand | stand  | stand | stand | stand | stand &lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground&lt;br /&gt;
&lt;br /&gt;
MENUORDER &lt;br /&gt;
// NORELOAD &lt;br /&gt;
&lt;br /&gt;
MENU MAIN MENU | ALL&lt;br /&gt;
(etc)&lt;br /&gt;
&lt;br /&gt;
Don&#039;t insert anything else at the top of the main MENUITEMS notecard, or you may experience strange errors such as &amp;quot;No Unused TOMENU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first MENU created is the main menu, which a user gets on touching the MLP2 object.  The remaining menus are reached via buttons configured using TOMENU.&lt;br /&gt;
&lt;br /&gt;
There are several built-in commands that you use to build your menu, as well as several options.&lt;br /&gt;
&lt;br /&gt;
Most commands cause buttons to be added to menus.  In this case, the command format is usually like this:&lt;br /&gt;
&lt;br /&gt;
 COMMAND &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;&#039;ButtonLabel&#039;&#039; with whatever you want to appear as the button label.  In many cases, this is optional, and the button label will match the command name.  (Whenever something in a command format is in &#039;&#039;italics&#039;&#039;, it means that you replace that text with what you want.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== COMMENTS ===&lt;br /&gt;
Comments in MENUITEMS notecards must be preceded by &amp;quot;//&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Any subsequent text on that line is ignored by the scripts.&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
 //all this text is ignored&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
 STOP // STOP is read by the scripts; but this part of the line is ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DEFAULT / STAND ===&lt;br /&gt;
&lt;br /&gt;
Place these are the very top of the first *.MENUITEMS* notecard, which is usually the one named &amp;quot;.MENUITEMS&amp;quot;. (You may insert commented lines before this; commented lines don&#039;t count.)&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 POSE stand | stand | stand  | stand  //pose before starting and when stopping&lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground //default pose when no animation entered&lt;br /&gt;
&lt;br /&gt;
You may use other animations; the ones in the example are standard ones built into the SL, and don&#039;t need to appear in object inventory. {{Footnote|For a list of other built-in animations, see here: [https://wiki.secondlife.com/wiki/Internal_Animations#User-playable_animations].}}&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_Default_Pose| the default pose tip]] for help on setting coordinates for the default pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVES ===&lt;br /&gt;
&lt;br /&gt;
Directives affect the overall behavior of MLP2.  It usually doesn&#039;t matter where in the .MENUITEMS* files they are, but by convention, they appear after the default and stand poses.  Directives do not cause a menu button to appear.&lt;br /&gt;
&lt;br /&gt;
All are case-sensitive and so therefore you must use them in upper case as shown here.&lt;br /&gt;
&lt;br /&gt;
If you want a directive to be acted upon, type its name into your menu card. If you don&#039;t, either just leave it out, or comment it out.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOBACK || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
Automatically inserts BACK before any MORE--&amp;gt; automatically added by the AUTOMORE feature (see below).  This does not add a BACK to every menu page, only those with &amp;quot;MORE--&amp;gt;&amp;quot; inserted by the AUTOMORE feature.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOMORE || &lt;br /&gt;
&lt;br /&gt;
Automatically inserts &amp;quot;More--&amp;gt;&amp;quot; button for menus with more than 12 buttons *except* for the main menu. If you need a &amp;quot;More--&amp;gt;&amp;quot; on the Main Menu, you must add one manually.&lt;br /&gt;
&lt;br /&gt;
You would add a manual one like this:&lt;br /&gt;
&lt;br /&gt;
 MORE More--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MORE&amp;quot; is the command; &amp;quot;More--&amp;gt;&amp;quot; is the button label.&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
|| MEMORY || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.5)&lt;br /&gt;
This directive changes the maximum memory limit for the ~menu script.&lt;br /&gt;
&lt;br /&gt;
 MEMORY &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets the limit to &#039;&#039;MemoryLimit&#039;&#039; in Byte on the ~menu script if encoutered in .MENUITEMS notecards.&lt;br /&gt;
&lt;br /&gt;
MLPV2.5c and up reduce their memory limits after reading the configuration, to reduce parcel memory usage.  This happens by default without any change to notecards.&lt;br /&gt;
MEMORY commands for all notecards set the amount of free memory to reserve after reading configuration. Lower numbers use less region (sim) script memory but also increase risk of&lt;br /&gt;
stack-heap errors.  Set MEMORY to 65536 to get max permissible memory. If MEMORY commands are omitted, defaults are used.&lt;br /&gt;
&lt;br /&gt;
When MLPV2 prints memory for a script as &amp;quot;(~scriptname: 10000 bytes free, 40000 byte limit)&amp;quot; 10000 bytes are available for the script&#039;s use.  If it gets stack-heap errors, configure a higher MEMORY limit for that script&#039;s notecard. 40000 bytes is the limit: if this number is below 65535, you can configure more MEMORY for that script.  If it&#039;s at 65535, you&#039;re maxxed out; you might have to reduce (remove poses, shorten pose names, etc -- see wiki for tips)&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Adjust&amp;quot; menu button now prints free memory. During &amp;quot;Adjust&amp;quot; mode, ~memory script&#039;s limit is set to max, to allow storing new pose positions.  Its limit goes back down when you leave Adjust mode.&lt;br /&gt;
&lt;br /&gt;
Some scripts have hard-coded limits that can&#039;t be changed by notecard. If you get stack-heap errors for these, you can try modifying the script, increasing the number passed to llSetMemoryLimit().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;MEMORY|&#039;&#039;MemoryLimit&#039;&#039;|&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~props script in .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
 MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~swap script in .SWAP notecards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENUORDER || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This directive causes all menu buttons to appear in menus in the same order as they appear in the .MENUITEMS* files.  If absent, menus are in the group-by-3-backwards order typical of SL menus, like original MLP.  If present *anywhere* in any of the .MENUITEMS notecards, it affects all menus regardless of what .MENUITEM notecard they are in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| NORELOAD || &lt;br /&gt;
&lt;br /&gt;
This directive causes MLP2 not to do a menu reset when rezzed.  MLPV2.1 does not autoreload on rez, and this directive has no effect with MLPV2.1.  (Automatic reset on rez was added to fix a problem where multiple copies of the same MLP object responded to each others&#039; menus.  A better fix was found in MLPV2.1.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MENU COMMANDS ===&lt;br /&gt;
&lt;br /&gt;
These will cause buttons to appear on menus.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ADJUST|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to make the balls turn into long, translucent beams for easy editing to manoeuvre them into their proper positions for each pose.&lt;br /&gt;
&lt;br /&gt;
 ADJUST &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;AdjustPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_ADJUST_Beams| tip on adjusting beams.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| BACK || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button labelled &amp;quot;BACK&amp;quot; that, when pressed, displays the menu one level up in the menu hierarchy.&lt;br /&gt;
&lt;br /&gt;
 BACK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
If you use the AUTOMORE and AUTOBACK, you will only need to manually enter this on the last page of a submenu (including the only page of a menu with 12 or fewer buttons).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||BALLUSERS || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button to cycle through the access levels governing who can sit on the poseballs.&lt;br /&gt;
&lt;br /&gt;
The levels are OWNER, GROUP and ALL&lt;br /&gt;
&lt;br /&gt;
 BALLUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;Level&#039;&#039; is ALL, GROUP, or OWNER.&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with the same active group tag as the MLP object can use the balls. The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHAT|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle on/off whether the MLP object will chat the name of each pose as it is selected.&lt;br /&gt;
&lt;br /&gt;
 CHAT &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;OnOff&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;OnOff&#039;&#039; is the default, either ON or OFF.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHECK || &lt;br /&gt;
&lt;br /&gt;
Adds a button that find poses with no positions and vice versa.&lt;br /&gt;
&lt;br /&gt;
 CHECK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;CheckPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note!&#039;&#039;&#039; This will reload all .POSITIONS.* files, so first backup any positions that have been saved using SAVEPOS but not manually entered into a *.POSITIONS* notecard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| DUMP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to dump the saved pose positions, suitable for saving into *.POSITIONS.* notecards.&lt;br /&gt;
&lt;br /&gt;
 DUMP &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;Dump Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The positions are chatted to owner only.  Positions for all poses are dumped.  The user may then copy/paste this into *.POSITIONS* notecards so that the positions will be retained across a position reset, or a full restart or shutdown.&lt;br /&gt;
&lt;br /&gt;
NOTE! *.POSITIONS* notecards should be released to customers with full permissions, to allow them to save positions that they&#039;ve adjusted to fit their avatars.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.POSITIONS* notecards, the end user may copy/paste all the info into the main .POSITIONS notecard, and delete all the other *.POSITIONS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .POSITIONS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (DUMPPROPS) || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
To add a button that will save prop configurations, use the following line:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Dump Props | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
&lt;br /&gt;
This adds a button named &amp;quot;Dump Props&amp;quot; (or whatever you prefer) that causes all the prop positions to be printed to the screen. They are visible to the MLP product owner only. The user may then copy/paste this text to *.PROPS* notecards for permanent storage.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.PROPS* notecards, the end user may copy/paste all the info into the main .PROPS notecard, and delete all the other *.PROPS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .PROPS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.PROPS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| HIDE || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become invisible. Not many MLP product makers bother with offering this button. The opposite is the SHOW command.&lt;br /&gt;
&lt;br /&gt;
 HIDE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| INVISIBLE || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle visibility for the prim that the MLP scripts are in.  Note: this does not apply to the balls or any other prims, even linked ones.&lt;br /&gt;
&lt;br /&gt;
 INVISIBLE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| LINKMSG  || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button that will send a specified link message to other scripts in the object when the button is pressed.  This is useful for adding scripted features to MLP2 without having to modify MLP2 scripts.&lt;br /&gt;
&lt;br /&gt;
 LINKMSG &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;menu&#039;&#039;,&#039;&#039;primnum&#039;&#039;,&#039;&#039;lm-num-arg&#039;&#039;,&#039;&#039;lm-str-arg&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Parameter&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;ButtonLabel&#039;&#039; || What you want the button to be called on the menu.&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;menu&#039;&#039; || Set to 1 if the script receiving the button will pop up a menu.  It causes MLP2 not to repost its menu, to avoid menus stacking up.  Set to 0 otherwise -- (note: this doesn&#039;t inhibit MLP2&#039;s redo menu feature.)&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;primnum&#039;&#039; || &lt;br /&gt;
Set to -1 to send the link message to all prims&lt;br /&gt;
&lt;br /&gt;
Set to -4 for just the prim the script is actually in&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-num-arg&#039;&#039; || &#039;num&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-str-arg&#039;&#039; || &#039;str&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The menu user&#039;s UUID key is passed automatically as the &#039;key&#039; argument for llMessageLinked().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENU || &lt;br /&gt;
&lt;br /&gt;
Creates a menu that can be reached from other menus.  The first MENU configured becomes the main menu, which the user gets on &#039;touch&#039;.&lt;br /&gt;
&lt;br /&gt;
A menu&#039;s buttons are configured following the MENU statement.&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039;&lt;br /&gt;
or&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039; | &#039;&#039;ballcolors&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This creates a menu named &#039;&#039;name1&#039;&#039;, and a button named the same on the main menu.&lt;br /&gt;
&lt;br /&gt;
Those who can access it are specified by &#039;&#039;who&#039;&#039;, one of the following:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ALL || Anyone can use it&lt;br /&gt;
|-&lt;br /&gt;
|| GROUP || Only those who are wearing a group tag that matches the object&#039;s group can use it&lt;br /&gt;
|-&lt;br /&gt;
|| OWNER || Only the object owner can use it&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ballcolors&#039;&#039; is a list of zero to four ball color names, separated by vertical bars (&amp;quot;|&amp;quot;).  The color name MUST be in UPPER-CASE. The following ball color names are supported:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Version&lt;br /&gt;
!Colors&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2 || BLUE PINK&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2.1 || PINK, BLUE, PINK2, BLUE2, GREEN, MAGENTA, RED, ORANGE, WHITE, BLACK, YELLOW, CYAN, RED2, TEAL, GREEN2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See under Menu Parameters section for greater details.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 MENU MyMenu | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Creates a menu named Mymenu.  Poses in this menu will have 2 balls, a pink and a blue one.&lt;br /&gt;
&lt;br /&gt;
Subsequent menu configuration lines add buttons to this menu, until the next MENU command.  There is a limit of 12 buttons to a menu, unless AUTOMORE is used.&lt;br /&gt;
&lt;br /&gt;
Note that, unless you use the MENUORDER directive, these menu items will be offered to users in the usual SL ass-backwards-by-three manner.&lt;br /&gt;
&lt;br /&gt;
How do we get a button to get to this menu?  There are two ways.&lt;br /&gt;
&lt;br /&gt;
The first way is the same as with original MLP: use the TOMENU command to create a button to get to this menu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button label must match the menu name.  Menu names are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
The second way requires &amp;quot;TOMENU -&amp;quot; configuration lines in the main menu.  For any MENU statement where no preceeding TOMENU matches the menu name, a menu button is automatically added to the main menu.  (For this to work, the main menu must be filled with &amp;quot;TOMENU -&amp;quot; statements, which create blank spaces for this purpose.  When MONO comes out and memory is less of an issue, we will try to make this simpler!)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||MENUUSERS || &lt;br /&gt;
&lt;br /&gt;
Adds a button that cycles through the access levels governing who can use the menu.&lt;br /&gt;
&lt;br /&gt;
 MENUUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Level&#039;&#039; specifies the default, and must be one of the following: OWNER, GROUP, or ALL&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with active group tag amtching the MLP object&#039;s group can use the main menu. (You can restrict access to sub-menus on a per menu basis. See MENU above for more info.) The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| OFF || &lt;br /&gt;
&lt;br /&gt;
Adds a button to turn the MLP system off.&lt;br /&gt;
&lt;br /&gt;
 OFF &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Shutdown!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When turned off, MLP deletes any balls, turns off all the scripts except for one that will turn it back on again when the owner touches it.&lt;br /&gt;
&lt;br /&gt;
This reduces any contribution the MLP might be making to lag.&lt;br /&gt;
&lt;br /&gt;
Any saved poses or prop configurations that have not been saved to *.POSITIONS* and *.PROPS* files are irrevocably lost.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| POSE  || &lt;br /&gt;
&lt;br /&gt;
Adds a button for a pose.&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;PoseName&#039;&#039; | &#039;&#039;AnimList&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PoseName&#039;&#039; is the button label, and also the pose name (found in the *.POSITIONS* and *.PROPS* notecards).&lt;br /&gt;
&#039;&#039;AnimList&#039;&#039; is a list of animation names, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The number of animations must match the number of ball colors listed in the corresponding MENU configuration.&lt;br /&gt;
That is, if the MENU has 3 poseballs, you must provide 3 animation names.&lt;br /&gt;
&lt;br /&gt;
The animations are applied to the balls specified, in order.  That is, if the ball colors are &amp;quot;PINK BLUE PINK&amp;quot;, three animations should be listed.  The first applies to the first pink ball, the second to the blue ball, and the third animation applies to the third ball, which is pink. (See also &amp;quot;Ball Colors&amp;quot; option below for more information.)&lt;br /&gt;
&lt;br /&gt;
The ball positions are specified in a .POSITIONS* file, discussed below.  If there is no .POSITIONS entry for a pose, the default pose is used.  It&#039;s a good idea to always set up the default pose first for a new MLP product, to avoid balls rezzing underground or in other inconvenient locations.&lt;br /&gt;
&lt;br /&gt;
Each animation name must have a corresponding animation in the object&#039;s contents, unless it is a built-in animation.  Yyou cannot refer to animations by UUID.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| REDO ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to enable/disable popping the menu back up after making a selection.&lt;br /&gt;
&lt;br /&gt;
 REDO &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
By default, when a user makes a choice on an MLP menu, the menu re-presents itself for further use.&lt;br /&gt;
&lt;br /&gt;
If you offer this command button to users, and they click it, it will toggle this feature off and on.&lt;br /&gt;
&lt;br /&gt;
Few MLP product makers offer this button to users, because turning off the menu coming back can create the perception that something is broken.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|| RELOAD || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.POSITIONS* and *.PROPS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RELOAD &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This button is useful after changing *.POSITIONS* or *.PROPS* notecards, to verify that you did what you intended. It&#039;s considerably faster than a complete reset since the menu isn&#039;t reread.&lt;br /&gt;
&lt;br /&gt;
General rule: if you changed a .MENUITEMS card, do Menu reset. If you changed a .POSITIONS or .PROPS card, do Pos Reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESET || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.MENUITEMS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RESET &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Menu&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In addition to re-reading the notecards, it resets most of the MLPV2 scripts.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESTART || &lt;br /&gt;
&lt;br /&gt;
Adds a button to do what both RESET and RELOAD do, combined.&lt;br /&gt;
&lt;br /&gt;
 RESTART &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reload&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
RESTART is therefore the most thorough command to use for a complete reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SAVE || &lt;br /&gt;
&lt;br /&gt;
Adds a button to save ball positions for the current pose.&lt;br /&gt;
&lt;br /&gt;
 SAVE &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is typically &amp;quot;Save Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Immediately after adjusting a pose, always, &#039;&#039;&#039;&#039;&#039;ALWAYS&#039;&#039;&#039;&#039;&#039; click this button! You will no doubt, like all of us, lose a few adjustments that you make when you first start out with MLP before this gets scarred into your habits.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caution!&#039;&#039;&#039; This is not permanent.  Anything that causes the *.POSITIONS* cards to be re-read will wipe these settings out from script memory. A pose is permanent only if it&#039;s saved in a *.POSITIONS* card.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: the poseballs cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (SAVEPROP) || &lt;br /&gt;
&lt;br /&gt;
To add a button to save the prop location for the current pose, use the following command:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Save Prop | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;Save Prop&amp;quot; is the button name (and can be whatever you choose).&lt;br /&gt;
&lt;br /&gt;
You use this button after you have adjusted a prop. This stores information about the position, etc, to script memory.&lt;br /&gt;
&lt;br /&gt;
This information will also be printed to the screen (only the owner can see it.) This information should be copied to the .PROPS notecard for permanent storage. You can either do this right on the spot, or arrange and save a whole bunch of prop positions, and then use the DUMPPROPS command to print out all the prop info at once for copying and pasting to the .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a prop cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||SHOW || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become visible.&lt;br /&gt;
&lt;br /&gt;
 SHOW &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not many MLP product makers bother with offering this command. The opposite is the HIDE command.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| STOP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to delete any balls and unseat any participants.&lt;br /&gt;
&lt;br /&gt;
 STOP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
Note though that, unlike OFF (covered above) it does not significantly reduce any contribution the MLP system might be making to lag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SWAP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to swap positions between the first and second balls for any pose.&lt;br /&gt;
&lt;br /&gt;
 SWAP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
It has no effect on any third or fourth balls in a pose.  However, this behavior may change in future versions.&lt;br /&gt;
&lt;br /&gt;
Note: In some animation menuing systems such as XPOSE (as of summer 2008), hitting the SWAP button only swaps the current pose; the swap is lost at the next pose. In MLP, the SWAP is maintained until a user chooses to SWAP back.&lt;br /&gt;
&lt;br /&gt;
IMHO, the XPOSE behavior is better, and I might change this in a future version.  [Lear Cale]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| TOMENU || &lt;br /&gt;
&lt;br /&gt;
Adds a button to get to another menu.&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MenuName&#039;&#039; is used as the button label, and must exactly match the name of the menu (case-sensitive).&lt;br /&gt;
&lt;br /&gt;
If a menu (say, &amp;quot;Foo&amp;quot;) exists, and there is no &amp;quot;TOMENU Foo&amp;quot; statement on a preceeding menu, and if there are unused &amp;quot;TOMENU -&amp;quot; statements for the main menu, a button for &amp;quot;Foo&amp;quot; is added to the main menu, using up a &amp;quot;TOMENU -&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about supplying lots of TOMENU - slots on your main menu. If MLPv2 doesn&#039;t need them, it will just ignore them!&lt;br /&gt;
&lt;br /&gt;
Note that if you are offering [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| modules]], you must provide some &amp;quot;TOMENU -&amp;quot; slots on your main menu for the module menu buttons to appear.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| Z* || &lt;br /&gt;
&lt;br /&gt;
The Z command adds a button that allows end users to easily adjust for themselves the height of the poseballs.&lt;br /&gt;
&lt;br /&gt;
 Z &#039;&#039;sign&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For this command (and only for this command!), no spaces are allowed between the items (Z, &#039;&#039;sign&#039;&#039;, and &#039;&#039;number).  For example:&lt;br /&gt;
&lt;br /&gt;
 Z+1&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
&lt;br /&gt;
The numbers are treated by MLP as being a measurement in centimetres. Each time a user clicks a button, say Z+5, the height will be increased by 5 centimetres. If they have previously clicked the Z+5 button, then the height will be increased by an additional 5 centimetres.&lt;br /&gt;
&lt;br /&gt;
A Z-5 button, if offered, would decrease the height by 5 cm.&lt;br /&gt;
&lt;br /&gt;
Z adjustments chosen by users apply to all the poses, not just the one currently being used.&lt;br /&gt;
&lt;br /&gt;
Note: the ongoing tally of these adjustments are stored in the Object Description of the prim that holds the MLP scripts, so any descriptions you put there will be replaced.&lt;br /&gt;
&lt;br /&gt;
To clear them, you need to either use the Z buttons to set the offset back to 0, or, edit the object, select the MLP prim if it&#039;s not the root prim, and clear the description.&lt;br /&gt;
&lt;br /&gt;
Traditionally, MLP product makers have put these Z commands under the OPTIONS menu.&lt;br /&gt;
These were recently moved to a HEIGHT submenu, to make room for the Props commands.&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2|  Tip! Options Menu]] for more info on how exactly to do this.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2| Tip! Options Menu]] table at the end of this page for helpful advice on arranging many of these menu commands into a tidy sub-menu.&lt;br /&gt;
&lt;br /&gt;
=== MENU PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to MENU statement lines.&lt;br /&gt;
&lt;br /&gt;
==== Ball Colors ====&lt;br /&gt;
&lt;br /&gt;
If a MENU has no pose ball colors listed, it should have no POSE buttons.&lt;br /&gt;
&lt;br /&gt;
When, however, a particular MENU will contain POSE statements in it, then the MENU statement must be followed by a set of ball colors to be used for all poses in this particular menu.&lt;br /&gt;
&lt;br /&gt;
One to four balls can be specified, supporting poses for up to four participants. The balls are rezzed as necessary when a pose in the menu is selected.&lt;br /&gt;
&lt;br /&gt;
Supported colors as of summer 2008 are:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|| PINK || PINK2 || BLUE  || BLUE2 || WHITE&lt;br /&gt;
|-&lt;br /&gt;
|| GREEN || GREEN2  || RED  || RED2 || BLACK&lt;br /&gt;
|-&lt;br /&gt;
|| MAGENTA || ORANGE || YELLOW  ||CYAN  ||TEAL&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PINK2, BLUE2, RED2, and GREEN2 are darker their respective colors with no number after them. &lt;br /&gt;
&lt;br /&gt;
Note: The colors must be given in uppercase as shown above.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 MENU boy-girl | ALL | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Boy Only | ALL | BLUE | HIDE&lt;br /&gt;
&lt;br /&gt;
 MENU Girl Only | ALL | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Anyone | ALL | GREEN&lt;br /&gt;
&lt;br /&gt;
 MENU 3Some  | ALL | PINK | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU 4Some  | ALL | PINK | BLUE | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== POSE PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to POSE statement lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Animations (Facial) ====&lt;br /&gt;
&lt;br /&gt;
In the POSE line, add the suffixes listed below to the animation names to cause facial expressions.  (You don&#039;t change the animation name in inventory, just add the suffix to the anim name in the POSE line.)&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently (April 2011) no menu button to allow MLP users to turn facial expressions off and on.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!suffix&lt;br /&gt;
!expression&lt;br /&gt;
|-&lt;br /&gt;
|| * || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::1 || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::2 || surprise&lt;br /&gt;
|-&lt;br /&gt;
|| ::3 || tongue out&lt;br /&gt;
|-&lt;br /&gt;
|| ::4 || smile&lt;br /&gt;
|-&lt;br /&gt;
|| ::5 || toothsmile&lt;br /&gt;
|-&lt;br /&gt;
|| ::6 || wink&lt;br /&gt;
|-&lt;br /&gt;
|| ::7 || cry&lt;br /&gt;
|-&lt;br /&gt;
|| ::8 || kiss&lt;br /&gt;
|-&lt;br /&gt;
|| ::9 || laugh&lt;br /&gt;
|-&lt;br /&gt;
|| ::10 || disdain&lt;br /&gt;
|-&lt;br /&gt;
|| ::11 || repulsed&lt;br /&gt;
|-&lt;br /&gt;
|| ::12 || anger&lt;br /&gt;
|-&lt;br /&gt;
|| ::13 || bored&lt;br /&gt;
|-&lt;br /&gt;
|| ::14 || sad&lt;br /&gt;
|-&lt;br /&gt;
|| ::15 || embarrassed&lt;br /&gt;
|-&lt;br /&gt;
|| ::16 || frown&lt;br /&gt;
|-&lt;br /&gt;
|| ::17 || shrug&lt;br /&gt;
|-&lt;br /&gt;
|| ::18 || afraid&lt;br /&gt;
|-&lt;br /&gt;
|| ::19 || worry&lt;br /&gt;
|-&lt;br /&gt;
|| ::20 || sleep&lt;br /&gt;
|-&lt;br /&gt;
|| ::21 || random (for MLPv2.4v or higher, produces random surprise / pleasure expressions)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: 20 is a combination of disdain and smile, the closest that could be found for sleep.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There must be NO SPACE between the animation name, and the suffix. Example: &lt;br /&gt;
&lt;br /&gt;
 POSE Sleep 01 | Sleep 01 femalesleep::20 | Sleep 01 malesleep::20 &lt;br /&gt;
&lt;br /&gt;
To make the expression happen periodically rather than constantly, add another extension and the length of the repetition cycle (in seconds).&lt;br /&gt;
&lt;br /&gt;
For example, to use MyAnim with open mouth every 5.5 seconds:&lt;br /&gt;
&lt;br /&gt;
 POSE Mypose | MyAnim::1::5.5&lt;br /&gt;
&lt;br /&gt;
If during menu boot you get an error that says &amp;quot;animation xyx not found&amp;quot;, but you know that animation xyx really is in there, check to see that you didn&#039;t put a space before the expression suffix after all.&lt;br /&gt;
&lt;br /&gt;
Note that this suffix appears only in the POSE line of a MENU; the actual name of the animation in the object&#039;s contents folder should *not* be changed to have this suffix. (Many animations are sold no mod; so you wouldn&#039;t be able to, anyway.)&lt;br /&gt;
&lt;br /&gt;
== .POSITIONS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
The .positions notecards, as their name implies, provide a place for storing information about positions of the poses in the menu.&lt;br /&gt;
&lt;br /&gt;
As long as any position adjustments you have made have only been saved via the SavePos buttons, assume them to be temporary. They are only saved in script memory, and script memory is volatile. If you hand the MLP v 2.0 object to someone else, or if your sim crashes really terribly or if the script blows up with a stack-heap error, etc ... you may lose all the work you&#039;d thought you&#039;d saved.&lt;br /&gt;
&lt;br /&gt;
The *.POSITIONS* notecards provide a safety against losing your work.&lt;br /&gt;
&lt;br /&gt;
You create *.POSITIONS* notecards by your manually copying and pasting in information from the &amp;quot;Save Pos&amp;quot; or &amp;quot;Dump Pos&amp;quot; buttons (SAVE and DUMP commands described above).  SL does not allow scripts to write data to notecards, so you must do this yourself.&lt;br /&gt;
&lt;br /&gt;
NOTE: If the .POSITIONS notecard is no modify, or is placed in a no modify prim, people will not be able to open the notecard at all. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lines in the .positions notecard look something like this:&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LieHold1&amp;quot; is the name of a pose (from the POSE statement in a *.MENUITEMS* file).&lt;br /&gt;
&lt;br /&gt;
The 4 vectors in the above example represent in order:&lt;br /&gt;
first ball position, first ball rotation, second ball position, second ball rotation&lt;br /&gt;
&lt;br /&gt;
If there are 3 and / or 4 balls also involved in a given pose, then the pattern repeats on for them as well.&lt;br /&gt;
&lt;br /&gt;
If you rename a pose in the menu that you have already stored a position in the notecard for, be sure to edit the .positions card, locate that pose in it, and give it the new name as well to match.&lt;br /&gt;
&lt;br /&gt;
Be sure to purge out position lines for which menu items no longer exist. This is one instance in which tidiness really does pay off: all that old, unneeded position information is read into the scripts&#039; memory, which can make you think that your MLP product is &amp;quot;full&amp;quot; (that fatal stack-heap message) and can&#039;t hold any of the other poses you had planned to add.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on .positions cards when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: Comparing positions to menu items is easier and the work of seconds as opposed to minutes if you keep the positions information cleaned up. See [[#TIP.21_Positions_Notecard_tidying| the tip on tidying .POSITIONS notecards]], if you wish to do this extra (not-required) work.&lt;br /&gt;
&lt;br /&gt;
Remember that purchasers of your MLP2 product should be able to adjust poses to fine-tune them to their own heights, sizes, etc. All *.POSITIONS* notecards should be supplied to end-users with MODIFY rights so that they too can permanently save all their hard work. {{Footnote|Some furniture makers prefer to sell their furniture no mod so that others can&#039;t just disassemble it and copy the dimensions of the pieces and thereby duplicate the furniture -- fair enough. However, if the .positions notecard is in a no-mod prim, notecards inside it will also be no mod. &lt;br /&gt;
&lt;br /&gt;
There doesn&#039;t seem to yet be a way around this. While llAllowInventoryDrop in a small add-on script might seem promising (and the change event could be set to delete the old .positions card), the problem remains that by then, a fresh positions card the user had dropped in would already be named .positions 1, an invalid file name. Because you can&#039;t rename objects inside a prim, you&#039;d have to then have your script delete that .positions 1 card as well, and then invite the user to drop his/her fresh .positions notecard in a second time, which would be very confusing. Or, using the LINKMSG feature, create a button that tells a script to delete the .positions notecard, and then invites the user to drop a new one in. But you&#039;d want that script to ask the user if s/he really knew what they were doing.&lt;br /&gt;
&lt;br /&gt;
Note as well that a no-mod prim prevents the option of allowing customers to purchase add-on modules for you -- unless provision is made for an llAllowInventoryDrop.}}&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) to set a memory limit on the ~memory script, use a line like this:&lt;br /&gt;
 {MEMORY} &amp;lt;&#039;&#039;MemoryLimit&#039;&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SEQUENCE NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEQUENCE | seqence-name | NOCHAT&amp;lt;br /&amp;gt;&lt;br /&gt;
use NOCHAT to inhibit chatting of poses&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MENU | menu-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set number &amp;amp; colors of balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POSE | pose-name | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
start a pose (chan &amp;amp; message are optional; message is whispered).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AVWAIT | 0 1 2 3 | chat-message-if-waiting&amp;lt;br /&amp;gt;&lt;br /&gt;
pause the entire sequence set until the balls listed are sat on (0 1 2 3 in this example)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
examples:&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for two people: AVWAIT | 0 1 | Waiting for both people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for three people: AVWAIT | 0 1 2| Waiting for three people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for four people: AVWAIT | 0 1 2 3| Waiting for four people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Only have one (1) AVWAIT line per sequence set, or you may get stack-heap blow-ups.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WAIT | wait-seconds&amp;lt;br /&amp;gt;&lt;br /&gt;
pause before executing next command&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GOTO | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
go to a label, to loop a portion of a sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LABEL | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set a target for GOTO&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REPEAT&amp;lt;br /&amp;gt;&lt;br /&gt;
repeat the whole sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SAY | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
say the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WHISPER | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
whisper the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SOUND | sound-name | 0 to 1.0&amp;lt;br /&amp;gt;&lt;br /&gt;
plays sound from  &#039;&#039;&#039;prim contents&#039;&#039;&#039; at volume 0 to maximum&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) Sets memory limit of the ~sequencer script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE: The chat messages can include the first names of participants using /0 for avatar on first ball, /1 for av on 2nd ball, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence scripting debugging ===&lt;br /&gt;
&lt;br /&gt;
(very advanced)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put any one of these are the very top of your sequences notecard, outside of any defined sequence, in order to turn on debugging for the sequences script:&lt;br /&gt;
&lt;br /&gt;
debug | 1&amp;lt;br /&amp;gt;&lt;br /&gt;
sequence start/stop&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 2&amp;lt;br /&amp;gt;&lt;br /&gt;
echo each command as executed&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 4&amp;lt;br /&amp;gt;&lt;br /&gt;
avatar hop on/off&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | -1&amp;lt;br /&amp;gt;&lt;br /&gt;
all debugging&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequences and Props ===&lt;br /&gt;
Yes, props will still work for items used in sequences.&lt;br /&gt;
&lt;br /&gt;
== TIPS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! ADJUST Beams |Finding the ADJUST beams hard to see? First, make sure that you have set world to noon. If you still find them difficult to edit, haul the ~ball out of your prim.&lt;br /&gt;
&lt;br /&gt;
Edit the ~ball script in it, and look for this part of the script in the listen event:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
        } else if (str == &amp;quot;ADJUST&amp;quot;) {&lt;br /&gt;
            llSetAlpha(0.2,ALL_SIDES);&lt;br /&gt;
            llSetText(&amp;quot;Adjust&amp;quot;,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
            llSetScale(&amp;lt;0.1,0.1,5.0&amp;gt;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
It&#039;s the llSetAlpha setting it to only .2 that makes it hard to see. Try it at .4, or .6, or higher.&lt;br /&gt;
&lt;br /&gt;
Save, take the ball into inventory, then delete the old one in the prim and replace it with your adjusted one.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Caveat|&lt;br /&gt;
Though all animations will work with MLPv2, not every single one you come across will work reliably. &lt;br /&gt;
&lt;br /&gt;
Some animations, if they happen to have been made by the creator in a certain way, will work as expected after certain other animations, but not after others. You&#039;ll get different results depending on which pose you ran last.&lt;br /&gt;
&lt;br /&gt;
The problem is animations that have their hip position the same in their T frame and first animation frame. They just won&#039;t work with MLP.&lt;br /&gt;
&lt;br /&gt;
Example: if you have 3 anims, 2 with hip positions set and one without, the hip position for the one without will be the hip position left over from whichever of the last two anims you used. It&#039;s the way SL animations work. If there&#039;s no change in any joint between the &amp;quot;T&amp;quot; frame (first frame in bvh file) and the first animation frame (second frame in bvh file), SL ignores that joint for the whole animation. And when all other animations are turned off, this means that these joints are left free to do whatever SL does with them. It leaves them as they were from the previous anim, or overrides them with SL builtin motions like typing, head movement, arm pointing while editing, etc.&lt;br /&gt;
&lt;br /&gt;
The values in the hip joint aren&#039;t important; what&#039;s important is that that they *be* different between T frame and 1st animation frame. For MLP, you want every joint in the animation to have been moved (except head, if you want it to be able to move with the mouse.)&lt;br /&gt;
&lt;br /&gt;
This problem can be avoided when making animations if you move the hip even just 1 degree, and normally the stomach 1 degree in the opposite direction.&lt;br /&gt;
&lt;br /&gt;
So sadly, in the course of things, odds are, you&#039;re just going to buy some animations that just ain&#039;t going to work with MLP. And there is no way of knowing in advance.&lt;br /&gt;
&lt;br /&gt;
When creating animations for MLP, Lear Cale highly recommends using priority 3.  This disallows the typing while chatting animation, but allows head movement (if the head joint is not moved in the beginning of the animation).  It also allows someone to create a priority 4 animation and run it to override MLP animation behavior (until the next pose is selected). }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Permission|&lt;br /&gt;
The ball user, upon first sitting on a ball, will be asked permission to animate them. S/he must say yes to yes, or they will end up just &amp;quot;hovering&amp;quot; on the poseball.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;permission pls&amp;quot; menu often gets hidden behind the MLP main menu (if you are the one who called up the menu.) You need to click the &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; to cycle through the menus on your screen to find the permissions prompt.  This is SL behaviour and there&#039;s no way to fix it, other than turning &amp;quot;redo&amp;quot; menu off in MLP.&lt;br /&gt;
&lt;br /&gt;
NOTE: in their great wisdom, SL modified the 1.20 viewer to show something other than &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; for this button.  Damn them.&lt;br /&gt;
&lt;br /&gt;
If you are wondering why permission must be asked, when normally sitting on something is taken as implying permission to be animated, it&#039;s because it&#039;s not actually the balls that are doing the animating -- it&#039;s a script in the MLP. Because one script is not allowed (for security reasons) to pass permission to another script, the scripts in the MLP itself can&#039;t take advantage of any permissions the poseballs have acquired.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animation Synchronization |Animations appear to start separately per ball once an avatar sits on it. Thus, they&#039;re not in sync.&lt;br /&gt;
&lt;br /&gt;
In fact, the animations are started at the same time. However, it takes time for the animations to get sent between SL and the client, so as a result they don&#039;t look synchronized.&lt;br /&gt;
&lt;br /&gt;
There is no simple feature in MLPV2 to automatically synchronize poses as such. You can manually synchronize by shifting to another pose and then shifting back again.  (Starting with &lt;br /&gt;
&lt;br /&gt;
There is no built-in feature to automatically synchronize, as there is with couples danceballs.  Prior to MLPV2.4z4, you can manually synchronize by changing to another pose and then back.  Starting with MLPV2.4, you can manually resynchronize by selecting the same pose again.&lt;br /&gt;
&lt;br /&gt;
There is an advanced feature of MLPV2 that you could use to get automatic periodic synchronization: Sequences.&lt;br /&gt;
&lt;br /&gt;
A sequence is simply a list of poses that MLPV2 will play at the touch of a button, with the option to repeat the sequence or a portion of the sequence. See the example sequence in the distribution.  You could set up a simple sequence that plays one pose, waits some time that&#039;s at least as long as the animations, and repeats, like this, which goes in .SEQUENCES notecard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SEQUENCE | snuggle-seq | NOCHAT&lt;br /&gt;
MENU | couples&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
AVWAIT | 0 1&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
WAIT | 30&lt;br /&gt;
REPEAT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Animations and balls|&lt;br /&gt;
Animations remain in the main MLP object; they are never placed in the poseballs. The animations are played from within the main MLP product; the poseball is just the delivery vehicle. Consequently, poseballs can be deleted or lost without the main product being affected. And, the poseballs themselves are just copies of the one inside the MLP product.&lt;br /&gt;
&lt;br /&gt;
A ball will commit suicide if left behind somewhere (the MLP object needs to be within 20 metres.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball text|&lt;br /&gt;
By default, both the poseball floating text and the right-click menu &#039;sit&#039; choice text is the word &amp;quot;LOVE&amp;quot;.  You can set these to whatever you want by editing the description of ~ball in object contents.  If you type in that field the word &amp;quot;none&amp;quot; (without the quotes), or just type in a space or two, there will be no floating text, and the right-click menu &#039;sit&#039; choice text becomes the system default of just &amp;quot;Sit Here&amp;quot; (for English viewers).}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Phantom Balls|&lt;br /&gt;
To make your balls rez as phantom, put an asterisk in the ~ball description line.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! More than 6 balls|&lt;br /&gt;
There are no plans to expand beyond 6 balls active at once. If this is totally necessary for you, you&#039;d be better off just going with a product that actually supports the number of avatars you want, such as XPOSE. You&#039;ll save yourself and your customers time and confusion by going with a product that was designed to handle larger numbers from the ground up.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Balls are buried in furniture|&lt;br /&gt;
Sometimes when you position the balls correctly for an animation, the balls end up buried in furniture.&lt;br /&gt;
&lt;br /&gt;
This is a property of the animation: the hip position in the animation is too high.  While it is in theory possible to fix this in MLP scripts, it would be hard to do, especially without using up lots of memory for poses.&lt;br /&gt;
&lt;br /&gt;
Most people know that when this happens they can select another pose first, jump on, and then change to the pose they want. Consequently, the simplest workaround is to make sure the first pose in each menu has all balls visible.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could ask the creator of the animation to adjust it, but the chances of them doing this just for your piece of furniture are not high.&lt;br /&gt;
&lt;br /&gt;
If someone stands up while on balls that are buried in furniture, they will get ejected from the furniture unceremoniously. This won&#039;t happen if they use the STOP button on the menu instead.&lt;br /&gt;
&lt;br /&gt;
Vesta Martynov suggests another workaround -- changing the offset that the ball is rezzed at. (Note that this will apply to all poses, not just the problem ones.) Her work-around is, before you start on a MLP product, to take the ball out and rez it on the ground. Edit the script in the ball, and search for this SitTarget line:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
The .01 there is the vertical offset. She changes it to something like this:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,-0.25&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
Save your changes, take the ball back into your inventory, and use it to replace the one that was inside the MLP.&lt;br /&gt;
&lt;br /&gt;
After you do this, all the balls and animations will be lifted, so you can go in and lower the animations, but you will no longer have balls sinking into your furniture.&lt;br /&gt;
&lt;br /&gt;
(Vesta Martynov, conversation in MLP group, 2009-06-11 19:46)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball scripts|&lt;br /&gt;
When updating your version of MLPv2 scripts, make sure you update the script in ~ball as well.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Changing the number of active Balls|&lt;br /&gt;
When going from a pose in a menu with 4 ball colors to a pose in a menu with 2 balls, the 2 balls are deleted. Assuming you&#039;re not using phantom balls, if the balls rez again (say you go back to a pose in a menu with 4 balls), the balls should bump anyone standing in their way out of the way. People wanting to use the newly re-rezzed balls and be animated by them will have to hop back on them. When changing the number of balls active, bear in mind that the number of animations in a POSE line must match the number of ball colors in the MENU line above. You can&#039;t mix poses with 2 anims and poses with 4 anims in the same menu section. This is not supported.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Default Pose | &lt;br /&gt;
You need to set position coordinates for the default pose. To do this, on the MLPV2 main menu click the &amp;quot;adj-default&amp;quot; button, then ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal. When you have finished, delete the .menuitems.zz-default notecard from the prim.&lt;br /&gt;
&lt;br /&gt;
If on the main blue menu you do not see a button called &amp;quot;adj-default&amp;quot;, do the following steps:&lt;br /&gt;
&lt;br /&gt;
1) Create a notecard with the file name of:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.Menuitems.zz-default&lt;br /&gt;
&lt;br /&gt;
Paste the following in as content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
// The &amp;quot;default&amp;quot; pose below is for adjusting &amp;quot;default&amp;quot; position.&lt;br /&gt;
// Since there are currently no other items in this menu, you can comment out the whole menu&amp;lt;br /&amp;gt;&lt;br /&gt;
// or simply delete this file when  you&#039;ve done that.&lt;br /&gt;
&lt;br /&gt;
MENU adj-default | ALL | BLUE | PINK | BLUE | PINK&lt;br /&gt;
POSE default | sit_ground | sit_ground | sit_ground | sit_ground&lt;br /&gt;
SWAP&lt;br /&gt;
ADJUST&lt;br /&gt;
SAVE Save Pos&lt;br /&gt;
DUMP Mem Dump&lt;br /&gt;
BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Tip! If the product you are making is only for 1 or 2 people, then you don&#039;t need to include all 4 balls that are listed in the menu above. For a solo product, you can just do instead:&lt;br /&gt;
&amp;lt;pre&amp;gt; MENU adj-default | ALL | BLUE&lt;br /&gt;
 POSE default | sit_ground&lt;br /&gt;
 ADJUST&lt;br /&gt;
 SAVE Save Pos&lt;br /&gt;
 DUMP Mem Dump&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the prim where you are working with MLPV2.&lt;br /&gt;
&lt;br /&gt;
2) Make sure the main menu notecard has a spare TOMENU slot to fit the adj-default choice into:&lt;br /&gt;
&lt;br /&gt;
 TOMENU -&lt;br /&gt;
&lt;br /&gt;
3) restart the MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
4) ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal.&lt;br /&gt;
&lt;br /&gt;
5) When you have finished, delete the .menuitems.zz-default notecard from the prim.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard Editing|&lt;br /&gt;
If the MLP prim contains many animations, access to a notecards contents can be PAINFULLY slow.&lt;br /&gt;
&lt;br /&gt;
First, make sure the prim is ready to let you open the notecard. Right-click on the notecard that you see in the contents folder. If you get a big menu of choices, rather than just the standard 4 of Open, Properties, Rename, Delete, then the prim isn&#039;t ready to let you open the notecard. You simply have to wait. Sometimes, you may need to wait up to 2 to 4 minutes. Yes, ridiculous -- but that&#039;s SL.&lt;br /&gt;
&lt;br /&gt;
Make all your changes before saving. Once you save, the notecard you have open may no longer be the notecard that is inside the prim (sic.) Once you have saved, even if you did so by accident out of habit, leave the notecard opened for a few seconds, then close it, and wait until the prim is ready to let you open it again if you need to do further edits.&lt;br /&gt;
&lt;br /&gt;
Note: as of summer 2008, the wait time for notecards to open from inside prim folder contents seems to be getting increasingly worse, and the system seems to be getting increasingly intolerant of allowing repeated saves on the same opened notecard. Thus, the advice to close and re-open after a save.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Modules -- multiple .menuitems and .positions notecards|&lt;br /&gt;
There can be several *.MENUITEMS* and *.POSITIONS* notecards in an MLP product (where &amp;quot;*&amp;quot; is any text that&#039;s allowed in a notecard name). This is to allow the addition of modules to the product. This allows you the option, for example, of letting customers purchase an MLP product for couples, and then coming back later to purchase an odd-on for 3Somes. Customers then pad home, edit the contents folder of their MLP product, plop in the add-on stuff, and restart their MLP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a module&#039;s menu appears as a button on the MLP product&#039;s main menu. For this to actually happen, you *must* provide a blank slot for it by supplying a TOMENU - parameter on the main menu.  Normally, there should be a bunch of these in the main menu.&lt;br /&gt;
&lt;br /&gt;
The add-on will consist of a .menuitems card, a .positions card, and the associated animations (with permissions set correctly.)&lt;br /&gt;
&lt;br /&gt;
For you as a vendor to make a module, you create a .MENUITEMS.xxx notecard, and a corresponding .POSITIONS.xxx notecard (where xxx can be anbything and is normally thought of as the name of the module.) If this module uses props, you also create a .PROPS.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
A *.MENUITEMS* card for a module should have no default or stand pose, etc. It normally has only the actual menus being added and the associated poses.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;MENU myAddOns&lt;br /&gt;
 TOMENU myAddOn1&lt;br /&gt;
 TOMENU myAddOn2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn1 | ALL | PINK | BLUE&lt;br /&gt;
 POSE Whoohoo! | Bump1 | Bump2&lt;br /&gt;
 POSE Zowee | Grind1 | Grind2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn2 | ALL | PINK | BLUE | PINK&lt;br /&gt;
 POSE Fubar | Dance1 | Dance2 | Dance3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test, you would then drop all associated notecards (.menuitems.xxx, .positions.xxx and .props.xxx if using) into the MLP product, along with the necessary animations and props, of course, and restart the MLP product. (Of course, if you were selling it as a separate add-on, you would after remove the above components from the main product, and package them separately.) Remember if you make any pose position adjustments during testing that the position information should be copied and pasted to the relevant .positions.xxx notecard -- not the main .positions notecard, because you are preparing a sold-separately module. Ditto for any prop adjustments, which go into the .props.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
Purchasers of an add-on need to always keep that .menuitems.xxx notecard in their product. However, the .positions.xxx and the .props.xxx notecards have, in a way, a limited lifespan. When you do a DUMP command, you copy / paste all that info into the notecard named simply .positions -- that is the main .positions notecard. Or, into .props notecard, in the case of a DUMPPROPS command. All the info that the subsidiary .positions.xxx and .props.xxx notecards hold is now amalgamated into the main notecard, and the subsidiary ones are no longer needed. They can be deleted. But to be clear, do not delete their corresponding .menuitems.xxx notecards.&lt;br /&gt;
&lt;br /&gt;
Multiple .positions notecards are read by the script in the same order they appear in object inventory.&lt;br /&gt;
&lt;br /&gt;
 Note: it is best to be using the MENUORDER directive when offering modules.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Sub-Menus|Can you add a module menu ie: .MENUITEMS.myposes and have it show as a top menu item with sub menus? Something that would give a My Poses button that when clicked would open a sub menu dialog with buttons for my poses 1, my poses 2 etc.&lt;br /&gt;
&lt;br /&gt;
Abolutely, and that&#039;s the best way to do it.&lt;br /&gt;
&lt;br /&gt;
Start your .MENUITEMS.mystuff with the parent menu. Fill it with &amp;quot;TOMENU&amp;quot; statements like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MENU WhizBangInc | ALL&lt;br /&gt;
TOMENU WBI-cuddles&lt;br /&gt;
TOMENU WBI-fun&lt;br /&gt;
TOMENU WBI-freaky&lt;br /&gt;
TOMENU WBI-illegalin42states&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Options Menu|&lt;br /&gt;
By tradition, most of the common functionality command buttons are stored under a MENU called &amp;quot;OPTIONS&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Such commands include ADJUST, SAVE, DUMP, Show/Hide (aka INVISIBLE), MenuUsers, BallUsers, Chat, Dump Props, Save Prop, etc.&lt;br /&gt;
&lt;br /&gt;
As well, the z commands for height adjustment were traditionally offered there as well.&lt;br /&gt;
&lt;br /&gt;
With the rapidly-increasing number of functions available within MLPv2, however, the OPTIONS submenu is becoming very crowded.&lt;br /&gt;
&lt;br /&gt;
Consequently, consider taking all the z height adjustment options out from under OPTIONS and put them in a sub-menu like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU HEIGHT | ALL&lt;br /&gt;
 Z+1 //adjust Z = height offset in cm - use any integer to set the step size&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in the OPTIONS menu, just make this button linking to the HEIGHT submenu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU HEIGHT}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Positions Notecard tidying|&lt;br /&gt;
The lines in the .positions notecard look like this when copied and pasted in directly from chat:&lt;br /&gt;
&lt;br /&gt;
[7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e: {Lie&amp;amp;Hold} &amp;lt;-0.413,0.130,0.245&amp;gt; &amp;lt;1.0,-9.0,-0.9&amp;gt; &amp;lt;-0.539,0.207,0.155&amp;gt; &amp;lt;-0.1,-8.9,-1.1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The extraneous chatter before the {LieHold1} parameter in the curly brackets (aka braces) is ignored by the scripts, so there is no need to delete it.&lt;br /&gt;
&lt;br /&gt;
Still, if you as an MLP professional wish cleaner, easier to read content (which is a boon for easier maintenance and troubleshooting), then copy the contents of the .positions card in question into a simple text programme (such as Notepad on a Windows PC), and using the example above, you would search for:&lt;br /&gt;
&lt;br /&gt;
 [7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e:  [including the final space at the end of it]&lt;br /&gt;
&lt;br /&gt;
and just replace it with nothing, and then paste the cleaned up text back into the .positions card.&lt;br /&gt;
&lt;br /&gt;
The cleaned up text then looks like this.&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You may wish to also to SORT the positions in alpha order to make it easier to find them.&lt;br /&gt;
&lt;br /&gt;
So that instead of:&lt;br /&gt;
&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can do this sorting in seconds by copying &amp;amp; pasting the (cleaned-up position chatter) into something such as Microsoft Word, or a spreadsheet, and telling it to sort, and then copying &amp;amp; pasting the sorted positions back into the .positions notecard. (This really works best though if you have stripped the initial chatter info from them.) }}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard reading order|&lt;br /&gt;
Q: I have a question about animation packs. I know the readme notecard says that the scripts read the notecards in alpha order. If I were to name the notecards as A, B, and C would the buttons on the menu then be in that order as well? I&#039;m picky--I like my buttons in a certain order.&lt;br /&gt;
&lt;br /&gt;
A: Yes.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Portable use of an MLPv2 product|&lt;br /&gt;
Attach the MLPv2 object to your HUD. You can use its default shape and color for a clickable bar on one of the edges of your screen (to move HUD position: Right-click and Edit it and use the arrows). While in edit mode, you can also edit color/transparency/size/position.&lt;br /&gt;
&lt;br /&gt;
Note that the balls will appear relative to the initial MLPv2 position. Adjust the height offset with a (Z) command.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Props|&lt;br /&gt;
Props are objects the MLP product will rez for poses.  When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear within 3 minutes.&lt;br /&gt;
&lt;br /&gt;
Props support starts with MLPV2.1.&lt;br /&gt;
&lt;br /&gt;
To add a prop, edit a .PROPS notecard or add a new one (named .props.xxx where xxx is the name of the module, for a modular config).  Copy the following example line and paste it into your .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;| mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then:&amp;lt;br /&amp;gt;&lt;br /&gt;
*Replace &amp;quot;mypose&amp;quot; with the pose name;&lt;br /&gt;
*Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars;&lt;br /&gt;
*Add the &amp;quot;~prop&amp;quot; script (from inside the &amp;quot;~pillow&amp;quot; object that comes with the standard distribution) to your prop object, and drop your prop object into the MLP prim&#039;s inventory.  The prop and everything in it will need to be copiable for next owner;&lt;br /&gt;
*Make sure your menu has the SAVEPROP and DUMPPROPS command on it.&lt;br /&gt;
&lt;br /&gt;
Restart the MLP, and then select the pose.  The prop should appear.  It might be underneath the MLP object, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time so that it doesn&#039;t rez in the ground!&lt;br /&gt;
&lt;br /&gt;
Move the prop to where you want it, and use MLP menu command &amp;quot;SAVEPROP&amp;quot;.  To make the change permanent, select the chat information that is printed out on your screen (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .props.xxx file.  Or, do all your props and use DUMPPROPS.  (This procedure is similar to that for saving positions in .positions.xxx notecards.)&lt;br /&gt;
&lt;br /&gt;
To get MLP to reread .props.xxx files, restart the product (which resets positions as well as props).&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved as two separate steps. If you adjust a pose and its prop, you need to save both pose position and prop.&lt;br /&gt;
&lt;br /&gt;
Tip: We are all so used to hitting the button to save positions. If you find that a prop position isn&#039;t saving, check your chat history to make sure you didn&#039;t hit the save position button instead of save prop just out of habit!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hand-held Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;For props to be used as hand-held items, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Number of Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
For any pose, you can have at most one prop. If you need more than one prop to rez, you&#039;ll have to link the items so that they can be treated by MLP as one object. Alternatively, if you have a scripter friend to help you, you might try having the rezzed object rez another object from its contents. Your scripter friend would need to make the rezzed child object listen for the same die command as the main object that was rezzed.&lt;br /&gt;
&lt;br /&gt;
Or, you *might* perhaps try the rezzed object as a coalesced object, making sure that each item has in it a script (created custom for you by a scripter friend) so they can die when required to -- experiment with that somewhere in the open at first in case it goes all over the place.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! STOP in every menu|&lt;br /&gt;
STOP and BACK buttons should be on every menu.&lt;br /&gt;
&lt;br /&gt;
Why STOP on every menu? It solves so many problems. For example, if you use STOP, you don&#039;t get ejected like a James Bond villain if the poseball happens to be buried in the furniture. After moving or rotating a bed, STOP resets the position (Lear put in code to do this automatically, but there&#039;s no event that tells you when rotation stops.) And no doubt, SL and MLPV2 have bugs, and I&#039;ve seen funky and unrepeatable oddness that STOP fixes in a jiffy. Plus it makes the poseballs go away.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via linked msgs|&lt;br /&gt;
If you just want the MLP menu to come up from another script in the object (same prim or different one), simply do what the ~touch_passer script does (the llMessageLinked() call). If your script is in the same prim as MLP scripts, change LINK_ALL_OTHERS to LINK_THIS.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via chat|MLP listens for menu responses on this channel, minus one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Return a channel number that&#039;s based on the prim&#039;s key -- unique per object&lt;br /&gt;
integer channel() {&lt;br /&gt;
return (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),-4,-1));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the key here is the key of the MLP object.&lt;br /&gt;
&lt;br /&gt;
Oh, warning: it also checks to see if the chat came from the same user as whoever used the menu recently. If they don&#039;t match, it sends a menu (dialog) -- in this case, to your object, which won&#039;t do anything. So, I suspect that this will work only if you keep users from getting access to the MLPV2 menu directly.}}&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
When the MLP is ready for use, it sends out a linked message on channel -11003 saying &amp;quot;READY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
llMessageLinked(LINK_SET, -11003, &amp;quot;READY&amp;quot;, NullKey);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footnotes}}&lt;br /&gt;
&lt;br /&gt;
== Illegal Pirated Animation Kit FYI ==&lt;br /&gt;
http://wiki.secondlife.com/w/index.php?title=62_Animation_MLP_Set&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;free&amp;quot; status of Sexgen animation kit released October 2011 by Stroker Serpentine, see here: https://wiki.secondlife.com/wiki/Stroker_Serpentine_Sexgen_Animation_Set&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Users_Reference&amp;diff=1187487</id>
		<title>MLPV2 Users Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Users_Reference&amp;diff=1187487"/>
		<updated>2014-02-03T01:43:06Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: /* Chat button */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{multi-lang}}&lt;br /&gt;
{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This document describes what standard MLPV2 menu buttons do.  Note that this applies only if the builder used the standard OPTIONS menu without modifications and followed common conventions.&lt;br /&gt;
&lt;br /&gt;
= Buttons found in pose menus =&lt;br /&gt;
== STAND button ==&lt;br /&gt;
&#039;&#039;&#039;STAND&#039;&#039;&#039; brings up a standing pose, suitable for use when beginning or quitting.&lt;br /&gt;
&lt;br /&gt;
== STOP button ==&lt;br /&gt;
&#039;&#039;&#039;STOP&#039;&#039;&#039; causes the STAND pose to happen momentarily, and then unseats all avatars and deletes the poseballs.  It also shuts down any scripts that are not needed while the product isn&#039;t active.  The product remains ready for immediate use.&lt;br /&gt;
&lt;br /&gt;
== SWAP button ==&lt;br /&gt;
&#039;&#039;&#039;SWAP&#039;&#039;&#039; exchanges the participants&#039; roles in the pose.  It has no effect with solo poses.  For couples, it exchanges the two participants.  For poses with more than two poseballs, the default is to swap the first two, but more sophisticated swaps can be configured in the notecards.&lt;br /&gt;
&lt;br /&gt;
== BACK button ==&lt;br /&gt;
&#039;&#039;&#039;BACK&#039;&#039;&#039; returns to the previous menu in the menu hierarchy.&lt;br /&gt;
&lt;br /&gt;
= OPTIONS menu =&lt;br /&gt;
== Chat button ==&lt;br /&gt;
&#039;&#039;&#039;Chat&#039;&#039;&#039; turns menu action chatting on and off.  Typically, MLPV2 chats the pose name when a pose is selected.  This button alternately enables and disables that, along with other chat messages that MLPV2 issues. That means that if you happen to be toggling options such as &amp;quot;MenuUsers&amp;quot; and &amp;quot;BallUsers&amp;quot;, which normally chat to you what setting you have just selected... that means that you won&#039;t hear that. You need to have Chat on to hear what setting you have just selected.&lt;br /&gt;
&lt;br /&gt;
== Adjust Pos button ==&lt;br /&gt;
&#039;&#039;&#039;Adjust Pos&#039;&#039;&#039; turns pose adjustment mode on or off.&lt;br /&gt;
&lt;br /&gt;
Normally, adjustment mode is off.&lt;br /&gt;
&lt;br /&gt;
When adjustment mode is on, poseballs that are sat upon turn into semi-transparent beams that are easy to select and reposition.&lt;br /&gt;
&lt;br /&gt;
In adjustment mode, whenever a new pose is selected, the current pose&#039;s position (including props, as of MLPV2.4TBD ) is saved before starting the new pose.  Selecting the &#039;&#039;same&#039;&#039; pose abandons any changes to the current pose and returns it to the last saved position.&lt;br /&gt;
&lt;br /&gt;
== Save Pos button ==&lt;br /&gt;
&lt;br /&gt;
This button saves the curren&#039;t pose&#039;s position to MLPV2 memory (but not to notecards).&lt;br /&gt;
&lt;br /&gt;
== Dump Pos button ==&lt;br /&gt;
&lt;br /&gt;
This button dumps all pose positions from MLPV2 memory, suitable for saving to .POSITIONS notecards.&lt;br /&gt;
&lt;br /&gt;
== Save Prop button ==&lt;br /&gt;
&lt;br /&gt;
This button saves the curren&#039;t pose&#039;s position to MLPV2 memory (but not to notecards).&lt;br /&gt;
&lt;br /&gt;
== Dump Prop button ==&lt;br /&gt;
&lt;br /&gt;
This button dumps all prop positions from MLPV2 memory, suitable for saving to .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
== Ball Users button ==&lt;br /&gt;
&lt;br /&gt;
This button cycles through three settings for who can use the poseballs&lt;br /&gt;
&lt;br /&gt;
* OWNER - only the owner can sit&lt;br /&gt;
* GROUP - avatars other than the owner must wear group tag to sit (matching the MLPV2 object&#039;s group)&lt;br /&gt;
* ALL - any avatar can sit&lt;br /&gt;
&lt;br /&gt;
== Show/Hide button ==&lt;br /&gt;
&lt;br /&gt;
This buttons alternately shows and hides the MLPV2 prim.  It does not affect other prims.&lt;br /&gt;
&lt;br /&gt;
== Menu Users button ==&lt;br /&gt;
&lt;br /&gt;
This button cycles through three settings for who can use the MLPV2 menus:&lt;br /&gt;
&lt;br /&gt;
* OWNER - only the owner can use the menus&lt;br /&gt;
* GROUP - avatars other than the owner must wear group tag to use the menus (matching the MLPV2 object&#039;s group)&lt;br /&gt;
* ALL - any avatar can use the menus&lt;br /&gt;
&lt;br /&gt;
However, specific menus may be further restricted to OWNER or GROUP based on notecard configuration, regardless of this setting.&lt;br /&gt;
&lt;br /&gt;
== Height button ==&lt;br /&gt;
&lt;br /&gt;
This button presents a menu for adjusting the height of all poses.&lt;br /&gt;
&lt;br /&gt;
= Shutdown... Menu =&lt;br /&gt;
&lt;br /&gt;
Typically, only the owner can use this menu.  However, for rental land, it may be wise to set this menu to GROUP (in the .MENUITEMS notecard).&lt;br /&gt;
&lt;br /&gt;
== Pos Reset button ==&lt;br /&gt;
&lt;br /&gt;
This button causes MLPV2 to re-read the .POSITIONS and .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
== Menu Reset button ==&lt;br /&gt;
&lt;br /&gt;
This button causes MLPV2 to re-read the .MENUITEMS notecards.&lt;br /&gt;
&lt;br /&gt;
== Restart button ==&lt;br /&gt;
&lt;br /&gt;
This button does a full restart of MLPV2, including re-reading .MENUITEMS, .POSITIONS, and .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
== Shutdown! button ==&lt;br /&gt;
&lt;br /&gt;
This button stops all MLPV2 scripts except one which remains running to allow restart on owner-click.&lt;br /&gt;
Only the owner can use this button, regardless of other settings, because only the owner can click to restart MLPV2.&lt;br /&gt;
&lt;br /&gt;
= Sequence control buttons =&lt;br /&gt;
These buttons are commonly found in menus that contain sequences.  (Sequences are series of poses with optional sounds and chat.)&lt;br /&gt;
&lt;br /&gt;
== PAUSE button ==&lt;br /&gt;
The sequence pauses, staying in the current pose.&lt;br /&gt;
&lt;br /&gt;
== RESUME button ==&lt;br /&gt;
The sequence resumes with the next pose.  If the sequence was not paused, this advances to the next pose rather than waiting for the timeout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1187304</id>
		<title>MLPV2 Reference Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;diff=1187304"/>
		<updated>2014-01-28T04:41:49Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Chaz updated AVWAIT directions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
== .MENUITEMS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
Menu notecards create menus.&lt;br /&gt;
&lt;br /&gt;
When MLP2 starts up, it reads all *.MENUITEMS* notecards (&amp;quot;*&amp;quot; can be anything), in the same order as they&#039;re shown in object contents.  You can have as many MENUITEMS notecards as you wish, or just one.  MLP2 essentially reads all MENUITEMS notecards as though they&#039;ve been concatenated into one big file.&lt;br /&gt;
&lt;br /&gt;
The first two things (other than comments) MLPV2 reads from the first *.MENUITEMS* notecard MUST be two POSE statements, first for &amp;quot;default&amp;quot; and second for &amp;quot;stand&amp;quot; -- even if you don&#039;t use the STAND button anywhere.  Note that these must not be repeated in subsequent *.MENUITEMS* notecards.  See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.)&lt;br /&gt;
&lt;br /&gt;
After the first two POSE statements, it expects directives and then MENU commands to build menus.&lt;br /&gt;
&lt;br /&gt;
An example, to be clear:&lt;br /&gt;
&lt;br /&gt;
 POSE stand | stand | stand  | stand | stand | stand | stand &lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground&lt;br /&gt;
&lt;br /&gt;
MENUORDER &lt;br /&gt;
// NORELOAD &lt;br /&gt;
&lt;br /&gt;
MENU MAIN MENU | ALL&lt;br /&gt;
(etc)&lt;br /&gt;
&lt;br /&gt;
Don&#039;t insert anything else at the top of the main MENUITEMS notecard, or you may experience strange errors such as &amp;quot;No Unused TOMENU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first MENU created is the main menu, which a user gets on touching the MLP2 object.  The remaining menus are reached via buttons configured using TOMENU.&lt;br /&gt;
&lt;br /&gt;
There are several built-in commands that you use to build your menu, as well as several options.&lt;br /&gt;
&lt;br /&gt;
Most commands cause buttons to be added to menus.  In this case, the command format is usually like this:&lt;br /&gt;
&lt;br /&gt;
 COMMAND &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;&#039;ButtonLabel&#039;&#039; with whatever you want to appear as the button label.  In many cases, this is optional, and the button label will match the command name.  (Whenever something in a command format is in &#039;&#039;italics&#039;&#039;, it means that you replace that text with what you want.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== COMMENTS ===&lt;br /&gt;
Comments in MENUITEMS notecards must be preceded by &amp;quot;//&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Any subsequent text on that line is ignored by the scripts.&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
 //all this text is ignored&lt;br /&gt;
&lt;br /&gt;
Example 2:&lt;br /&gt;
 STOP // STOP is read by the scripts; but this part of the line is ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DEFAULT / STAND ===&lt;br /&gt;
&lt;br /&gt;
Place these are the very top of the first *.MENUITEMS* notecard, which is usually the one named &amp;quot;.MENUITEMS&amp;quot;. (You may insert commented lines before this; commented lines don&#039;t count.)&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 POSE stand | stand | stand  | stand  //pose before starting and when stopping&lt;br /&gt;
 POSE default | sit_ground | sit_ground | sit_ground //default pose when no animation entered&lt;br /&gt;
&lt;br /&gt;
You may use other animations; the ones in the example are standard ones built into the SL, and don&#039;t need to appear in object inventory. {{Footnote|For a list of other built-in animations, see here: [https://wiki.secondlife.com/wiki/Internal_Animations#User-playable_animations].}}&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_Default_Pose| the default pose tip]] for help on setting coordinates for the default pose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DIRECTIVES ===&lt;br /&gt;
&lt;br /&gt;
Directives affect the overall behavior of MLP2.  It usually doesn&#039;t matter where in the .MENUITEMS* files they are, but by convention, they appear after the default and stand poses.  Directives do not cause a menu button to appear.&lt;br /&gt;
&lt;br /&gt;
All are case-sensitive and so therefore you must use them in upper case as shown here.&lt;br /&gt;
&lt;br /&gt;
If you want a directive to be acted upon, type its name into your menu card. If you don&#039;t, either just leave it out, or comment it out.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOBACK || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
Automatically inserts BACK before any MORE--&amp;gt; automatically added by the AUTOMORE feature (see below).  This does not add a BACK to every menu page, only those with &amp;quot;MORE--&amp;gt;&amp;quot; inserted by the AUTOMORE feature.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| AUTOMORE || &lt;br /&gt;
&lt;br /&gt;
Automatically inserts &amp;quot;More--&amp;gt;&amp;quot; button for menus with more than 12 buttons *except* for the main menu. If you need a &amp;quot;More--&amp;gt;&amp;quot; on the Main Menu, you must add one manually.&lt;br /&gt;
&lt;br /&gt;
You would add a manual one like this:&lt;br /&gt;
&lt;br /&gt;
 MORE More--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;MORE&amp;quot; is the command; &amp;quot;More--&amp;gt;&amp;quot; is the button label.&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
|| MEMORY || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.5)&lt;br /&gt;
This directive changes the maximum memory limit for the ~menu script.&lt;br /&gt;
&lt;br /&gt;
 MEMORY &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets the limit to &#039;&#039;MemoryLimit&#039;&#039; in Byte on the ~menu script if encoutered in .MENUITEMS notecards.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;MEMORY|&#039;&#039;MemoryLimit&#039;&#039;|&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~props script in .PROPS notecards.&lt;br /&gt;
&lt;br /&gt;
 MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sets memory limit of ~swap script in .SWAP notecards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENUORDER || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This directive causes all menu buttons to appear in menus in the same order as they appear in the .MENUITEMS* files.  If absent, menus are in the group-by-3-backwards order typical of SL menus, like original MLP.  If present *anywhere* in any of the .MENUITEMS notecards, it affects all menus regardless of what .MENUITEM notecard they are in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| NORELOAD || &lt;br /&gt;
&lt;br /&gt;
This directive causes MLP2 not to do a menu reset when rezzed.  MLPV2.1 does not autoreload on rez, and this directive has no effect with MLPV2.1.  (Automatic reset on rez was added to fix a problem where multiple copies of the same MLP object responded to each others&#039; menus.  A better fix was found in MLPV2.1.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MENU COMMANDS ===&lt;br /&gt;
&lt;br /&gt;
These will cause buttons to appear on menus.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ADJUST|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to make the balls turn into long, translucent beams for easy editing to manoeuvre them into their proper positions for each pose.&lt;br /&gt;
&lt;br /&gt;
 ADJUST &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;AdjustPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_ADJUST_Beams| tip on adjusting beams.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| BACK || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button labelled &amp;quot;BACK&amp;quot; that, when pressed, displays the menu one level up in the menu hierarchy.&lt;br /&gt;
&lt;br /&gt;
 BACK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
If you use the AUTOMORE and AUTOBACK, you will only need to manually enter this on the last page of a submenu (including the only page of a menu with 12 or fewer buttons).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||BALLUSERS || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Creates a button to cycle through the access levels governing who can sit on the poseballs.&lt;br /&gt;
&lt;br /&gt;
The levels are OWNER, GROUP and ALL&lt;br /&gt;
&lt;br /&gt;
 BALLUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;Level&#039;&#039; is ALL, GROUP, or OWNER.&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with the same active group tag as the MLP object can use the balls. The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHAT|| &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle on/off whether the MLP object will chat the name of each pose as it is selected.&lt;br /&gt;
&lt;br /&gt;
 CHAT &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;OnOff&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.&lt;br /&gt;
&#039;&#039;OnOff&#039;&#039; is the default, either ON or OFF.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||CHECK || &lt;br /&gt;
&lt;br /&gt;
Adds a button that find poses with no positions and vice versa.&lt;br /&gt;
&lt;br /&gt;
 CHECK &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;CheckPos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note!&#039;&#039;&#039; This will reload all .POSITIONS.* files, so first backup any positions that have been saved using SAVEPOS but not manually entered into a *.POSITIONS* notecard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| DUMP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to dump the saved pose positions, suitable for saving into *.POSITIONS.* notecards.&lt;br /&gt;
&lt;br /&gt;
 DUMP &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is the optional button label.  Typically, it&#039;s &amp;quot;Dump Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The positions are chatted to owner only.  Positions for all poses are dumped.  The user may then copy/paste this into *.POSITIONS* notecards so that the positions will be retained across a position reset, or a full restart or shutdown.&lt;br /&gt;
&lt;br /&gt;
NOTE! *.POSITIONS* notecards should be released to customers with full permissions, to allow them to save positions that they&#039;ve adjusted to fit their avatars.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.POSITIONS* notecards, the end user may copy/paste all the info into the main .POSITIONS notecard, and delete all the other *.POSITIONS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .POSITIONS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (DUMPPROPS) || &lt;br /&gt;
&lt;br /&gt;
(MLPV2.1)&lt;br /&gt;
To add a button that will save prop configurations, use the following line:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Dump Props | 0,-4,1,DUMPPROPS    // dump all prop configs&lt;br /&gt;
&lt;br /&gt;
This adds a button named &amp;quot;Dump Props&amp;quot; (or whatever you prefer) that causes all the prop positions to be printed to the screen. They are visible to the MLP product owner only. The user may then copy/paste this text to *.PROPS* notecards for permanent storage.&lt;br /&gt;
&lt;br /&gt;
If the MLP product has several *.PROPS* notecards, the end user may copy/paste all the info into the main .PROPS notecard, and delete all the other *.PROPS* notecards in the prim.  They are no longer needed; all their information has now been amalgamated into .PROPS.  However, builders may want to keep modules separate; they can do so by manually sorting the entries into their respective *.PROPS* files.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| HIDE || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become invisible. Not many MLP product makers bother with offering this button. The opposite is the SHOW command.&lt;br /&gt;
&lt;br /&gt;
 HIDE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| INVISIBLE || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to toggle visibility for the prim that the MLP scripts are in.  Note: this does not apply to the balls or any other prims, even linked ones.&lt;br /&gt;
&lt;br /&gt;
 INVISIBLE &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| LINKMSG  || &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button that will send a specified link message to other scripts in the object when the button is pressed.  This is useful for adding scripted features to MLP2 without having to modify MLP2 scripts.&lt;br /&gt;
&lt;br /&gt;
 LINKMSG &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;menu&#039;&#039;,&#039;&#039;primnum&#039;&#039;,&#039;&#039;lm-num-arg&#039;&#039;,&#039;&#039;lm-str-arg&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Parameter&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;ButtonLabel&#039;&#039; || What you want the button to be called on the menu.&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;menu&#039;&#039; || Set to 1 if the script receiving the button will pop up a menu.  It causes MLP2 not to repost its menu, to avoid menus stacking up.  Set to 0 otherwise -- (note: this doesn&#039;t inhibit MLP2&#039;s redo menu feature.)&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;primnum&#039;&#039; || &lt;br /&gt;
Set to -1 to send the link message to all prims&lt;br /&gt;
&lt;br /&gt;
Set to -4 for just the prim the script is actually in&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-num-arg&#039;&#039; || &#039;num&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|| &#039;&#039;lm-str-arg&#039;&#039; || &#039;str&#039; arg for llMessageLinked()&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The menu user&#039;s UUID key is passed automatically as the &#039;key&#039; argument for llMessageLinked().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| MENU || &lt;br /&gt;
&lt;br /&gt;
Creates a menu that can be reached from other menus.  The first MENU configured becomes the main menu, which the user gets on &#039;touch&#039;.&lt;br /&gt;
&lt;br /&gt;
A menu&#039;s buttons are configured following the MENU statement.&lt;br /&gt;
&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039;&lt;br /&gt;
or&lt;br /&gt;
 MENU &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;who&#039;&#039; | &#039;&#039;ballcolors&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This creates a menu named &#039;&#039;name1&#039;&#039;, and a button named the same on the main menu.&lt;br /&gt;
&lt;br /&gt;
Those who can access it are specified by &#039;&#039;who&#039;&#039;, one of the following:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Keyword&lt;br /&gt;
!Explanation&lt;br /&gt;
|-&lt;br /&gt;
|| ALL || Anyone can use it&lt;br /&gt;
|-&lt;br /&gt;
|| GROUP || Only those who are wearing a group tag that matches the object&#039;s group can use it&lt;br /&gt;
|-&lt;br /&gt;
|| OWNER || Only the object owner can use it&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ballcolors&#039;&#039; is a list of zero to four ball color names, separated by vertical bars (&amp;quot;|&amp;quot;).  The color name MUST be in UPPER-CASE. The following ball color names are supported:&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!Version&lt;br /&gt;
!Colors&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2 || BLUE PINK&lt;br /&gt;
|-&lt;br /&gt;
|| MLPV2.1 || PINK, BLUE, PINK2, BLUE2, GREEN, MAGENTA, RED, ORANGE, WHITE, BLACK, YELLOW, CYAN, RED2, TEAL, GREEN2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See under Menu Parameters section for greater details.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 MENU MyMenu | ALL | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
Creates a menu named Mymenu.  Poses in this menu will have 2 balls, a pink and a blue one.&lt;br /&gt;
&lt;br /&gt;
Subsequent menu configuration lines add buttons to this menu, until the next MENU command.  There is a limit of 12 buttons to a menu, unless AUTOMORE is used.&lt;br /&gt;
&lt;br /&gt;
Note that, unless you use the MENUORDER directive, these menu items will be offered to users in the usual SL ass-backwards-by-three manner.&lt;br /&gt;
&lt;br /&gt;
How do we get a button to get to this menu?  There are two ways.&lt;br /&gt;
&lt;br /&gt;
The first way is the same as with original MLP: use the TOMENU command to create a button to get to this menu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button label must match the menu name.  Menu names are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
The second way requires &amp;quot;TOMENU -&amp;quot; configuration lines in the main menu.  For any MENU statement where no preceeding TOMENU matches the menu name, a menu button is automatically added to the main menu.  (For this to work, the main menu must be filled with &amp;quot;TOMENU -&amp;quot; statements, which create blank spaces for this purpose.  When MONO comes out and memory is less of an issue, we will try to make this simpler!)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||MENUUSERS || &lt;br /&gt;
&lt;br /&gt;
Adds a button that cycles through the access levels governing who can use the menu.&lt;br /&gt;
&lt;br /&gt;
 MENUUSERS &#039;&#039;ButtonLabel&#039;&#039; | &#039;&#039;Level&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Level&#039;&#039; specifies the default, and must be one of the following: OWNER, GROUP, or ALL&lt;br /&gt;
&lt;br /&gt;
If it is set to GROUP, avatars with active group tag amtching the MLP object&#039;s group can use the main menu. (You can restrict access to sub-menus on a per menu basis. See MENU above for more info.) The group for the MLPv2 product can set by right-clicking the product and selecting Edit, More &amp;gt;&amp;gt; General tab - Group: Set.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| OFF || &lt;br /&gt;
&lt;br /&gt;
Adds a button to turn the MLP system off.&lt;br /&gt;
&lt;br /&gt;
 OFF &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Shutdown!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When turned off, MLP deletes any balls, turns off all the scripts except for one that will turn it back on again when the owner touches it.&lt;br /&gt;
&lt;br /&gt;
This reduces any contribution the MLP might be making to lag.&lt;br /&gt;
&lt;br /&gt;
Any saved poses or prop configurations that have not been saved to *.POSITIONS* and *.PROPS* files are irrevocably lost.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| POSE  || &lt;br /&gt;
&lt;br /&gt;
Adds a button for a pose.&lt;br /&gt;
&lt;br /&gt;
 POSE &#039;&#039;PoseName&#039;&#039; | &#039;&#039;AnimList&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PoseName&#039;&#039; is the button label, and also the pose name (found in the *.POSITIONS* and *.PROPS* notecards).&lt;br /&gt;
&#039;&#039;AnimList&#039;&#039; is a list of animation names, separated by vertical bars (&amp;quot;|&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
The number of animations must match the number of ball colors listed in the corresponding MENU configuration.&lt;br /&gt;
That is, if the MENU has 3 poseballs, you must provide 3 animation names.&lt;br /&gt;
&lt;br /&gt;
The animations are applied to the balls specified, in order.  That is, if the ball colors are &amp;quot;PINK BLUE PINK&amp;quot;, three animations should be listed.  The first applies to the first pink ball, the second to the blue ball, and the third animation applies to the third ball, which is pink. (See also &amp;quot;Ball Colors&amp;quot; option below for more information.)&lt;br /&gt;
&lt;br /&gt;
The ball positions are specified in a .POSITIONS* file, discussed below.  If there is no .POSITIONS entry for a pose, the default pose is used.  It&#039;s a good idea to always set up the default pose first for a new MLP product, to avoid balls rezzing underground or in other inconvenient locations.&lt;br /&gt;
&lt;br /&gt;
Each animation name must have a corresponding animation in the object&#039;s contents, unless it is a built-in animation.  Yyou cannot refer to animations by UUID.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| REDO ||&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Adds a button to enable/disable popping the menu back up after making a selection.&lt;br /&gt;
&lt;br /&gt;
 REDO &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
By default, when a user makes a choice on an MLP menu, the menu re-presents itself for further use.&lt;br /&gt;
&lt;br /&gt;
If you offer this command button to users, and they click it, it will toggle this feature off and on.&lt;br /&gt;
&lt;br /&gt;
Few MLP product makers offer this button to users, because turning off the menu coming back can create the perception that something is broken.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|| RELOAD || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.POSITIONS* and *.PROPS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RELOAD &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This button is useful after changing *.POSITIONS* or *.PROPS* notecards, to verify that you did what you intended. It&#039;s considerably faster than a complete reset since the menu isn&#039;t reread.&lt;br /&gt;
&lt;br /&gt;
General rule: if you changed a .MENUITEMS card, do Menu reset. If you changed a .POSITIONS or .PROPS card, do Pos Reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESET || &lt;br /&gt;
&lt;br /&gt;
Adds a button to reload *.MENUITEMS* notecards.&lt;br /&gt;
&lt;br /&gt;
 RESET &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reset Menu&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In addition to re-reading the notecards, it resets most of the MLPV2 scripts.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| RESTART || &lt;br /&gt;
&lt;br /&gt;
Adds a button to do what both RESET and RELOAD do, combined.&lt;br /&gt;
&lt;br /&gt;
 RESTART &#039;&#039;ButtonLabel&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonLabel&#039;&#039; is optional.  Typically, it&#039;s &amp;quot;Reload&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
RESTART is therefore the most thorough command to use for a complete reboot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SAVE || &lt;br /&gt;
&lt;br /&gt;
Adds a button to save ball positions for the current pose.&lt;br /&gt;
&lt;br /&gt;
 SAVE &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is typically &amp;quot;Save Pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Immediately after adjusting a pose, always, &#039;&#039;&#039;&#039;&#039;ALWAYS&#039;&#039;&#039;&#039;&#039; click this button! You will no doubt, like all of us, lose a few adjustments that you make when you first start out with MLP before this gets scarred into your habits.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caution!&#039;&#039;&#039; This is not permanent.  Anything that causes the *.POSITIONS* cards to be re-read will wipe these settings out from script memory. A pose is permanent only if it&#039;s saved in a *.POSITIONS* card.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: the poseballs cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| (SAVEPROP) || &lt;br /&gt;
&lt;br /&gt;
To add a button to save the prop location for the current pose, use the following command:&lt;br /&gt;
&lt;br /&gt;
 LINKMSG Save Prop | 0,-4,1,SAVEPROP      // save position/rotation for a prop&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;Save Prop&amp;quot; is the button name (and can be whatever you choose).&lt;br /&gt;
&lt;br /&gt;
You use this button after you have adjusted a prop. This stores information about the position, etc, to script memory.&lt;br /&gt;
&lt;br /&gt;
This information will also be printed to the screen (only the owner can see it.) This information should be copied to the .PROPS notecard for permanent storage. You can either do this right on the spot, or arrange and save a whole bunch of prop positions, and then use the DUMPPROPS command to print out all the prop info at once for copying and pasting to the .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a prop cannot be more than 10 metres from the MLP item for this to work.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on this when using modules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||SHOW || &lt;br /&gt;
&lt;br /&gt;
Adds a button that causes any MLP pose balls rezzed to become visible.&lt;br /&gt;
&lt;br /&gt;
 SHOW &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not many MLP product makers bother with offering this command. The opposite is the HIDE command.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| STOP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to delete any balls and unseat any participants.&lt;br /&gt;
&lt;br /&gt;
 STOP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
Note though that, unlike OFF (covered above) it does not significantly reduce any contribution the MLP system might be making to lag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| SWAP || &lt;br /&gt;
&lt;br /&gt;
Adds a button to swap positions between the first and second balls for any pose.&lt;br /&gt;
&lt;br /&gt;
 SWAP &#039;&#039;ButtonName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ButtonName&#039;&#039; is optional.&lt;br /&gt;
&lt;br /&gt;
It has no effect on any third or fourth balls in a pose.  However, this behavior may change in future versions.&lt;br /&gt;
&lt;br /&gt;
Note: In some animation menuing systems such as XPOSE (as of summer 2008), hitting the SWAP button only swaps the current pose; the swap is lost at the next pose. In MLP, the SWAP is maintained until a user chooses to SWAP back.&lt;br /&gt;
&lt;br /&gt;
IMHO, the XPOSE behavior is better, and I might change this in a future version.  [Lear Cale]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| TOMENU || &lt;br /&gt;
&lt;br /&gt;
Adds a button to get to another menu.&lt;br /&gt;
&lt;br /&gt;
 TOMENU &#039;&#039;MenuName&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;MenuName&#039;&#039; is used as the button label, and must exactly match the name of the menu (case-sensitive).&lt;br /&gt;
&lt;br /&gt;
If a menu (say, &amp;quot;Foo&amp;quot;) exists, and there is no &amp;quot;TOMENU Foo&amp;quot; statement on a preceeding menu, and if there are unused &amp;quot;TOMENU -&amp;quot; statements for the main menu, a button for &amp;quot;Foo&amp;quot; is added to the main menu, using up a &amp;quot;TOMENU -&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t worry about supplying lots of TOMENU - slots on your main menu. If MLPv2 doesn&#039;t need them, it will just ignore them!&lt;br /&gt;
&lt;br /&gt;
Note that if you are offering [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| modules]], you must provide some &amp;quot;TOMENU -&amp;quot; slots on your main menu for the module menu buttons to appear.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|| Z* || &lt;br /&gt;
&lt;br /&gt;
The Z command adds a button that allows end users to easily adjust for themselves the height of the poseballs.&lt;br /&gt;
&lt;br /&gt;
 Z &#039;&#039;sign&#039;&#039; &#039;&#039;number&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For this command (and only for this command!), no spaces are allowed between the items (Z, &#039;&#039;sign&#039;&#039;, and &#039;&#039;number).  For example:&lt;br /&gt;
&lt;br /&gt;
 Z+1&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
&lt;br /&gt;
The numbers are treated by MLP as being a measurement in centimetres. Each time a user clicks a button, say Z+5, the height will be increased by 5 centimetres. If they have previously clicked the Z+5 button, then the height will be increased by an additional 5 centimetres.&lt;br /&gt;
&lt;br /&gt;
A Z-5 button, if offered, would decrease the height by 5 cm.&lt;br /&gt;
&lt;br /&gt;
Z adjustments chosen by users apply to all the poses, not just the one currently being used.&lt;br /&gt;
&lt;br /&gt;
Note: the ongoing tally of these adjustments are stored in the Object Description of the prim that holds the MLP scripts, so any descriptions you put there will be replaced.&lt;br /&gt;
&lt;br /&gt;
To clear them, you need to either use the Z buttons to set the offset back to 0, or, edit the object, select the MLP prim if it&#039;s not the root prim, and clear the description.&lt;br /&gt;
&lt;br /&gt;
Traditionally, MLP product makers have put these Z commands under the OPTIONS menu.&lt;br /&gt;
These were recently moved to a HEIGHT submenu, to make room for the Props commands.&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2|  Tip! Options Menu]] for more info on how exactly to do this.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the [[#TIP.21_OPTIONS_Menu_2| Tip! Options Menu]] table at the end of this page for helpful advice on arranging many of these menu commands into a tidy sub-menu.&lt;br /&gt;
&lt;br /&gt;
=== MENU PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to MENU statement lines.&lt;br /&gt;
&lt;br /&gt;
==== Ball Colors ====&lt;br /&gt;
&lt;br /&gt;
If a MENU has no pose ball colors listed, it should have no POSE buttons.&lt;br /&gt;
&lt;br /&gt;
When, however, a particular MENU will contain POSE statements in it, then the MENU statement must be followed by a set of ball colors to be used for all poses in this particular menu.&lt;br /&gt;
&lt;br /&gt;
One to four balls can be specified, supporting poses for up to four participants. The balls are rezzed as necessary when a pose in the menu is selected.&lt;br /&gt;
&lt;br /&gt;
Supported colors as of summer 2008 are:&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
|| PINK || PINK2 || BLUE  || BLUE2 || WHITE&lt;br /&gt;
|-&lt;br /&gt;
|| GREEN || GREEN2  || RED  || RED2 || BLACK&lt;br /&gt;
|-&lt;br /&gt;
|| MAGENTA || ORANGE || YELLOW  ||CYAN  ||TEAL&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PINK2, BLUE2, RED2, and GREEN2 are darker their respective colors with no number after them. &lt;br /&gt;
&lt;br /&gt;
Note: The colors must be given in uppercase as shown above.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
 MENU boy-girl | ALL | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Boy Only | ALL | BLUE | HIDE&lt;br /&gt;
&lt;br /&gt;
 MENU Girl Only | ALL | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU Anyone | ALL | GREEN&lt;br /&gt;
&lt;br /&gt;
 MENU 3Some  | ALL | PINK | BLUE | PINK&lt;br /&gt;
&lt;br /&gt;
 MENU 4Some  | ALL | PINK | BLUE | PINK | BLUE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== POSE PARAMETERS ===&lt;br /&gt;
&lt;br /&gt;
Info that you can add to POSE statement lines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Animations (Facial) ====&lt;br /&gt;
&lt;br /&gt;
In the POSE line, add the suffixes listed below to the animation names to cause facial expressions.  (You don&#039;t change the animation name in inventory, just add the suffix to the anim name in the POSE line.)&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently (April 2011) no menu button to allow MLP users to turn facial expressions off and on.&lt;br /&gt;
&lt;br /&gt;
{|{{Prettytable}}&lt;br /&gt;
|+&lt;br /&gt;
|-{{Hl2}}&lt;br /&gt;
!suffix&lt;br /&gt;
!expression&lt;br /&gt;
|-&lt;br /&gt;
|| * || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::1 || mouth open&lt;br /&gt;
|-&lt;br /&gt;
|| ::2 || surprise&lt;br /&gt;
|-&lt;br /&gt;
|| ::3 || tongue out&lt;br /&gt;
|-&lt;br /&gt;
|| ::4 || smile&lt;br /&gt;
|-&lt;br /&gt;
|| ::5 || toothsmile&lt;br /&gt;
|-&lt;br /&gt;
|| ::6 || wink&lt;br /&gt;
|-&lt;br /&gt;
|| ::7 || cry&lt;br /&gt;
|-&lt;br /&gt;
|| ::8 || kiss&lt;br /&gt;
|-&lt;br /&gt;
|| ::9 || laugh&lt;br /&gt;
|-&lt;br /&gt;
|| ::10 || disdain&lt;br /&gt;
|-&lt;br /&gt;
|| ::11 || repulsed&lt;br /&gt;
|-&lt;br /&gt;
|| ::12 || anger&lt;br /&gt;
|-&lt;br /&gt;
|| ::13 || bored&lt;br /&gt;
|-&lt;br /&gt;
|| ::14 || sad&lt;br /&gt;
|-&lt;br /&gt;
|| ::15 || embarrassed&lt;br /&gt;
|-&lt;br /&gt;
|| ::16 || frown&lt;br /&gt;
|-&lt;br /&gt;
|| ::17 || shrug&lt;br /&gt;
|-&lt;br /&gt;
|| ::18 || afraid&lt;br /&gt;
|-&lt;br /&gt;
|| ::19 || worry&lt;br /&gt;
|-&lt;br /&gt;
|| ::20 || sleep&lt;br /&gt;
|-&lt;br /&gt;
|| ::21 || random (for MLPv2.4v or higher, produces random surprise / pleasure expressions)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: 20 is a combination of disdain and smile, the closest that could be found for sleep.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There must be NO SPACE between the animation name, and the suffix. Example: &lt;br /&gt;
&lt;br /&gt;
 POSE Sleep 01 | Sleep 01 femalesleep::20 | Sleep 01 malesleep::20 &lt;br /&gt;
&lt;br /&gt;
To make the expression happen periodically rather than constantly, add another extension and the length of the repetition cycle (in seconds).&lt;br /&gt;
&lt;br /&gt;
For example, to use MyAnim with open mouth every 5.5 seconds:&lt;br /&gt;
&lt;br /&gt;
 POSE Mypose | MyAnim::1::5.5&lt;br /&gt;
&lt;br /&gt;
If during menu boot you get an error that says &amp;quot;animation xyx not found&amp;quot;, but you know that animation xyx really is in there, check to see that you didn&#039;t put a space before the expression suffix after all.&lt;br /&gt;
&lt;br /&gt;
Note that this suffix appears only in the POSE line of a MENU; the actual name of the animation in the object&#039;s contents folder should *not* be changed to have this suffix. (Many animations are sold no mod; so you wouldn&#039;t be able to, anyway.)&lt;br /&gt;
&lt;br /&gt;
== .POSITIONS* NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
The .positions notecards, as their name implies, provide a place for storing information about positions of the poses in the menu.&lt;br /&gt;
&lt;br /&gt;
As long as any position adjustments you have made have only been saved via the SavePos buttons, assume them to be temporary. They are only saved in script memory, and script memory is volatile. If you hand the MLP v 2.0 object to someone else, or if your sim crashes really terribly or if the script blows up with a stack-heap error, etc ... you may lose all the work you&#039;d thought you&#039;d saved.&lt;br /&gt;
&lt;br /&gt;
The *.POSITIONS* notecards provide a safety against losing your work.&lt;br /&gt;
&lt;br /&gt;
You create *.POSITIONS* notecards by your manually copying and pasting in information from the &amp;quot;Save Pos&amp;quot; or &amp;quot;Dump Pos&amp;quot; buttons (SAVE and DUMP commands described above).  SL does not allow scripts to write data to notecards, so you must do this yourself.&lt;br /&gt;
&lt;br /&gt;
NOTE: If the .POSITIONS notecard is no modify, or is placed in a no modify prim, people will not be able to open the notecard at all. This is a SL system limitation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The lines in the .positions notecard look something like this:&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;quot;LieHold1&amp;quot; is the name of a pose (from the POSE statement in a *.MENUITEMS* file).&lt;br /&gt;
&lt;br /&gt;
The 4 vectors in the above example represent in order:&lt;br /&gt;
first ball position, first ball rotation, second ball position, second ball rotation&lt;br /&gt;
&lt;br /&gt;
If there are 3 and / or 4 balls also involved in a given pose, then the pattern repeats on for them as well.&lt;br /&gt;
&lt;br /&gt;
If you rename a pose in the menu that you have already stored a position in the notecard for, be sure to edit the .positions card, locate that pose in it, and give it the new name as well to match.&lt;br /&gt;
&lt;br /&gt;
Be sure to purge out position lines for which menu items no longer exist. This is one instance in which tidiness really does pay off: all that old, unneeded position information is read into the scripts&#039; memory, which can make you think that your MLP product is &amp;quot;full&amp;quot; (that fatal stack-heap message) and can&#039;t hold any of the other poses you had planned to add.&lt;br /&gt;
&lt;br /&gt;
See [[#TIP.21_TIP.21_Modules_--_multiple_.menuitems_and_.positions_notecards| Modules]] for help and more information on .positions cards when using modules.&lt;br /&gt;
&lt;br /&gt;
Note: Comparing positions to menu items is easier and the work of seconds as opposed to minutes if you keep the positions information cleaned up. See [[#TIP.21_Positions_Notecard_tidying| the tip on tidying .POSITIONS notecards]], if you wish to do this extra (not-required) work.&lt;br /&gt;
&lt;br /&gt;
Remember that purchasers of your MLP2 product should be able to adjust poses to fine-tune them to their own heights, sizes, etc. All *.POSITIONS* notecards should be supplied to end-users with MODIFY rights so that they too can permanently save all their hard work. {{Footnote|Some furniture makers prefer to sell their furniture no mod so that others can&#039;t just disassemble it and copy the dimensions of the pieces and thereby duplicate the furniture -- fair enough. However, if the .positions notecard is in a no-mod prim, notecards inside it will also be no mod. &lt;br /&gt;
&lt;br /&gt;
There doesn&#039;t seem to yet be a way around this. While llAllowInventoryDrop in a small add-on script might seem promising (and the change event could be set to delete the old .positions card), the problem remains that by then, a fresh positions card the user had dropped in would already be named .positions 1, an invalid file name. Because you can&#039;t rename objects inside a prim, you&#039;d have to then have your script delete that .positions 1 card as well, and then invite the user to drop his/her fresh .positions notecard in a second time, which would be very confusing. Or, using the LINKMSG feature, create a button that tells a script to delete the .positions notecard, and then invites the user to drop a new one in. But you&#039;d want that script to ask the user if s/he really knew what they were doing.&lt;br /&gt;
&lt;br /&gt;
Note as well that a no-mod prim prevents the option of allowing customers to purchase add-on modules for you -- unless provision is made for an llAllowInventoryDrop.}}&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) to set a memory limit on the ~memory script, use a line like this:&lt;br /&gt;
 {MEMORY} &amp;lt;&#039;&#039;MemoryLimit&#039;&#039;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SEQUENCE NOTECARDS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEQUENCE | seqence-name | NOCHAT&amp;lt;br /&amp;gt;&lt;br /&gt;
use NOCHAT to inhibit chatting of poses&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MENU | menu-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set number &amp;amp; colors of balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
POSE | pose-name | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
start a pose (chan &amp;amp; message are optional; message is whispered).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AVWAIT | 0 1 2 3 | chat-message-if-waiting&amp;lt;br /&amp;gt;&lt;br /&gt;
pause the entire sequence set until the balls listed are sat on (0 1 2 3 in this example)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
examples:&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for two people: AVWAIT | 0 1 | Waiting for both people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for three people: AVWAIT | 0 1 2| Waiting for three people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
to wait for four people: AVWAIT | 0 1 2 3| Waiting for four people to get on the balls&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Only have one (1) AVWAIT line per sequence set, or you may get stack-heap blow-ups.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WAIT | wait-seconds&amp;lt;br /&amp;gt;&lt;br /&gt;
pause before executing next command&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GOTO | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
go to a label, to loop a portion of a sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LABEL | label-name&amp;lt;br /&amp;gt;&lt;br /&gt;
set a target for GOTO&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REPEAT&amp;lt;br /&amp;gt;&lt;br /&gt;
repeat the whole sequence&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SAY | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
say the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WHISPER | chat-chan | chat-message&amp;lt;br /&amp;gt;&lt;br /&gt;
whisper the given text on the given chat chan&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SOUND | sound-name | 0 to 1.0&amp;lt;br /&amp;gt;&lt;br /&gt;
plays sound from  &#039;&#039;&#039;prim contents&#039;&#039;&#039; at volume 0 to maximum&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MEMORY | &#039;&#039;MemoryLimit&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(MLPV2.5) Sets memory limit of the ~sequencer script.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NOTE: The chat messages can include the first names of participants using /0 for avatar on first ball, /1 for av on 2nd ball, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence scripting debugging ===&lt;br /&gt;
&lt;br /&gt;
(very advanced)&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put any one of these are the very top of your sequences notecard, outside of any defined sequence, in order to turn on debugging for the sequences script:&lt;br /&gt;
&lt;br /&gt;
debug | 1&amp;lt;br /&amp;gt;&lt;br /&gt;
sequence start/stop&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 2&amp;lt;br /&amp;gt;&lt;br /&gt;
echo each command as executed&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | 4&amp;lt;br /&amp;gt;&lt;br /&gt;
avatar hop on/off&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
debug | -1&amp;lt;br /&amp;gt;&lt;br /&gt;
all debugging&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequences and Props ===&lt;br /&gt;
Yes, props will still work for items used in sequences.&lt;br /&gt;
&lt;br /&gt;
== TIPS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! ADJUST Beams |Finding the ADJUST beams hard to see? First, make sure that you have set world to noon. If you still find them difficult to edit, haul the ~ball out of your prim.&lt;br /&gt;
&lt;br /&gt;
Edit the ~ball script in it, and look for this part of the script in the listen event:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
        } else if (str == &amp;quot;ADJUST&amp;quot;) {&lt;br /&gt;
            llSetAlpha(0.2,ALL_SIDES);&lt;br /&gt;
            llSetText(&amp;quot;Adjust&amp;quot;,&amp;lt;1.0,1.0,1.0&amp;gt;,1.0);&lt;br /&gt;
            llSetScale(&amp;lt;0.1,0.1,5.0&amp;gt;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
It&#039;s the llSetAlpha setting it to only .2 that makes it hard to see. Try it at .4, or .6, or higher.&lt;br /&gt;
&lt;br /&gt;
Save, take the ball into inventory, then delete the old one in the prim and replace it with your adjusted one.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Caveat|&lt;br /&gt;
Though all animations will work with MLPv2, not every single one you come across will work reliably. &lt;br /&gt;
&lt;br /&gt;
Some animations, if they happen to have been made by the creator in a certain way, will work as expected after certain other animations, but not after others. You&#039;ll get different results depending on which pose you ran last.&lt;br /&gt;
&lt;br /&gt;
The problem is animations that have their hip position the same in their T frame and first animation frame. They just won&#039;t work with MLP.&lt;br /&gt;
&lt;br /&gt;
Example: if you have 3 anims, 2 with hip positions set and one without, the hip position for the one without will be the hip position left over from whichever of the last two anims you used. It&#039;s the way SL animations work. If there&#039;s no change in any joint between the &amp;quot;T&amp;quot; frame (first frame in bvh file) and the first animation frame (second frame in bvh file), SL ignores that joint for the whole animation. And when all other animations are turned off, this means that these joints are left free to do whatever SL does with them. It leaves them as they were from the previous anim, or overrides them with SL builtin motions like typing, head movement, arm pointing while editing, etc.&lt;br /&gt;
&lt;br /&gt;
The values in the hip joint aren&#039;t important; what&#039;s important is that that they *be* different between T frame and 1st animation frame. For MLP, you want every joint in the animation to have been moved (except head, if you want it to be able to move with the mouse.)&lt;br /&gt;
&lt;br /&gt;
This problem can be avoided when making animations if you move the hip even just 1 degree, and normally the stomach 1 degree in the opposite direction.&lt;br /&gt;
&lt;br /&gt;
So sadly, in the course of things, odds are, you&#039;re just going to buy some animations that just ain&#039;t going to work with MLP. And there is no way of knowing in advance.&lt;br /&gt;
&lt;br /&gt;
When creating animations for MLP, Lear Cale highly recommends using priority 3.  This disallows the typing while chatting animation, but allows head movement (if the head joint is not moved in the beginning of the animation).  It also allows someone to create a priority 4 animation and run it to override MLP animation behavior (until the next pose is selected). }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animations Permission|&lt;br /&gt;
The ball user, upon first sitting on a ball, will be asked permission to animate them. S/he must say yes to yes, or they will end up just &amp;quot;hovering&amp;quot; on the poseball.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;permission pls&amp;quot; menu often gets hidden behind the MLP main menu (if you are the one who called up the menu.) You need to click the &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; to cycle through the menus on your screen to find the permissions prompt.  This is SL behaviour and there&#039;s no way to fix it, other than turning &amp;quot;redo&amp;quot; menu off in MLP.&lt;br /&gt;
&lt;br /&gt;
NOTE: in their great wisdom, SL modified the 1.20 viewer to show something other than &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot; for this button.  Damn them.&lt;br /&gt;
&lt;br /&gt;
If you are wondering why permission must be asked, when normally sitting on something is taken as implying permission to be animated, it&#039;s because it&#039;s not actually the balls that are doing the animating -- it&#039;s a script in the MLP. Because one script is not allowed (for security reasons) to pass permission to another script, the scripts in the MLP itself can&#039;t take advantage of any permissions the poseballs have acquired.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Animation Synchronization |Animations appear to start separately per ball once an avatar sits on it. Thus, they&#039;re not in sync.&lt;br /&gt;
&lt;br /&gt;
In fact, the animations are started at the same time. However, it takes time for the animations to get sent between SL and the client, so as a result they don&#039;t look synchronized.&lt;br /&gt;
&lt;br /&gt;
There is no simple feature in MLPV2 to automatically synchronize poses as such. You can manually synchronize by shifting to another pose and then shifting back again.  (Starting with &lt;br /&gt;
&lt;br /&gt;
There is no built-in feature to automatically synchronize, as there is with couples danceballs.  Prior to MLPV2.4z4, you can manually synchronize by changing to another pose and then back.  Starting with MLPV2.4, you can manually resynchronize by selecting the same pose again.&lt;br /&gt;
&lt;br /&gt;
There is an advanced feature of MLPV2 that you could use to get automatic periodic synchronization: Sequences.&lt;br /&gt;
&lt;br /&gt;
A sequence is simply a list of poses that MLPV2 will play at the touch of a button, with the option to repeat the sequence or a portion of the sequence. See the example sequence in the distribution.  You could set up a simple sequence that plays one pose, waits some time that&#039;s at least as long as the animations, and repeats, like this, which goes in .SEQUENCES notecard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SEQUENCE | snuggle-seq | NOCHAT&lt;br /&gt;
MENU | couples&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
AVWAIT | 0 1&lt;br /&gt;
POSE | snuggle&lt;br /&gt;
WAIT | 30&lt;br /&gt;
REPEAT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Animations and balls|&lt;br /&gt;
Animations remain in the main MLP object; they are never placed in the poseballs. The animations are played from within the main MLP product; the poseball is just the delivery vehicle. Consequently, poseballs can be deleted or lost without the main product being affected. And, the poseballs themselves are just copies of the one inside the MLP product.&lt;br /&gt;
&lt;br /&gt;
A ball will commit suicide if left behind somewhere (the MLP object needs to be within 20 metres.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball text|&lt;br /&gt;
By default, both the poseball floating text and the right-click menu &#039;sit&#039; choice text is the word &amp;quot;LOVE&amp;quot;.  You can set these to whatever you want by editing the description of ~ball in object contents.  If you type in that field the word &amp;quot;none&amp;quot; (without the quotes), or just type in a space or two, there will be no floating text, and the right-click menu &#039;sit&#039; choice text becomes the system default of just &amp;quot;Sit Here&amp;quot; (for English viewers).}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Phantom Balls|&lt;br /&gt;
To make your balls rez as phantom, put an asterisk in the ~ball description line.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! More than 6 balls|&lt;br /&gt;
There are no plans to expand beyond 6 balls active at once. If this is totally necessary for you, you&#039;d be better off just going with a product that actually supports the number of avatars you want, such as XPOSE. You&#039;ll save yourself and your customers time and confusion by going with a product that was designed to handle larger numbers from the ground up.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Balls are buried in furniture|&lt;br /&gt;
Sometimes when you position the balls correctly for an animation, the balls end up buried in furniture.&lt;br /&gt;
&lt;br /&gt;
This is a property of the animation: the hip position in the animation is too high.  While it is in theory possible to fix this in MLP scripts, it would be hard to do, especially without using up lots of memory for poses.&lt;br /&gt;
&lt;br /&gt;
Most people know that when this happens they can select another pose first, jump on, and then change to the pose they want. Consequently, the simplest workaround is to make sure the first pose in each menu has all balls visible.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you could ask the creator of the animation to adjust it, but the chances of them doing this just for your piece of furniture are not high.&lt;br /&gt;
&lt;br /&gt;
If someone stands up while on balls that are buried in furniture, they will get ejected from the furniture unceremoniously. This won&#039;t happen if they use the STOP button on the menu instead.&lt;br /&gt;
&lt;br /&gt;
Vesta Martynov suggests another workaround -- changing the offset that the ball is rezzed at. (Note that this will apply to all poses, not just the problem ones.) Her work-around is, before you start on a MLP product, to take the ball out and rez it on the ground. Edit the script in the ball, and search for this SitTarget line:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
The .01 there is the vertical offset. She changes it to something like this:&lt;br /&gt;
&lt;br /&gt;
llSitTarget(&amp;lt;0.0,0.0,-0.25&amp;gt;,ZERO_ROTATION);&lt;br /&gt;
&lt;br /&gt;
Save your changes, take the ball back into your inventory, and use it to replace the one that was inside the MLP.&lt;br /&gt;
&lt;br /&gt;
After you do this, all the balls and animations will be lifted, so you can go in and lower the animations, but you will no longer have balls sinking into your furniture.&lt;br /&gt;
&lt;br /&gt;
(Vesta Martynov, conversation in MLP group, 2009-06-11 19:46)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Ball scripts|&lt;br /&gt;
When updating your version of MLPv2 scripts, make sure you update the script in ~ball as well.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Changing the number of active Balls|&lt;br /&gt;
When going from a pose in a menu with 4 ball colors to a pose in a menu with 2 balls, the 2 balls are deleted. Assuming you&#039;re not using phantom balls, if the balls rez again (say you go back to a pose in a menu with 4 balls), the balls should bump anyone standing in their way out of the way. People wanting to use the newly re-rezzed balls and be animated by them will have to hop back on them. When changing the number of balls active, bear in mind that the number of animations in a POSE line must match the number of ball colors in the MENU line above. You can&#039;t mix poses with 2 anims and poses with 4 anims in the same menu section. This is not supported.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Default Pose | &lt;br /&gt;
You need to set position coordinates for the default pose. To do this, on the MLPV2 main menu click the &amp;quot;adj-default&amp;quot; button, then ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal. When you have finished, delete the .menuitems.zz-default notecard from the prim.&lt;br /&gt;
&lt;br /&gt;
If on the main blue menu you do not see a button called &amp;quot;adj-default&amp;quot;, do the following steps:&lt;br /&gt;
&lt;br /&gt;
1) Create a notecard with the file name of:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.Menuitems.zz-default&lt;br /&gt;
&lt;br /&gt;
Paste the following in as content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
// The &amp;quot;default&amp;quot; pose below is for adjusting &amp;quot;default&amp;quot; position.&lt;br /&gt;
// Since there are currently no other items in this menu, you can comment out the whole menu&amp;lt;br /&amp;gt;&lt;br /&gt;
// or simply delete this file when  you&#039;ve done that.&lt;br /&gt;
&lt;br /&gt;
MENU adj-default | ALL | BLUE | PINK | BLUE | PINK&lt;br /&gt;
POSE default | sit_ground | sit_ground | sit_ground | sit_ground&lt;br /&gt;
SWAP&lt;br /&gt;
ADJUST&lt;br /&gt;
SAVE Save Pos&lt;br /&gt;
DUMP Mem Dump&lt;br /&gt;
BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Tip! If the product you are making is only for 1 or 2 people, then you don&#039;t need to include all 4 balls that are listed in the menu above. For a solo product, you can just do instead:&lt;br /&gt;
&amp;lt;pre&amp;gt; MENU adj-default | ALL | BLUE&lt;br /&gt;
 POSE default | sit_ground&lt;br /&gt;
 ADJUST&lt;br /&gt;
 SAVE Save Pos&lt;br /&gt;
 DUMP Mem Dump&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drop this notecard into the prim where you are working with MLPV2.&lt;br /&gt;
&lt;br /&gt;
2) Make sure the main menu notecard has a spare TOMENU slot to fit the adj-default choice into:&lt;br /&gt;
&lt;br /&gt;
 TOMENU -&lt;br /&gt;
&lt;br /&gt;
3) restart the MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
4) ADJUST the default pose position, save, and copy the coordinates to the .positions notecard as per normal.&lt;br /&gt;
&lt;br /&gt;
5) When you have finished, delete the .menuitems.zz-default notecard from the prim.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard Editing|&lt;br /&gt;
If the MLP prim contains many animations, access to a notecards contents can be PAINFULLY slow.&lt;br /&gt;
&lt;br /&gt;
First, make sure the prim is ready to let you open the notecard. Right-click on the notecard that you see in the contents folder. If you get a big menu of choices, rather than just the standard 4 of Open, Properties, Rename, Delete, then the prim isn&#039;t ready to let you open the notecard. You simply have to wait. Sometimes, you may need to wait up to 2 to 4 minutes. Yes, ridiculous -- but that&#039;s SL.&lt;br /&gt;
&lt;br /&gt;
Make all your changes before saving. Once you save, the notecard you have open may no longer be the notecard that is inside the prim (sic.) Once you have saved, even if you did so by accident out of habit, leave the notecard opened for a few seconds, then close it, and wait until the prim is ready to let you open it again if you need to do further edits.&lt;br /&gt;
&lt;br /&gt;
Note: as of summer 2008, the wait time for notecards to open from inside prim folder contents seems to be getting increasingly worse, and the system seems to be getting increasingly intolerant of allowing repeated saves on the same opened notecard. Thus, the advice to close and re-open after a save.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Modules -- multiple .menuitems and .positions notecards|&lt;br /&gt;
There can be several *.MENUITEMS* and *.POSITIONS* notecards in an MLP product (where &amp;quot;*&amp;quot; is any text that&#039;s allowed in a notecard name). This is to allow the addition of modules to the product. This allows you the option, for example, of letting customers purchase an MLP product for couples, and then coming back later to purchase an odd-on for 3Somes. Customers then pad home, edit the contents folder of their MLP product, plop in the add-on stuff, and restart their MLP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; a module&#039;s menu appears as a button on the MLP product&#039;s main menu. For this to actually happen, you *must* provide a blank slot for it by supplying a TOMENU - parameter on the main menu.  Normally, there should be a bunch of these in the main menu.&lt;br /&gt;
&lt;br /&gt;
The add-on will consist of a .menuitems card, a .positions card, and the associated animations (with permissions set correctly.)&lt;br /&gt;
&lt;br /&gt;
For you as a vendor to make a module, you create a .MENUITEMS.xxx notecard, and a corresponding .POSITIONS.xxx notecard (where xxx can be anbything and is normally thought of as the name of the module.) If this module uses props, you also create a .PROPS.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
A *.MENUITEMS* card for a module should have no default or stand pose, etc. It normally has only the actual menus being added and the associated poses.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;MENU myAddOns&lt;br /&gt;
 TOMENU myAddOn1&lt;br /&gt;
 TOMENU myAddOn2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn1 | ALL | PINK | BLUE&lt;br /&gt;
 POSE Whoohoo! | Bump1 | Bump2&lt;br /&gt;
 POSE Zowee | Grind1 | Grind2&lt;br /&gt;
&lt;br /&gt;
 MENU MyAddOn2 | ALL | PINK | BLUE | PINK&lt;br /&gt;
 POSE Fubar | Dance1 | Dance2 | Dance3&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To test, you would then drop all associated notecards (.menuitems.xxx, .positions.xxx and .props.xxx if using) into the MLP product, along with the necessary animations and props, of course, and restart the MLP product. (Of course, if you were selling it as a separate add-on, you would after remove the above components from the main product, and package them separately.) Remember if you make any pose position adjustments during testing that the position information should be copied and pasted to the relevant .positions.xxx notecard -- not the main .positions notecard, because you are preparing a sold-separately module. Ditto for any prop adjustments, which go into the .props.xxx notecard.&lt;br /&gt;
&lt;br /&gt;
Purchasers of an add-on need to always keep that .menuitems.xxx notecard in their product. However, the .positions.xxx and the .props.xxx notecards have, in a way, a limited lifespan. When you do a DUMP command, you copy / paste all that info into the notecard named simply .positions -- that is the main .positions notecard. Or, into .props notecard, in the case of a DUMPPROPS command. All the info that the subsidiary .positions.xxx and .props.xxx notecards hold is now amalgamated into the main notecard, and the subsidiary ones are no longer needed. They can be deleted. But to be clear, do not delete their corresponding .menuitems.xxx notecards.&lt;br /&gt;
&lt;br /&gt;
Multiple .positions notecards are read by the script in the same order they appear in object inventory.&lt;br /&gt;
&lt;br /&gt;
 Note: it is best to be using the MENUORDER directive when offering modules.}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Sub-Menus|Can you add a module menu ie: .MENUITEMS.myposes and have it show as a top menu item with sub menus? Something that would give a My Poses button that when clicked would open a sub menu dialog with buttons for my poses 1, my poses 2 etc.&lt;br /&gt;
&lt;br /&gt;
Abolutely, and that&#039;s the best way to do it.&lt;br /&gt;
&lt;br /&gt;
Start your .MENUITEMS.mystuff with the parent menu. Fill it with &amp;quot;TOMENU&amp;quot; statements like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MENU WhizBangInc | ALL&lt;br /&gt;
TOMENU WBI-cuddles&lt;br /&gt;
TOMENU WBI-fun&lt;br /&gt;
TOMENU WBI-freaky&lt;br /&gt;
TOMENU WBI-illegalin42states&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Options Menu|&lt;br /&gt;
By tradition, most of the common functionality command buttons are stored under a MENU called &amp;quot;OPTIONS&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Such commands include ADJUST, SAVE, DUMP, Show/Hide (aka INVISIBLE), MenuUsers, BallUsers, Chat, Dump Props, Save Prop, etc.&lt;br /&gt;
&lt;br /&gt;
As well, the z commands for height adjustment were traditionally offered there as well.&lt;br /&gt;
&lt;br /&gt;
With the rapidly-increasing number of functions available within MLPv2, however, the OPTIONS submenu is becoming very crowded.&lt;br /&gt;
&lt;br /&gt;
Consequently, consider taking all the z height adjustment options out from under OPTIONS and put them in a sub-menu like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU HEIGHT | ALL&lt;br /&gt;
 Z+1 //adjust Z = height offset in cm - use any integer to set the step size&lt;br /&gt;
 Z+5&lt;br /&gt;
 Z+25&lt;br /&gt;
 Z-1&lt;br /&gt;
 Z-5&lt;br /&gt;
 Z-25&lt;br /&gt;
 BACK&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, in the OPTIONS menu, just make this button linking to the HEIGHT submenu:&lt;br /&gt;
&lt;br /&gt;
 TOMENU HEIGHT}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Positions Notecard tidying|&lt;br /&gt;
The lines in the .positions notecard look like this when copied and pasted in directly from chat:&lt;br /&gt;
&lt;br /&gt;
[7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e: {Lie&amp;amp;Hold} &amp;lt;-0.413,0.130,0.245&amp;gt; &amp;lt;1.0,-9.0,-0.9&amp;gt; &amp;lt;-0.539,0.207,0.155&amp;gt; &amp;lt;-0.1,-8.9,-1.1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The extraneous chatter before the {LieHold1} parameter in the curly brackets (aka braces) is ignored by the scripts, so there is no need to delete it.&lt;br /&gt;
&lt;br /&gt;
Still, if you as an MLP professional wish cleaner, easier to read content (which is a boon for easier maintenance and troubleshooting), then copy the contents of the .positions card in question into a simple text programme (such as Notepad on a Windows PC), and using the example above, you would search for:&lt;br /&gt;
&lt;br /&gt;
 [7:46]  Animated Living Sofa Combo Couple &amp;amp; Solo 2.1e:  [including the final space at the end of it]&lt;br /&gt;
&lt;br /&gt;
and just replace it with nothing, and then paste the cleaned up text back into the .positions card.&lt;br /&gt;
&lt;br /&gt;
The cleaned up text then looks like this.&lt;br /&gt;
&lt;br /&gt;
 {LieHold1} &amp;lt;-0.253,0.157,0.285&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;-0.146,0.000,0.177&amp;gt; &amp;lt;0.0,0.0,90.0&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You may wish to also to SORT the positions in alpha order to make it easier to find them.&lt;br /&gt;
&lt;br /&gt;
So that instead of:&lt;br /&gt;
&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 {Couch 1} &amp;lt;-0.179,0.001,0.143&amp;gt; &amp;lt;0.0,-19.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Lie 01} &amp;lt;-0.115,-0.069,0.694&amp;gt; &amp;lt;0.0,0.0,-90.0&amp;gt; &amp;lt;-32.417,-199.035,-518.585&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Massage} &amp;lt;-0.230,-0.133,-0.287&amp;gt; &amp;lt;0.0,0.0,-86.0&amp;gt; &amp;lt;-0.287,0.259,0.161&amp;gt; &amp;lt;0.0,0.0,-82.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
 {Sprawl 1} &amp;lt;0.960,0.000,-0.190&amp;gt; &amp;lt;0.0,0.0,0.0&amp;gt; &amp;lt;0.700,0.000,0.700&amp;gt; &amp;lt;0.0,0.0,-180.0&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can do this sorting in seconds by copying &amp;amp; pasting the (cleaned-up position chatter) into something such as Microsoft Word, or a spreadsheet, and telling it to sort, and then copying &amp;amp; pasting the sorted positions back into the .positions notecard. (This really works best though if you have stripped the initial chatter info from them.) }}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Notecard reading order|&lt;br /&gt;
Q: I have a question about animation packs. I know the readme notecard says that the scripts read the notecards in alpha order. If I were to name the notecards as A, B, and C would the buttons on the menu then be in that order as well? I&#039;m picky--I like my buttons in a certain order.&lt;br /&gt;
&lt;br /&gt;
A: Yes.}}&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Portable use of an MLPv2 product|&lt;br /&gt;
Attach the MLPv2 object to your HUD. You can use its default shape and color for a clickable bar on one of the edges of your screen (to move HUD position: Right-click and Edit it and use the arrows). While in edit mode, you can also edit color/transparency/size/position.&lt;br /&gt;
&lt;br /&gt;
Note that the balls will appear relative to the initial MLPv2 position. Adjust the height offset with a (Z) command.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! Props|&lt;br /&gt;
Props are objects the MLP product will rez for poses.  When you choose another pose or hit STOP, any rezzed prop disappears.  If you delete the MLP object, any prop will disappear within 3 minutes.&lt;br /&gt;
&lt;br /&gt;
Props support starts with MLPV2.1.&lt;br /&gt;
&lt;br /&gt;
To add a prop, edit a .PROPS notecard or add a new one (named .props.xxx where xxx is the name of the module, for a modular config).  Copy the following example line and paste it into your .PROPS notecard.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;| mypose | myobject | &amp;lt;1,1,1&amp;gt;/&amp;lt;0, 0, 0&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then:&amp;lt;br /&amp;gt;&lt;br /&gt;
*Replace &amp;quot;mypose&amp;quot; with the pose name;&lt;br /&gt;
*Replace &amp;quot;myobject&amp;quot; with the name of the prop object.  The object name cannot contain vertical bars;&lt;br /&gt;
*Add the &amp;quot;~prop&amp;quot; script (from inside the &amp;quot;~pillow&amp;quot; object that comes with the standard distribution) to your prop object, and drop your prop object into the MLP prim&#039;s inventory.  The prop and everything in it will need to be copiable for next owner;&lt;br /&gt;
*Make sure your menu has the SAVEPROP and DUMPPROPS command on it.&lt;br /&gt;
&lt;br /&gt;
Restart the MLP, and then select the pose.  The prop should appear.  It might be underneath the MLP object, so look around -- it may be best to do this using a single prim MLP floating in the air, the first time so that it doesn&#039;t rez in the ground!&lt;br /&gt;
&lt;br /&gt;
Move the prop to where you want it, and use MLP menu command &amp;quot;SAVEPROP&amp;quot;.  To make the change permanent, select the chat information that is printed out on your screen (including the first vertical bar, and optionally any text before it) and replace the corresponding line in your .props.xxx file.  Or, do all your props and use DUMPPROPS.  (This procedure is similar to that for saving positions in .positions.xxx notecards.)&lt;br /&gt;
&lt;br /&gt;
To get MLP to reread .props.xxx files, restart the product (which resets positions as well as props).&lt;br /&gt;
&lt;br /&gt;
Keep in mind that props and positions are saved as two separate steps. If you adjust a pose and its prop, you need to save both pose position and prop.&lt;br /&gt;
&lt;br /&gt;
Tip: We are all so used to hitting the button to save positions. If you find that a prop position isn&#039;t saving, check your chat history to make sure you didn&#039;t hit the save position button instead of save prop just out of habit!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&#039;&#039;&#039;Hand-held Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;For props to be used as hand-held items, use the ~give script add-on found here [[MLPV2_Give_Item_Add-on]] and have people wear the items.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Number of Props&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
For any pose, you can have at most one prop. If you need more than one prop to rez, you&#039;ll have to link the items so that they can be treated by MLP as one object. Alternatively, if you have a scripter friend to help you, you might try having the rezzed object rez another object from its contents. Your scripter friend would need to make the rezzed child object listen for the same die command as the main object that was rezzed.&lt;br /&gt;
&lt;br /&gt;
Or, you *might* perhaps try the rezzed object as a coalesced object, making sure that each item has in it a script (created custom for you by a scripter friend) so they can die when required to -- experiment with that somewhere in the open at first in case it goes all over the place.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Box|TIP! STOP in every menu|&lt;br /&gt;
STOP and BACK buttons should be on every menu.&lt;br /&gt;
&lt;br /&gt;
Why STOP on every menu? It solves so many problems. For example, if you use STOP, you don&#039;t get ejected like a James Bond villain if the poseball happens to be buried in the furniture. After moving or rotating a bed, STOP resets the position (Lear put in code to do this automatically, but there&#039;s no event that tells you when rotation stops.) And no doubt, SL and MLPV2 have bugs, and I&#039;ve seen funky and unrepeatable oddness that STOP fixes in a jiffy. Plus it makes the poseballs go away.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via linked msgs|&lt;br /&gt;
If you just want the MLP menu to come up from another script in the object (same prim or different one), simply do what the ~touch_passer script does (the llMessageLinked() call). If your script is in the same prim as MLP scripts, change LINK_ALL_OTHERS to LINK_THIS.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{box|TIP! Scripting -- call on MLP Menu from another script via chat|MLP listens for menu responses on this channel, minus one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Return a channel number that&#039;s based on the prim&#039;s key -- unique per object&lt;br /&gt;
integer channel() {&lt;br /&gt;
return (integer)(&amp;quot;0x&amp;quot;+llGetSubString((string)llGetKey(),-4,-1));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the key here is the key of the MLP object.&lt;br /&gt;
&lt;br /&gt;
Oh, warning: it also checks to see if the chat came from the same user as whoever used the menu recently. If they don&#039;t match, it sends a menu (dialog) -- in this case, to your object, which won&#039;t do anything. So, I suspect that this will work only if you keep users from getting access to the MLPV2 menu directly.}}&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
When the MLP is ready for use, it sends out a linked message on channel -11003 saying &amp;quot;READY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
llMessageLinked(LINK_SET, -11003, &amp;quot;READY&amp;quot;, NullKey);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Footnotes}}&lt;br /&gt;
&lt;br /&gt;
== Illegal Pirated Animation Kit FYI ==&lt;br /&gt;
http://wiki.secondlife.com/w/index.php?title=62_Animation_MLP_Set&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;free&amp;quot; status of Sexgen animation kit released October 2011 by Stroker Serpentine, see here: https://wiki.secondlife.com/wiki/Stroker_Serpentine_Sexgen_Animation_Set&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1186597</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1186597"/>
		<updated>2014-01-08T00:00:11Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
*[[MLPV2 Give Item Add-on]] (Item or Items, one at a time, NOT in folder)&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]] (Item or Items, all at once, in folder)&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
*[[Check Animations Permissions Tool]]&lt;br /&gt;
*[[Cleaner MLP Say|&amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[Reset_from_Child_Plugin]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Give_Item_Add-on&amp;diff=1186595</id>
		<title>MLPV2 Give Item Add-on</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Give_Item_Add-on&amp;diff=1186595"/>
		<updated>2014-01-07T23:58:00Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
Add on tool for MLPV2 that puts a button on the MLPV2 menu that, when clicked, gives a user an object (or multiple objects) that you wish them to use with an animation. If you are giving multiple items, they are giving in succession one after the other -- that is, each is given separately, rather than all being given at once in a folder.&lt;br /&gt;
&lt;br /&gt;
By Chaz Longstaff, June 2008.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 LINKMSG TieMeUp | 1,-4,987789,Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Steps to use:&amp;lt;br /&amp;gt;&lt;br /&gt;
#Copy and paste everything below the double-line on this page into a script called, for the sake of argument, &amp;quot;~give&amp;quot; (the script name is actually irrelevant; you may call it kumquat if you wish;)&amp;lt;br /&amp;gt;&lt;br /&gt;
#Drop the script into the prim where you have the rest of the MLPV2 scripts;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Add the object that you wish to give out. Usually, it is either a prim object, or clothing. Note that this object to be given out needs to have both copy and transfer permissions set on it;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Add to the menu in an MLPV2 menu notecard the following line:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 LINKMSG MyButtonName | 1,-4,987789,NamesOfObjectToOffer##MsgToPerson&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above line, there are three elements for you to customize:&lt;br /&gt;
*MyButtonName -- the wording that you want to appear for the button on the blue menu&lt;br /&gt;
*NamesOfObjectToOffer -- the name(s) (case and spacing sensitive) of the object(s) you are offering. If you are offering more than one, separate them with a hash mark (aka number sign, pound sign) # . Example: Item01#Item02#Item03 . If you are not offering more than one, don&#039;t use a # separator here.&lt;br /&gt;
*MsgToPerson -- A message to be instant messaged to the person being offered the item, so they know what it is for, and don&#039;t think it&#039;s a random spammer or griefer passing by, etc.&lt;br /&gt;
&lt;br /&gt;
Note that NamesOfObjectToOffer and MsgToPerson are separated by a ## separator (two hash marks.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What you don&#039;t need to change in the above sample line:&lt;br /&gt;
* 1 -- makes it so the MLPV2 menu doesn&#039;t reappear, so the user can see the accept-object menu&lt;br /&gt;
* -4 -- the value of LINK_THIS, meaning, send this message to this prim only.  (Use -2 if the ~give script is in a different prim.)&lt;br /&gt;
* 987789 -- This is the number the ~give script looks for to detect a message to it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Add-on by Chaz Longstff for MLPV2 by Lear Cale. June 2008.&lt;br /&gt;
// Function: gives object to someone on an MLPV2 ball&lt;br /&gt;
// MLP button: LINKMSG MyButtonName | 1,-4,987789,NamesOfObjectToOffer##MsgToPerson&lt;br /&gt;
&lt;br /&gt;
// In a menu card, format a menu button like this, for example:&lt;br /&gt;
// LINKMSG TieMeUp | 1,-4,987789,Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs.&lt;br /&gt;
// In this example, TieMeUp is the button name&lt;br /&gt;
//     1 means whether to make the MLPV2 menu go away or not.&lt;br /&gt;
//       Generally set it to 1 as per the example, as otherwise the user&lt;br /&gt;
//       might not see the accept prompt for the inventory being given.&lt;br /&gt;
//     -4 is the value of LINK_THIS, meaning, send this message to this prim only.&lt;br /&gt;
//       (Use -1 if the ~give script is in a different prim.)&lt;br /&gt;
//     987789 -- don&#039;t change this, this is the link message number&lt;br /&gt;
//     Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs.&lt;br /&gt;
//       The items separated by # are the items to give,&lt;br /&gt;
//       followed by a message to be instant messaged to the recipient&lt;br /&gt;
//       of the object. It&#039;s good to include a msg, so that they don&#039;t think&lt;br /&gt;
//       it&#039;s a griefer trying to hand them something. Notice that the list&lt;br /&gt;
//       of objects to give and the accompanying msg, are separated by ##&lt;br /&gt;
&lt;br /&gt;
default{&lt;br /&gt;
   link_message(integer from, integer num, string str, key id) {&lt;br /&gt;
       if (num == 987789) {&lt;br /&gt;
           list    TempList = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
           string  message = llStringTrim(llList2String(TempList, 1),STRING_TRIM);&lt;br /&gt;
           string  Objects = llStringTrim(llList2String(TempList, 0),STRING_TRIM);&lt;br /&gt;
           list    ObjectsToGive = llParseStringKeepNulls(Objects,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
           integer GiveLength = llGetListLength(ObjectsToGive);&lt;br /&gt;
           if (GiveLength != 0) {&lt;br /&gt;
               if (message != &amp;quot;&amp;quot;) {&lt;br /&gt;
                   llInstantMessage(id,message + &amp;quot; &amp;quot; + llList2CSV(ObjectsToGive));&lt;br /&gt;
               }&lt;br /&gt;
               integer x;&lt;br /&gt;
               for (x = 0; x &amp;lt; GiveLength; x++) {&lt;br /&gt;
                     string ObjectToGive = llStringTrim(llList2String(ObjectsToGive, x),STRING_TRIM);&lt;br /&gt;
                     if ( ( llGetInventoryType(ObjectToGive) != INVENTORY_NONE)&lt;br /&gt;
                     &amp;amp;&amp;amp;   ( llGetInventoryPermMask(ObjectToGive, MASK_NEXT) &amp;amp; PERM_COPY) ) {&lt;br /&gt;
                         llGiveInventory(id,ObjectToGive);&lt;br /&gt;
                     }&lt;br /&gt;
                }//end of for&lt;br /&gt;
            }//end of checking GiveLength&lt;br /&gt;
       } //end of if check for the right channel&lt;br /&gt;
   } //end link_message event&lt;br /&gt;
} //end default state&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1186465</id>
		<title>MLPV2 Troubleshooting Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1186465"/>
		<updated>2014-01-06T03:47:21Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: added: Could not find animation &amp;#039;00000000-0000-0000-0000-000000000000&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
These MLPV2 troubleshooting tips are for normal end users and builders.&lt;br /&gt;
&lt;br /&gt;
== User issues ==&lt;br /&gt;
&lt;br /&gt;
These issues can be seen by any MLPV2 user even when the furniture is reasonably set up.&lt;br /&gt;
&lt;br /&gt;
=== Why am I not being animated? ===&lt;br /&gt;
Try turning off your Animation Overrider, if you have one.  Whether this is an issue for you depends on a techical detail: the priority of the animations in your AO and the priority of the animations in the MLP/MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
=== Why am I floating? ===&lt;br /&gt;
Sometimes we can be using a pose and suddenly we rise about 1 meter higher and stay there.  Sometimes this happens in everyone&#039;s view, and other times it only appears for some.  This is an SL bug and happens with any animation system, not just MLP/MLPV2.   The problem usually goes away if you select the pose again, or stand and sit again.  Sometimes it may be necessary to relog.&lt;br /&gt;
&lt;br /&gt;
=== Balls won&#039;t rez when I choose a pose! ===&lt;br /&gt;
First, try STOP.  If the balls got deleted for any reason, they won&#039;t rez when you pick a pose and the MLP still thinks the balls are there.  STOP fixes this.  (The timeout in many MLP objects also help avoid this, by doing a STOP if nobody&#039;s used it for a while.)&lt;br /&gt;
&lt;br /&gt;
Second (if first doesn&#039;t work), try resetting via the MLPV2 menu: &amp;quot;OPTIONS -&amp;gt; Shutdown... -&amp;gt; Restart&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Consider if maybe they *are* rezzing, but way below you or way above you -- check the description line of the MLP object to see if there is a number in there, in which case set it to 0.&lt;br /&gt;
&lt;br /&gt;
=== Menu doesn&#039;t come up ===&lt;br /&gt;
Make sure you&#039;re on land where you are allowed to run scripts.  There is a &amp;quot;no scripting&amp;quot; icon at the top of the viewer screen if you can&#039;t.&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t, try setting your group to the land&#039;s group.  If that makes the no-scripting icon go away, set the MLP object to the land&#039;s group.  (Do this in the Edit tab, or be wearing the group tag when you rez the object.)&lt;br /&gt;
&lt;br /&gt;
If that isn&#039;t the problem, most likely it had a stack/heap error when you were away.&lt;br /&gt;
&lt;br /&gt;
If the object permissions allow it, select the object and use &amp;quot;Reset Scripts&amp;quot;.  (In original style viewers, this is SL menu &amp;quot;Tools -&amp;gt; Reset Scripts in Selection&amp;quot;.  For SL2, I have no idea where it is.  Naughty LL for goofing everything up.)&lt;br /&gt;
&lt;br /&gt;
If this is a recurring problem, there is an MLPV2 recovery script; ask the MLPV2 group for more info.  Alternatively, delete some of the poses, to allow more room.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Animate me&amp;quot; permission popup not happening===&lt;br /&gt;
&lt;br /&gt;
You won&#039;t get the animate permission popup if you were the last person on a particular poseball. It keeps your permission.  You also don&#039;t get animate permission for yourself when MLP is used as a HUD, because worn items give permission automatically. (So do sat-upon items, but in the case of MLP, the script that takes permission is in the furniture, not the ball.) &lt;br /&gt;
&lt;br /&gt;
=== avatar != perm key ===&lt;br /&gt;
This is some debugging code that Lear had left exposed by mistake in some versions. It can be ignored; it is not really an error.&lt;br /&gt;
&lt;br /&gt;
If it is annoying, just update to the latest script set.  (Users can do this if the item is modifiable, but users should ask the maker first in case the maker has made custom modifications or is using add-on scripts.)&lt;br /&gt;
&lt;br /&gt;
=== OPTIONS menu doesn&#039;t work after deeding to group ===&lt;br /&gt;
If you deed an MLP, you lose the OPTIONS menu unless you remember to change all the OWNER menus to GROUP menus, and even then you won&#039;t be able to use full shutdown.&lt;br /&gt;
&lt;br /&gt;
=== Could not find animation &#039;00000000-0000-0000-0000-000000000000&#039; ===&lt;br /&gt;
Often one user will get this, and not another. Some have speculated it could be AO issues (even if the AO is turned off) or something indeterminate related to the avi. The speculation comes from forums where users have reported the issue and said that it went away as inexplicably as it started, by either a relog, clearing network cache, tping away and back, taking AO off completely for a bit, etc. Or went away over night.&lt;br /&gt;
&lt;br /&gt;
It could also be the asset server playing silly buggers, and a sim reboot (if possible) might solve it.&lt;br /&gt;
&lt;br /&gt;
In any event, what&#039;s certain is that there is nothing wrong with the actual MLP product.&lt;br /&gt;
&lt;br /&gt;
== Builder issues ==&lt;br /&gt;
&lt;br /&gt;
=== Animation xyx not found ===&lt;br /&gt;
* Check that the animation is indeed in the prim&lt;br /&gt;
* Check the spelling&lt;br /&gt;
* If you are using expression suffixes, check that you didn&#039;t put a space before the expression suffix&lt;br /&gt;
* Check that as a separator in POSE lines you have used only &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; or &amp;lt;pre&amp;gt;space|space&amp;lt;/pre&amp;gt; You can also use two spaces on each side of the vertical bar, but you cannot use three spaces: the superfluous space is not stripped away while reading the notecard; instead, it gets treated as part of the animation name, and thus the animation name can&#039;t be found.&lt;br /&gt;
* Also check for invisible soft-returns that may have come in if you were doing your work in another program such as Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
=== Animation won&#039;t remember its position ===&lt;br /&gt;
This can occur that even though you&#039;ve triple-checked all your work; there will be an animation that sometimes will come out in the right position, sometimes not. After a bit of head-banging, you realize it all depends on which animation you played just before it. If the creator of that animation did not set a hip position for it, you will get different results depending on which pose you ran last. That is, if you have 3 animations, 2 with hip positions and one without, the hip position for the one without will be left over from whichever of the last two animations you used. Which may throw your pose all off. There is nothing you can do except abandon use of the animation; the problem is in the animation itself, and it&#039;s not suitable for use with MLP-like scripts though it may work fine as sold in a static poseball.&lt;br /&gt;
&lt;br /&gt;
=== Balls rez on top of each other, even though you are sure you have positions right. ===&lt;br /&gt;
Check for duplicate stored positions. *Any* duplicate stored positions, even those not related to the pose in question, can cause this.&lt;br /&gt;
&lt;br /&gt;
Check for the memory script having blown up during booting. It&#039;s easy to miss this, as the error bubble only shows for a short time then goes away. To ensure you don&#039;t miss it, you can in Preferences for &amp;quot;Text Chat&amp;quot; turn on &amp;quot;Show script errors and warnings as regular chat.&amp;quot; That way, you&#039;ll be able to see such script problems even after problem bubble has faded.&lt;br /&gt;
&lt;br /&gt;
=== Balls: not enough rezzing ===&lt;br /&gt;
You have a Menu with poses that have 4 animations to them, but only 2 balls are rezzing. ||Check that you didn&#039;t tell the pose to only rez 2 balls. Example: &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK&amp;lt;/pre&amp;gt; for 4 animations should be something like &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK | BLUE | PINK&amp;lt;/pre&amp;gt; (or whatever) . Easy mistake for tired eyes to make!&lt;br /&gt;
&lt;br /&gt;
Also, check that you didn&#039;t drop the permission parameter. For instance, if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK | BLUE &amp;lt;/pre&amp;gt;&lt;br /&gt;
forgetting to put in there the [ALL | GROUP | OWNER] parameter, MLP will get mixed up, think that PINK is the permission parameter, and only rez the blue ball.&lt;br /&gt;
&lt;br /&gt;
if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK &amp;lt;/pre&amp;gt;&lt;br /&gt;
No balls will rez at all.&lt;br /&gt;
&lt;br /&gt;
Fix: put a permission parameter back in.&lt;br /&gt;
&lt;br /&gt;
===Booting up: MLP starts, gets a bit of the way, then goes no further ===&lt;br /&gt;
&lt;br /&gt;
Check that you have both a .MENUITEMS and .POSITIONS notecard in there.&lt;br /&gt;
&lt;br /&gt;
=== Couldn&#039;t find (script)&amp;quot; error ===&lt;br /&gt;
If you get a message like this upon first dragging and dropping the MLPv2 scripts into a prim, disregard it. It occurs because a prim contents are very slow to refresh in SL, and one script thinks another one is not there yet. Do nothing; it will sort itself out in a few seconds.&lt;br /&gt;
&lt;br /&gt;
=== llDialog: button labels must be 24 or fewer characters long ===&lt;br /&gt;
You have almost certainly forgotten a &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; in a POSE line. Consequently, the scripts were counting the Button name and the first animation name as the button name, making the button name too long. &lt;br /&gt;
&lt;br /&gt;
=== Notecards: I set my notecards to full-perm but customers can&#039;t open them to save positions, etc. ===&lt;br /&gt;
This happens if the object is no-modify.  You can&#039;t open notecards in a no-modify object. SL limitation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No Unused TOMENU&amp;quot; Getting this msg but I know that&#039;s not right ===&lt;br /&gt;
Check the top of your main MENUITEMS card, referring to the help in this section https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#.MENUITEMS.2A_NOTECARDS&lt;br /&gt;
&lt;br /&gt;
=== Props don&#039;t rez and I have everything right ===&lt;br /&gt;
# Make sure you have the ~props script in the MLP object.  (Actually, this won&#039;t keep the prop from rezzing; it will keep it from saving its position, and keep it from deleting itself when moving to a new pose.)&lt;br /&gt;
# MLP is very case sensitive. CHAT 2 in .MENUITEMS does not equal Chat 2 in the props notecard. Check to make sure the case matches.&lt;br /&gt;
# Watch the prim count on the parcel where you are working. If the available prim count is going down, then your prop is rezzing -- just not somewhere where you are seeing it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Script run-time error / Stack-Heap Collision&amp;quot; ===&lt;br /&gt;
This is a clue that, sadly, there are too many items in your .menuitems.xxx or .positions.xxx notecards for the script memory to handle. Congratulations, you&#039;ve just been initiated into the battle-scarred club like the rest of us.&lt;br /&gt;
&lt;br /&gt;
First, make sure the scripts are compiled Mono, not LSL.  By default they&#039;re Mono and you&#039;re better off if you do NOT recompile them.&lt;br /&gt;
&lt;br /&gt;
Second, make sure you have no unused positions stored in any .positions notecards. See tidying tip here https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;amp;action=submit#TIP.21_Positions_Notecard_tidying. Tidy, restart and see if that helps.&lt;br /&gt;
&lt;br /&gt;
Third: try optimizing your saved .POSITIONS.  If you have old .POSITIONS notecard data with lots of trailing zeros, you can get them trimmed down using this procedure:&lt;br /&gt;
&lt;br /&gt;
# drop .MENUITEMS.reorient (from MLP Tools box) in.&lt;br /&gt;
# Menu Reset.&lt;br /&gt;
# Use the Reorient menu to move all the poses by 1 cm. This will save all the poses, with only a small change. If you don&#039;t want the 1cm change, then just move it back 1cm after it finishes. Wait for both props and pose adjustment to complete! (Be patient!)&lt;br /&gt;
# dump pos, dump props, and save to appropriate notecards.&lt;br /&gt;
# Delete MENUITEMS.reorient, and restart.&lt;br /&gt;
&lt;br /&gt;
This will strip all the trailing zeros.&lt;br /&gt;
&lt;br /&gt;
Fourth: if your anims are mod, you can change the names.  Use short names, which take less memory.  Short button names also use less memory.&lt;br /&gt;
&lt;br /&gt;
The last resort is more drastic. You must give up on some poses, and delete their POSE lines from the .MENUITEMS* cards, and their position settings from the .POSITIONS* cards. You may leave the actual animations in the MLPv2 prim, but you might as well remove them as they won&#039;t be used anyway.&lt;br /&gt;
&lt;br /&gt;
=== What do I do about balls that are sunk into the mattress? ===&lt;br /&gt;
This problem is caused by the animation hip offset being too high.  One fix is to redo the animation and set the hip offset lower.  If you can&#039;t do that, then there are workarounds.&lt;br /&gt;
&lt;br /&gt;
One workaround is to make sure the first pose on every menu has a position where the balls are visible.&lt;br /&gt;
&lt;br /&gt;
The other workaround is to change the sit target in the poseball, so the balls will be higher for the same avatar positions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this will affect all poses, making the balls appear higher for all poses.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Pull out ~ball.  Open it, and edit the ~ball script inside.&lt;br /&gt;
# For MLPV2.4x and later, near the top of the script:&lt;br /&gt;
## Look for this: &amp;quot;vector SitTarget = &amp;lt;0.,0.,.1&amp;gt;&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;vector SitTarget = &amp;lt;0.,0.,-.4&amp;gt;&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Versions before MLPV2.4x:&lt;br /&gt;
## Look for this: &amp;quot;llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;, ZERO_ROTATION);&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;llSitTarget(&amp;lt;0.0,0.0,-.4&amp;gt;, ZERO_ROTATION);&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Take the ~ball object into inventory&lt;br /&gt;
# Delete ~ball from the MLPV2&lt;br /&gt;
# Drag the updated ~ball from inventory into the MLPV2&lt;br /&gt;
&lt;br /&gt;
This will make all the poses .5 M lower than they were, with the balls at the same place.  If that&#039;s a bigger change than you wanted, try -.2 or -.1 (that is, adjust to taste).&lt;br /&gt;
&lt;br /&gt;
For versions prior to MLPV2.4z6, you will then need to adjust all the positions to compensate.  I suggest you use the .MENUITEMS.reorient notecard for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run ===&lt;br /&gt;
Q: Heres what I have setup in the .sequences notecard:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SEQUENCE | Romantic&lt;br /&gt;
MENU | Romance&lt;br /&gt;
POSE | standing&lt;br /&gt;
AVWAIT | 0 | Waiting for someone to sit on ball&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Kiss&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Enter&lt;br /&gt;
WAIT | 15...&lt;br /&gt;
...REPEAT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It shows up in the menu selection, but no poseballs are rezzed when you select the sequence. Here&#039;s what I have in the .MENUITEMS notecard pertaining to the sequence-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Romantic&lt;br /&gt;
LINKMSG Romantic | 0,-4,-12001,SEQUENCE Romantic&lt;br /&gt;
LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
SWAP&lt;br /&gt;
STOP&lt;br /&gt;
BACK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A: Your problem is simple: you have two buttons with the same label, which isn&#039;t allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run or skips poses in it===&lt;br /&gt;
Currently (2011), the sequencer script won&#039;t complain to you if the poses you reference actually exist or not. You&#039;re on your own for making sure they actually exist and are named exactly the same (in a menu card) as the way you are referring to them. So watch for this.&lt;br /&gt;
&lt;br /&gt;
=== Xcite! features such as tilt  / arousal just don&#039;t seem to work ===&lt;br /&gt;
Make sure you have the latest set of partner scripts (as of Jan 2012, the latest release was I think in 2009.) Make sure your own Xcite! bits aren&#039;t horribly out of date -- you need 3.0 bits or higher. Contacting xcite help isn&#039;t of much use; as of mid 2011 they became non-responsive to business partners.&lt;br /&gt;
&lt;br /&gt;
That being said, features won&#039;t work unless the xcite partner script is set be either no copy or no transfer. They also won&#039;t work if the perms were wrong when you rezzed the product, so edit the script and reset it. That will make the script start to run -- it dies upon start up if perms on the script are wrong.&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183612</id>
		<title>MLPV2 Menu Maker Helper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183612"/>
		<updated>2013-11-16T14:13:18Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//won&#039;t make your MLP menu for you completely but will save you some typing time by giving you an outline of your menu based on a set of animations&lt;br /&gt;
//drop in a box of animations that are paired by name logically so that they will appear in alpha order in an inventory list.&lt;br /&gt;
//it will make an MLP menu giving POSE name to first animation in the set of two&lt;br /&gt;
//you may need to re-order M and F anims in the pose line depending on your style of creating MLP menu lines&lt;br /&gt;
//to use, copy this into a script, save, add script to a box which holds the animations you want to use, then click the box to run the script.&lt;br /&gt;
//WON&#039;T be useful with all animations because of course how animations are named varies wildly from animator to animator, and not even animators are consistent with their own styles and if such inconsistently named anims are also no mod, you&#039;re beat....&lt;br /&gt;
//Chaz Longstaff November 2013&lt;br /&gt;
//&lt;br /&gt;
//Sample of what this can produce for you&lt;br /&gt;
//[05:58]  POSE Cuddle 1 B|Cuddle 1 B|Cuddle 1 T&lt;br /&gt;
//[05:58]  POSE Kiss His Neck B|Kiss His Neck B|Kiss His Neck T&lt;br /&gt;
//[05:58]  POSE Relax Hug1 B|Relax Hug1 B|Relax Hug1 T&lt;br /&gt;
//[05:58]  POSE Sex Neck Kiss 01 B|Sex Neck Kiss 01 B|Sex Neck Kiss 01 T&lt;br /&gt;
//[05:58]  POSE Sex1 B|Sex1 B|Sex1 T&lt;br /&gt;
//[05:58]  POSE Sex1Brut B|Sex1Brut B|Sex1Brut T&lt;br /&gt;
//[05:58]  POSE Sex1BrutFast B|Sex1BrutFast B|Sex1BrutFast T&lt;br /&gt;
//[05:58]  POSE Sex1Fast B|Sex1Fast B|Sex1Fast T&lt;br /&gt;
//[05:58]  POSE SexLickTit B|SexLickTit B|SexLickTit T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mySay(string objectName, string msg) {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(objectName);&lt;br /&gt;
    llSay(0, &amp;quot;/me &amp;quot; + msg);&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list printObjectList(integer type) {&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(INVENTORY_ANIMATION);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
    integer count = 1;&lt;br /&gt;
    string myitem;&lt;br /&gt;
    string myitem1;&lt;br /&gt;
    string myitem2;&lt;br /&gt;
    integer type;   &lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    while(i &amp;lt; n) {&lt;br /&gt;
            &lt;br /&gt;
        string itemName = llGetInventoryName(INVENTORY_ANIMATION, i);&lt;br /&gt;
        type = llGetInventoryType(itemName);&lt;br /&gt;
            &lt;br /&gt;
        if (type == INVENTORY_ANIMATION) {&lt;br /&gt;
        &lt;br /&gt;
        string myitem = llGetInventoryName(type, i);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            myitem1 = myitem;&lt;br /&gt;
           // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem1);&lt;br /&gt;
        }&lt;br /&gt;
        else myitem2 = myitem;&lt;br /&gt;
        &lt;br /&gt;
        if (count == 2) {&lt;br /&gt;
        // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem2);&lt;br /&gt;
           mySay(&amp;quot;&amp;quot;,&amp;quot;POSE &amp;quot; + myitem1 + &amp;quot;|&amp;quot; + myitem1  + &amp;quot;|&amp;quot; + myitem2 ); &lt;br /&gt;
           count = 1;&lt;br /&gt;
           myitem = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem1 = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
           count = count + 1;  &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
               &lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//__________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string tmp = &amp;quot;all&amp;quot;;  &lt;br /&gt;
        integer type;      &lt;br /&gt;
&lt;br /&gt;
            type = INVENTORY_ALL;&lt;br /&gt;
 &lt;br /&gt;
        printObjectList(type);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183611</id>
		<title>MLPV2 Menu Maker Helper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183611"/>
		<updated>2013-11-16T14:11:07Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//won&#039;t make your MLP menu for you completely but will save you some typing time by giving you an outline of your menu based on a set of animations&lt;br /&gt;
//drop in a box of animations that are paired by name logically so that they will appear in alpha order in an inventory list.&lt;br /&gt;
//it will make an MLP menu giving POSE name to first animation in the set of two&lt;br /&gt;
//you may need to re-order M and F anims in the pose line depending on your style of creating MLP menu lines&lt;br /&gt;
//to use, copy this into a script, save, add script to a box which holds the animations you want to use, then click the box to run the script.&lt;br /&gt;
//Chaz Longstaff November 2013&lt;br /&gt;
//&lt;br /&gt;
//Sample of what this can produce for you&lt;br /&gt;
//[05:58]  POSE Cuddle 1 B|Cuddle 1 B|Cuddle 1 T&lt;br /&gt;
//[05:58]  POSE Kiss His Neck B|Kiss His Neck B|Kiss His Neck T&lt;br /&gt;
//[05:58]  POSE Relax Hug1 B|Relax Hug1 B|Relax Hug1 T&lt;br /&gt;
//[05:58]  POSE Sex Neck Kiss 01 B|Sex Neck Kiss 01 B|Sex Neck Kiss 01 T&lt;br /&gt;
//[05:58]  POSE Sex1 B|Sex1 B|Sex1 T&lt;br /&gt;
//[05:58]  POSE Sex1Brut B|Sex1Brut B|Sex1Brut T&lt;br /&gt;
//[05:58]  POSE Sex1BrutFast B|Sex1BrutFast B|Sex1BrutFast T&lt;br /&gt;
//[05:58]  POSE Sex1Fast B|Sex1Fast B|Sex1Fast T&lt;br /&gt;
//[05:58]  POSE SexLickTit B|SexLickTit B|SexLickTit T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mySay(string objectName, string msg) {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(objectName);&lt;br /&gt;
    llSay(0, &amp;quot;/me &amp;quot; + msg);&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list printObjectList(integer type) {&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(INVENTORY_ANIMATION);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
    integer count = 1;&lt;br /&gt;
    string myitem;&lt;br /&gt;
    string myitem1;&lt;br /&gt;
    string myitem2;&lt;br /&gt;
    integer type;   &lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    while(i &amp;lt; n) {&lt;br /&gt;
            &lt;br /&gt;
        string itemName = llGetInventoryName(INVENTORY_ANIMATION, i);&lt;br /&gt;
        type = llGetInventoryType(itemName);&lt;br /&gt;
            &lt;br /&gt;
        if (type == INVENTORY_ANIMATION) {&lt;br /&gt;
        &lt;br /&gt;
        string myitem = llGetInventoryName(type, i);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            myitem1 = myitem;&lt;br /&gt;
           // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem1);&lt;br /&gt;
        }&lt;br /&gt;
        else myitem2 = myitem;&lt;br /&gt;
        &lt;br /&gt;
        if (count == 2) {&lt;br /&gt;
        // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem2);&lt;br /&gt;
           mySay(&amp;quot;&amp;quot;,&amp;quot;POSE &amp;quot; + myitem1 + &amp;quot;|&amp;quot; + myitem1  + &amp;quot;|&amp;quot; + myitem2 ); &lt;br /&gt;
           count = 1;&lt;br /&gt;
           myitem = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem1 = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
           count = count + 1;  &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
               &lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//__________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string tmp = &amp;quot;all&amp;quot;;  &lt;br /&gt;
        integer type;      &lt;br /&gt;
&lt;br /&gt;
            type = INVENTORY_ALL;&lt;br /&gt;
 &lt;br /&gt;
        printObjectList(type);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183610</id>
		<title>MLPV2 Menu Maker Helper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183610"/>
		<updated>2013-11-16T14:08:46Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//won&#039;t make your MLP menu for you completely but will save you some typing time by giving you an outline of your menu based on a set of animations&lt;br /&gt;
//drop in a box of animations that are paired by name logically so that they will appear in alpha order in an inventory list.&lt;br /&gt;
//it will make an MLP menu giving POSE name to first animation in the set of two&lt;br /&gt;
//you may need to re-order M and F anims in the pose line depending on your style of creating MLP menu lines&lt;br /&gt;
//to use, copy this into a script, save, add script to a box which holds the animations you want to use, then click the box to run the script.&lt;br /&gt;
//Chaz Longstaff November 2013&lt;br /&gt;
//&lt;br /&gt;
//Sample of what this can produce for you&lt;br /&gt;
//[05:58]  POSE Cuddle 1 B|Cuddle 1 B|Cuddle 1 T&lt;br /&gt;
//[05:58]  POSE Kiss His Neck B|Kiss His Neck B|Kiss His Neck T&lt;br /&gt;
//[05:58]  POSE Relax Hug1 B|Relax Hug1 B|Relax Hug1 T&lt;br /&gt;
//[05:58]  POSE Sex Neck Kiss 01 B|Sex Neck Kiss 01 B|Sex Neck Kiss 01 T&lt;br /&gt;
//[05:58]  POSE Sex1 B|Sex1 B|Sex1 T&lt;br /&gt;
//[05:58]  POSE Sex1Brut B|Sex1Brut B|Sex1Brut T&lt;br /&gt;
//[05:58]  POSE Sex1BrutFast F|Sex1BrutFast F|Sex1BrutFast T&lt;br /&gt;
//[05:58]  POSE Sex1Fast B|Sex1Fast B|Sex1Fast T&lt;br /&gt;
//[05:58]  POSE SexLickTit B|SexLickTit B|SexLickTit T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mySay(string objectName, string msg) {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(objectName);&lt;br /&gt;
    llSay(0, &amp;quot;/me &amp;quot; + msg);&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list printObjectList(integer type) {&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(INVENTORY_ANIMATION);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
    integer count = 1;&lt;br /&gt;
    string myitem;&lt;br /&gt;
    string myitem1;&lt;br /&gt;
    string myitem2;&lt;br /&gt;
    integer type;   &lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    while(i &amp;lt; n) {&lt;br /&gt;
            &lt;br /&gt;
        string itemName = llGetInventoryName(INVENTORY_ANIMATION, i);&lt;br /&gt;
        type = llGetInventoryType(itemName);&lt;br /&gt;
            &lt;br /&gt;
        if (type == INVENTORY_ANIMATION) {&lt;br /&gt;
        &lt;br /&gt;
        string myitem = llGetInventoryName(type, i);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            myitem1 = myitem;&lt;br /&gt;
           // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem1);&lt;br /&gt;
        }&lt;br /&gt;
        else myitem2 = myitem;&lt;br /&gt;
        &lt;br /&gt;
        if (count == 2) {&lt;br /&gt;
        // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem2);&lt;br /&gt;
           mySay(&amp;quot;&amp;quot;,&amp;quot;POSE &amp;quot; + myitem1 + &amp;quot;|&amp;quot; + myitem1  + &amp;quot;|&amp;quot; + myitem2 ); &lt;br /&gt;
           count = 1;&lt;br /&gt;
           myitem = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem1 = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
           count = count + 1;  &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
               &lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//__________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string tmp = &amp;quot;all&amp;quot;;  &lt;br /&gt;
        integer type;      &lt;br /&gt;
&lt;br /&gt;
            type = INVENTORY_ALL;&lt;br /&gt;
 &lt;br /&gt;
        printObjectList(type);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183609</id>
		<title>MLPV2 Menu Maker Helper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183609"/>
		<updated>2013-11-16T14:02:12Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//won&#039;t make your MLP menu for you completely but will save you some typing time by giving you an outline of your menu based on a set of animations&lt;br /&gt;
//drop in a box of animations that are paired by name logically so that they will appear in alpha order in an inventory list.&lt;br /&gt;
//it will make an MLP menu giving POSE name to first animation in the set of two&lt;br /&gt;
//you may need to re-order M and F anims in the pose line depending on your style of creating MLP menu lines&lt;br /&gt;
//Chaz Longstaff November 2013&lt;br /&gt;
//&lt;br /&gt;
//Sample of what this can produce for you&lt;br /&gt;
//[05:58]  POSE Cuddle 1 B|Cuddle 1 B|Cuddle 1 T&lt;br /&gt;
//[05:58]  POSE Kiss His Neck B|Kiss His Neck B|Kiss His Neck T&lt;br /&gt;
//[05:58]  POSE Relax Hug1 B|Relax Hug1 B|Relax Hug1 T&lt;br /&gt;
//[05:58]  POSE Sex Neck Kiss 01 B|Sex Neck Kiss 01 B|Sex Neck Kiss 01 T&lt;br /&gt;
//[05:58]  POSE Sex1 B|Sex1 B|Sex1 T&lt;br /&gt;
//[05:58]  POSE Sex1Brut B|Sex1Brut B|Sex1Brut T&lt;br /&gt;
//[05:58]  POSE Sex1BrutFast F|Sex1BrutFast F|Sex1BrutFast T&lt;br /&gt;
//[05:58]  POSE Sex1Fast B|Sex1Fast B|Sex1Fast T&lt;br /&gt;
//[05:58]  POSE SexLickTit B|SexLickTit B|SexLickTit T&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mySay(string objectName, string msg) {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(objectName);&lt;br /&gt;
    llSay(0, &amp;quot;/me &amp;quot; + msg);&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list printObjectList(integer type) {&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(INVENTORY_ANIMATION);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
    integer count = 1;&lt;br /&gt;
    string myitem;&lt;br /&gt;
    string myitem1;&lt;br /&gt;
    string myitem2;&lt;br /&gt;
    integer type;   &lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    while(i &amp;lt; n) {&lt;br /&gt;
            &lt;br /&gt;
        string itemName = llGetInventoryName(INVENTORY_ANIMATION, i);&lt;br /&gt;
        type = llGetInventoryType(itemName);&lt;br /&gt;
            &lt;br /&gt;
        if (type == INVENTORY_ANIMATION) {&lt;br /&gt;
        &lt;br /&gt;
        string myitem = llGetInventoryName(type, i);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            myitem1 = myitem;&lt;br /&gt;
           // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem1);&lt;br /&gt;
        }&lt;br /&gt;
        else myitem2 = myitem;&lt;br /&gt;
        &lt;br /&gt;
        if (count == 2) {&lt;br /&gt;
        // llSay(0, (string)count + &amp;quot; &amp;quot; + myitem2);&lt;br /&gt;
           mySay(&amp;quot;&amp;quot;,&amp;quot;POSE &amp;quot; + myitem1 + &amp;quot;|&amp;quot; + myitem1  + &amp;quot;|&amp;quot; + myitem2 ); &lt;br /&gt;
           count = 1;&lt;br /&gt;
           myitem = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem1 = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
           count = count + 1;  &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
               &lt;br /&gt;
}&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//__________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string tmp = &amp;quot;all&amp;quot;;  &lt;br /&gt;
        integer type;      &lt;br /&gt;
&lt;br /&gt;
            type = INVENTORY_ALL;&lt;br /&gt;
 &lt;br /&gt;
        printObjectList(type);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183608</id>
		<title>MLPV2 Menu Maker Helper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Menu_Maker_Helper&amp;diff=1183608"/>
		<updated>2013-11-16T13:40:05Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Created page with &amp;quot;&amp;lt;lsl&amp;gt; //won&amp;#039;t make your MLP menu for you completely but will save you some typing time //drop in a box of animations that are paired by name logically so that they will appear in…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
//won&#039;t make your MLP menu for you completely but will save you some typing time&lt;br /&gt;
//drop in a box of animations that are paired by name logically so that they will appear in alpha order in an inventory list&lt;br /&gt;
//it will make an MLP menu giving POSE name to first animation in the set of two&lt;br /&gt;
//you may need to re-order M and F anims in the pose line&lt;br /&gt;
//Chaz Longstaff November 2013&lt;br /&gt;
//&lt;br /&gt;
//Sample of what this can produce for you&lt;br /&gt;
//[05:26]  POSE Cuddle 1 M|Cuddle 1 M|Kiss His Neck F&lt;br /&gt;
//[05:26]  POSE Relax Hug1 M|Relax Hug1 M|Sex Neck Kiss 01 F&lt;br /&gt;
//[05:26]  POSE Sex1 M|Sex1 M|Sex1 F&lt;br /&gt;
//[05:26]  POSE Sex1Brut M|Sex1Brut M|Sex1Brut F&lt;br /&gt;
//[05:26]  POSE Sex1BrutFast M|Sex1BrutFast M|Sex1BrutFast F&lt;br /&gt;
//[05:26]  POSE Sex1Fast M|Sex1Fast M|SexLickTit F&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mySay(string objectName, string msg) {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(objectName);&lt;br /&gt;
    llSay(0, &amp;quot;/me &amp;quot; + msg);&lt;br /&gt;
    llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list printObjectList(integer type) {&lt;br /&gt;
    list       result = [];&lt;br /&gt;
    integer    n = llGetInventoryNumber(type);&lt;br /&gt;
    integer    i = 0;&lt;br /&gt;
    integer count = 0;&lt;br /&gt;
    string myitem;&lt;br /&gt;
    string myitem1;&lt;br /&gt;
    string myitem2;&lt;br /&gt;
    integer type;   &lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    while(i &amp;lt; n) {&lt;br /&gt;
            &lt;br /&gt;
        string itemName = llGetInventoryName(INVENTORY_ALL, i);&lt;br /&gt;
        type = llGetInventoryType(itemName);&lt;br /&gt;
            &lt;br /&gt;
        if (type != INVENTORY_ANIMATION) {&lt;br /&gt;
        jump gonext;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        string myitem = llGetInventoryName(type, i);&lt;br /&gt;
        if (count == 1) {&lt;br /&gt;
            myitem1 = myitem;&lt;br /&gt;
        }&lt;br /&gt;
        else myitem2 = myitem;&lt;br /&gt;
        &lt;br /&gt;
        if (count == 2) {&lt;br /&gt;
           mySay(&amp;quot;&amp;quot;,&amp;quot;POSE &amp;quot; + myitem1 + &amp;quot;|&amp;quot; + myitem1  + &amp;quot;|&amp;quot; + myitem2 ); &lt;br /&gt;
           count = 0;&lt;br /&gt;
           myitem = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem1 = &amp;quot;&amp;quot;;&lt;br /&gt;
           myitem2 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
           count = count + 1;  &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
               &lt;br /&gt;
        @gonext;&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        ++i;&lt;br /&gt;
    }&lt;br /&gt;
    mySay(&amp;quot;&amp;quot;, &amp;quot;__________________________________________&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//__________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    state_entry() {&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY) {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number) {&lt;br /&gt;
        string tmp = &amp;quot;all&amp;quot;;  &lt;br /&gt;
        integer type;      &lt;br /&gt;
&lt;br /&gt;
            type = INVENTORY_ALL;&lt;br /&gt;
 &lt;br /&gt;
        printObjectList(type);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1183607</id>
		<title>MLPV2 Addons</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Addons&amp;diff=1183607"/>
		<updated>2013-11-16T13:38:37Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
*[[MLPV2 Give Item Add-on]]&lt;br /&gt;
*[[MLPV2 Give Folder Add-on]]&lt;br /&gt;
*[[MLPV2 Give Items in Folder to a Specific Person]]&lt;br /&gt;
*[[Check Animations Permissions Tool]]&lt;br /&gt;
*[[Cleaner MLP Say|&amp;quot;Cleaner&amp;quot; MLP Say]]&lt;br /&gt;
*[[MLPV2_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2 Color Changer Add-on]]&lt;br /&gt;
*[[MLPV2_Props_Texture_Changer_Add-on]]&lt;br /&gt;
*[[MLPV2_Ambiant_Sound_Add-on]]&lt;br /&gt;
*[[MLPV2_RLV_Plugin]]&lt;br /&gt;
*[[MLPV2_RLV_Capture_Plugin]]&lt;br /&gt;
*[[Reset_from_Child_Plugin]]&lt;br /&gt;
*[[MLPV2 Ball Script with more flexible parameters]]&lt;br /&gt;
*[[MLPV2 Menu Maker Helper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [[MLPV2_Balls_Patch]]: Use different balls for ~ball0...5&lt;br /&gt;
* [[MLPV2_LockGuard_plugin]]: Add LockGuard support to MLP2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
*[[Script to report on who made which animations in a prim]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Give_Items_in_Folder_to_a_Specific_Person&amp;diff=1177502</id>
		<title>MLPV2 Give Items in Folder to a Specific Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Give_Items_in_Folder_to_a_Specific_Person&amp;diff=1177502"/>
		<updated>2013-03-29T20:00:13Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Back to [[MLPV2_Addons]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//add-on by Chaz Longstff for MLPV2 by Lear Cale. August 2011. Give 2 v.001&lt;br /&gt;
//Function: gives object to a specific person on an MLPV2 ball&lt;br /&gt;
//&lt;br /&gt;
//in a menu card, format a menu button like this, for example:&lt;br /&gt;
//LINKMSG MyButtonName | 0,-4,987789,Cuff1#Cuff2#Cuff3#Cuff4##FolderName##0##Wear these four cuffs.&lt;br /&gt;
//In this example, MyButtonName is the button name&lt;br /&gt;
//0 means whether to make the MLPV2 menu go away or not. Generally set it to 0 as per the example, so the menu comes back (taking advantage of new 2.x and higher viewers). To make the MLPV2 menu go away, use 1 instead.&lt;br /&gt;
//-4 -- the value of LINK_THIS, meaning, send this message to this prim only. (Use -1 if the ~give2 script is in a different prim.)&lt;br /&gt;
//987789 -- don&#039;t change this, this is the communication channel&lt;br /&gt;
//Cuff1#Cuff2#Cuff3#Cuff4 -- (The items to give are separated by a single # &lt;br /&gt;
//##FolderName: the name of the folder to put the stuff in. Note that it needs to be preceded by a double ##.&lt;br /&gt;
//##0  -- (offer to person on which ball? 0, 1, 2, 3, 4, 5 . You can leave blank if the person to receive is the person who is operating the menu, this is default behaviour.)&lt;br /&gt;
//##Wear these four cuffs -- Msg to receiver. (Note that it needs to be preceded by a double ##.  It&#039;s good to include a msg, so that they don&#039;t think it&#039;s a griefer trying to hand them something. However, you can leave this param blank if you wish.&lt;br /&gt;
//Caution: There is a linden script limit of 255 bytes of info that can be read from a notecard line. Practically speaking, that means you are limited to say maybe 225, 230 characters in total that you can have in this LINKMSG line. So if you are giving several items to wear in one folder, keep the items names short and sweet, or your whole line will get truncated randomly, just cut right off.&lt;br /&gt;
 &lt;br /&gt;
//parameters &lt;br /&gt;
string ObjectToGive;&lt;br /&gt;
string message;&lt;br /&gt;
integer x;&lt;br /&gt;
list    Avnames = [&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;];&lt;br /&gt;
key GiveToID;&lt;br /&gt;
string FolderName;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
addAv(string id, integer ballIx) {&lt;br /&gt;
    Avnames = llListReplaceList(Avnames, (list)id, ballIx, ballIx);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
removeAv(integer ballIx) {&lt;br /&gt;
    addAv(&amp;quot;&amp;quot;, ballIx);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
myMsg() {&lt;br /&gt;
    string name = llGetObjectName();&lt;br /&gt;
    llSetObjectName(&amp;quot;Blue Balls&amp;quot;);&lt;br /&gt;
    //change the text &amp;quot;Blue Balls&amp;quot; to anything you like, such as your own Brand Name&lt;br /&gt;
    llInstantMessage(GiveToID,message + &amp;quot; &amp;quot; + FolderName);&lt;br /&gt;
    if (name != &amp;quot;&amp;quot;) llSetObjectName(name);&lt;br /&gt;
}&lt;br /&gt;
//_________________________&lt;br /&gt;
default{&lt;br /&gt;
   link_message(integer from, integer num, string str, key id) { &lt;br /&gt;
   &lt;br /&gt;
    if (num == -11000) {&lt;br /&gt;
            // av hopped on&lt;br /&gt;
            list parms = llParseStringKeepNulls(str, [&amp;quot;|&amp;quot;], []);&lt;br /&gt;
            integer ballnum = (integer)llList2String(parms, 0);&lt;br /&gt;
            // string anim = llList2String(parms, 1);     // anim name parameter, if desired&lt;br /&gt;
            //debug(4, llKey2Name(dkey) + &amp;quot;: on ball &amp;quot; + (string)ballnum);&lt;br /&gt;
            addAv((string)id, ballnum);&lt;br /&gt;
            return;&lt;br /&gt;
&lt;br /&gt;
        } else if (num == -11001) {&lt;br /&gt;
            // av hopped off&lt;br /&gt;
            //debug(4, llKey2Name(dkey) + &amp;quot;: off ball &amp;quot; + str);&lt;br /&gt;
            removeAv((integer)str);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
       else if (num == 987789) {&lt;br /&gt;
           //llSay(0, &amp;quot;test:&amp;quot; + str);&lt;br /&gt;
            string idtogiveto = &amp;quot;&amp;quot;;&lt;br /&gt;
            list TempList = llParseStringKeepNulls(str,[&amp;quot;##&amp;quot;],[]);&lt;br /&gt;
            string Objects = llStringTrim(llList2String(TempList, 0),STRING_TRIM);&lt;br /&gt;
            list ObjectsToGive = llParseStringKeepNulls(Objects,[&amp;quot;#&amp;quot;],[]);&lt;br /&gt;
            integer GiveLength = llGetListLength(ObjectsToGive);&lt;br /&gt;
            FolderName = llStringTrim(llList2String(TempList, 1),STRING_TRIM);&lt;br /&gt;
            string ball = llStringTrim(llList2String(TempList, 2),STRING_TRIM);&lt;br /&gt;
            message = llStringTrim(llList2String(TempList, 3),STRING_TRIM);&lt;br /&gt;
            &lt;br /&gt;
            if (ball != &amp;quot;&amp;quot;) {&lt;br /&gt;
                idtogiveto = llStringTrim(llList2String(Avnames,(integer)ball),STRING_TRIM);&lt;br /&gt;
            }&lt;br /&gt;
            //llSay(0, idtogiveto);&lt;br /&gt;
            if (idtogiveto == &amp;quot;&amp;quot;) {&lt;br /&gt;
                GiveToID = id;&lt;br /&gt;
                //llSay(0, (string)GiveToID);&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            else GiveToID = (key)idtogiveto;&lt;br /&gt;
            if (GiveLength != 0) {&lt;br /&gt;
                if (message != &amp;quot;&amp;quot;) {&lt;br /&gt;
                   myMsg();&lt;br /&gt;
                }&lt;br /&gt;
            llGiveInventoryList(GiveToID, FolderName, ObjectsToGive);&lt;br /&gt;
&lt;br /&gt;
            }//end of checking GiveLength&lt;br /&gt;
       } //end of if check for the right channel&lt;br /&gt;
   } //end link_message event&lt;br /&gt;
} //end default state&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=StMatthewsByTheSea&amp;diff=1162211</id>
		<title>StMatthewsByTheSea</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=StMatthewsByTheSea&amp;diff=1162211"/>
		<updated>2012-01-28T11:50:22Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== St Matthew&#039;s by-the-Sea Episcopal Chapel ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Find Us in Second Life&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Divine%20Forest/85/234/22 St Matthew&#039;s Chapel]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;About Us&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
St. Matthew&#039;s by-the-Sea is an inclusive and affirming Episcopal /Anglican chapel.&lt;br /&gt;
&lt;br /&gt;
We are one of the most active, ongoing &amp;quot;church&amp;quot; groups in SL.&lt;br /&gt;
&lt;br /&gt;
We are an LGBT friendly community but that is just one facet of us; we are broadly-based and focus on people as people. You do not have to be an Episcopalian, Anglican or even Christian to be part of our community.&lt;br /&gt;
&lt;br /&gt;
We gather regularly for Compline Mon-Thu at 8pm SLT. Please join us! The service is short, normally lasting only 20 to 25 minutes. We just read a service together from the Book of Common Prayer; there is no sermon to endure, etc, etc. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In World Groups&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Join the Friends of St. Matthew&#039;s group if you would like to know what is going on at the Chapel and get Group Notices of services.&lt;br /&gt;
&lt;br /&gt;
We also send notices and group IM&#039;s through the Inclusive Anglicans of Second Life, the LGBT Christian Community and the Episcopalians of Second Life.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For More Information Contact&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Caoilin Galthie at caoilingalthie@gmail.com&lt;br /&gt;
&lt;br /&gt;
Visit our [http://stmattsinsl.wordpress.com/ St. Matthew&#039;s by-the-Sea blog].&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=StMatthewsByTheSea&amp;diff=1162210</id>
		<title>StMatthewsByTheSea</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=StMatthewsByTheSea&amp;diff=1162210"/>
		<updated>2012-01-28T11:49:43Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== St Matthew&#039;s by-the-Sea Episcopal Chapel ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Find Us in Second Life&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://slurl.com/secondlife/Divine%20Forest/85/234/22 St Matthew&#039;s Chapel]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;About Us&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
St. Matthew&#039;s by-the-Sea is an inclusive and affirming Episcopal /Anglican chapel.&lt;br /&gt;
&lt;br /&gt;
We are one of the most active, ongoing &amp;quot;church&amp;quot; groups in SL.&lt;br /&gt;
&lt;br /&gt;
We are an LGBT friendly community but that is just once facet of us; we are broadly-based and focus on people as people. You do not have to be an Episcopalian, Anglican or even Christian to be part of our community.&lt;br /&gt;
&lt;br /&gt;
We gather regularly for Compline Mon-Thu at 8pm SLT. Please join us! The service is short, normally lasting only 20 to 25 minutes. We just read a service together from the Book of Common Prayer; there is no sermon to endure, etc, etc. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In World Groups&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Join the Friends of St. Matthew&#039;s group if you would like to know what is going on at the Chapel and get Group Notices of services.&lt;br /&gt;
&lt;br /&gt;
We also send notices and group IM&#039;s through the Inclusive Anglicans of Second Life, the LGBT Christian Community and the Episcopalians of Second Life.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For More Information Contact&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Caoilin Galthie at caoilingalthie@gmail.com&lt;br /&gt;
&lt;br /&gt;
Visit our [http://stmattsinsl.wordpress.com/ St. Matthew&#039;s by-the-Sea blog].&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161671</id>
		<title>MLPV2 Public Domain Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161671"/>
		<updated>2012-01-19T09:10:37Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
==Animations: Which are public-domain, which are not?==&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;i&amp;gt;If you want to be added to one of the lists below and don&#039;t know how to edit a wiki page, just IM Chaz Longstaff and indicate in your IM the section to add you to.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beginning furniture makers or experimenters often don’t have the money and / or confidence yet to invest in buying licenced animations.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of the status of animations from various animators. It&#039;s to help you determine which animations you can safely regard as being in the public domain (i.e. &amp;quot;freebies&amp;quot;), versus which ones might be illegally floating around as pirated animations. Using pirated animations -- knowingly or unknowingly, it&#039;s the same -- can cause your creations to be deleted by LL and get you a bad reputation just when you are starting out and trying to get known.&lt;br /&gt;
&lt;br /&gt;
Now, just because the animations are in the public domain doesn&#039;t always make them &amp;quot;good quality&amp;quot; -- they can be dated, and show their age, which can be why they were released at a certain point for free. But when you are just started out and practising, or want to make a few things just for friends, they can be very useful.&lt;br /&gt;
&lt;br /&gt;
In the lists below, &amp;quot;confirmed in conversation with CL&amp;quot; -- the CL stands for Chaz Longstaff.&lt;br /&gt;
&lt;br /&gt;
===Genuine freebies (last updated 19 Jan 2012)===&lt;br /&gt;
* Ayla Holt [5]&lt;br /&gt;
* Betray Resident [5]&lt;br /&gt;
* Butcher Cassidy (confirmed in conversation with CL)&lt;br /&gt;
* Chip Midnight (confirmed in conversation with CL)&lt;br /&gt;
* Damien Fate (confirmed in conversation with CL)&lt;br /&gt;
* Emma Thorn (confirmed in conversation with CL 3 August 2008)&lt;br /&gt;
* Fleabite Beach (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
* Jayce Tearfall [5]&lt;br /&gt;
* Kammie Rayna [5]&lt;br /&gt;
* Linda Kellie [5]&lt;br /&gt;
* linkin Slate (confirmed in conversation with CL)&lt;br /&gt;
* Sin Delight [5]&lt;br /&gt;
* Ulrika Zugzwang (from her profile, noted by CL)&lt;br /&gt;
* YadNi Monde (confirmed in conversation with CL)&lt;br /&gt;
* Yuriko Nishi (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
&lt;br /&gt;
===Animators whose stuff always requires a licence (last updated September 15th, 2008)===&lt;br /&gt;
* Animator Ragu&lt;br /&gt;
* Beau Perkins&lt;br /&gt;
* Bella Beleza&lt;br /&gt;
* Ben Stravinsky&lt;br /&gt;
* Cita Boa&lt;br /&gt;
* Craig Altman&lt;br /&gt;
* Damen Gorilla&lt;br /&gt;
* Dylan Rickenbacker&lt;br /&gt;
* fana dechou&lt;br /&gt;
* Furr Burt&lt;br /&gt;
* Johan Durant&lt;br /&gt;
* loufa Shilova&lt;br /&gt;
* Medhue Simoni&lt;br /&gt;
* mikeD Streeter&lt;br /&gt;
* Natalie Oe (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nya Raymaker / Jolly Lovenkraft (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nytemyst Grace&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Parsalin Gullwing&lt;br /&gt;
* Sandy Clymer&lt;br /&gt;
* Sin Toshi&lt;br /&gt;
* Siryn Rosse (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* store Allen&lt;br /&gt;
* suzi sohmers&lt;br /&gt;
* Tara Bournemouth&lt;br /&gt;
* trebbort subagja&lt;br /&gt;
* Varon Kappler&lt;br /&gt;
* Zoe Biggles&lt;br /&gt;
&lt;br /&gt;
===Animators who never licence their stuff [1] (last updated September 15th, 2008)===&lt;br /&gt;
* Abramelin Wolfe&lt;br /&gt;
* Cheree Bury (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Darkness Anubis&lt;br /&gt;
* Desiree Bisiani (and Cheewha Palen)&lt;br /&gt;
* Flip Fitzsimmons&lt;br /&gt;
* Hol ALexander&lt;br /&gt;
* jamie Cheeky&lt;br /&gt;
* Jennifer Brennon&lt;br /&gt;
* Lizz Silverstar&lt;br /&gt;
* niknak Bugaboo&lt;br /&gt;
* Paul Llewelyn&lt;br /&gt;
* Paul Lobo&lt;br /&gt;
* Phil Deakins&lt;br /&gt;
* Ravanne Sullivan&lt;br /&gt;
* Renee Irwin&lt;br /&gt;
* Riann Maltese&lt;br /&gt;
&lt;br /&gt;
===Animators who produce both licenced and freebie stuff [2] (last updated September 15th, 2008)===&lt;br /&gt;
* Darien Caldwell (confirmed in conversation)&lt;br /&gt;
* Deira Llanfair  (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Ferran Brodsky (confirmed in conversation with CL)&lt;br /&gt;
* Indika Herbst (confirmed in conversation with CL)&lt;br /&gt;
* Lear Cale (confirmed in conversation with CL)&lt;br /&gt;
* LordJason Kiesler (confirmed in conversation with CL)&lt;br /&gt;
* Starlight Kiesler (confirmed in conversation with CL)&lt;br /&gt;
&lt;br /&gt;
===Animators who released some freebies in the past but now never licence their stuff [3] (last updated September 15th, 2008)===&lt;br /&gt;
* Neo Virgo (confirmed in conversation with CL 5 July 2008)&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Shukran Fahid (confirmed in conversation with CL 24 Aug 2008. Please do not contact him about these freebies as he is no longer in possession of them; you must obtain them from somewhere else. And, they are not supported.)&lt;br /&gt;
&lt;br /&gt;
===Creator no longer exists [4] (last updated September 15th, 2008)===&lt;br /&gt;
* Cid Jacob&lt;br /&gt;
* Eva Capalini&lt;br /&gt;
&lt;br /&gt;
===Status Uncertain===&lt;br /&gt;
(IM’ed / emailed a minimum of 3 times, but no response. Attempts to contact them have been abandoned. Last updated September 15th, 2008)&lt;br /&gt;
* Cristiano Midnight&lt;br /&gt;
* Dyonis Blanc&lt;br /&gt;
* Gwinivere Grayson&lt;br /&gt;
* Kiari LeFay&lt;br /&gt;
* Kris Gullwing&lt;br /&gt;
* Launa Fauna&lt;br /&gt;
* Michael Firefly&lt;br /&gt;
* Princess Medici&lt;br /&gt;
* Remo Yossarian&lt;br /&gt;
* stephenpaul Bliss (reportedly no longer active in SL; status of his animations uncertain.)&lt;br /&gt;
&lt;br /&gt;
* Sine Wave (various creators). Released the following genuine freebies: Lime Jelly, Hipster, We love you girl, and We love you boy. There is a full-perm version of Caramel circulating, but its release was accidental.&lt;br /&gt;
&lt;br /&gt;
===FOOTNOTES===&lt;br /&gt;
&lt;br /&gt;
[1] if you see these animations being used by anyone but them, they are likely pirated.&lt;br /&gt;
&lt;br /&gt;
[2] You need to check with these animators when free stuff created by them comes into your hands.&lt;br /&gt;
&lt;br /&gt;
[3] These people released some stuff as freebies in the distant past, but now only produce animations for their own use, and never licence any of these current ones out.&lt;br /&gt;
&lt;br /&gt;
[4] An effort was made at clarification but no real determination of status was possible owing to the accounts having been deleted from SL. Use at your own risk.&lt;br /&gt;
&lt;br /&gt;
[5] Ayla Holt and Kammie Rayna were avatars used by Linda Kellie. Public domain status in all OpenSim or SL grids was confirmed on 17 January 2012 in conversation with Reven Rosca. Also confirmed on Linda&#039;s website, http://www.lindakellie.com/ (link valid as of 19 January 2012), from where the source files for her animations can be downloaded.&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161670</id>
		<title>MLPV2 Public Domain Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161670"/>
		<updated>2012-01-19T09:09:19Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
==Animations: Which are public-domain, which are not?==&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;i&amp;gt;this list has generally been maintained by Chaz Longstaff. If you want to be added to one of the lists below and don&#039;t know how to edit a wiki page, just IM him and he will add you to the appropriate section that you indicate (please indicate in your IM the section.)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beginning furniture makers or experimenters often don’t have the money and / or confidence yet to invest in buying licenced animations.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of the status of animations from various animators. It&#039;s to help you determine which animations you can safely regard as being in the public domain (i.e. &amp;quot;freebies&amp;quot;), versus which ones might be illegally floating around as pirated animations. Using pirated animations -- knowingly or unknowingly, it&#039;s the same -- can cause your creations to be deleted by LL and get you a bad reputation just when you are starting out and trying to get known.&lt;br /&gt;
&lt;br /&gt;
Now, just because the animations are in the public domain doesn&#039;t always make them &amp;quot;good quality&amp;quot; -- they can be dated, and show their age, which can be why they were released at a certain point for free. But when you are just started out and practising, or want to make a few things just for friends, they can be very useful.&lt;br /&gt;
&lt;br /&gt;
In the lists below, &amp;quot;confirmed in conversation with CL&amp;quot; -- the CL stands for Chaz Longstaff.&lt;br /&gt;
&lt;br /&gt;
===Genuine freebies (last updated 19 Jan 2012)===&lt;br /&gt;
* Ayla Holt [5]&lt;br /&gt;
* Betray Resident [5]&lt;br /&gt;
* Butcher Cassidy (confirmed in conversation with CL)&lt;br /&gt;
* Chip Midnight (confirmed in conversation with CL)&lt;br /&gt;
* Damien Fate (confirmed in conversation with CL)&lt;br /&gt;
* Emma Thorn (confirmed in conversation with CL 3 August 2008)&lt;br /&gt;
* Fleabite Beach (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
* Jayce Tearfall [5]&lt;br /&gt;
* Kammie Rayna [5]&lt;br /&gt;
* Linda Kellie [5]&lt;br /&gt;
* linkin Slate (confirmed in conversation with CL)&lt;br /&gt;
* Sin Delight [5]&lt;br /&gt;
* Ulrika Zugzwang (from her profile, noted by CL)&lt;br /&gt;
* YadNi Monde (confirmed in conversation with CL)&lt;br /&gt;
* Yuriko Nishi (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
&lt;br /&gt;
===Animators whose stuff always requires a licence (last updated September 15th, 2008)===&lt;br /&gt;
* Animator Ragu&lt;br /&gt;
* Beau Perkins&lt;br /&gt;
* Bella Beleza&lt;br /&gt;
* Ben Stravinsky&lt;br /&gt;
* Cita Boa&lt;br /&gt;
* Craig Altman&lt;br /&gt;
* Damen Gorilla&lt;br /&gt;
* Dylan Rickenbacker&lt;br /&gt;
* fana dechou&lt;br /&gt;
* Furr Burt&lt;br /&gt;
* Johan Durant&lt;br /&gt;
* loufa Shilova&lt;br /&gt;
* Medhue Simoni&lt;br /&gt;
* mikeD Streeter&lt;br /&gt;
* Natalie Oe (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nya Raymaker / Jolly Lovenkraft (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nytemyst Grace&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Parsalin Gullwing&lt;br /&gt;
* Sandy Clymer&lt;br /&gt;
* Sin Toshi&lt;br /&gt;
* Siryn Rosse (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* store Allen&lt;br /&gt;
* suzi sohmers&lt;br /&gt;
* Tara Bournemouth&lt;br /&gt;
* trebbort subagja&lt;br /&gt;
* Varon Kappler&lt;br /&gt;
* Zoe Biggles&lt;br /&gt;
&lt;br /&gt;
===Animators who never licence their stuff [1] (last updated September 15th, 2008)===&lt;br /&gt;
* Abramelin Wolfe&lt;br /&gt;
* Cheree Bury (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Darkness Anubis&lt;br /&gt;
* Desiree Bisiani (and Cheewha Palen)&lt;br /&gt;
* Flip Fitzsimmons&lt;br /&gt;
* Hol ALexander&lt;br /&gt;
* jamie Cheeky&lt;br /&gt;
* Jennifer Brennon&lt;br /&gt;
* Lizz Silverstar&lt;br /&gt;
* niknak Bugaboo&lt;br /&gt;
* Paul Llewelyn&lt;br /&gt;
* Paul Lobo&lt;br /&gt;
* Phil Deakins&lt;br /&gt;
* Ravanne Sullivan&lt;br /&gt;
* Renee Irwin&lt;br /&gt;
* Riann Maltese&lt;br /&gt;
&lt;br /&gt;
===Animators who produce both licenced and freebie stuff [2] (last updated September 15th, 2008)===&lt;br /&gt;
* Darien Caldwell (confirmed in conversation)&lt;br /&gt;
* Deira Llanfair  (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Ferran Brodsky (confirmed in conversation with CL)&lt;br /&gt;
* Indika Herbst (confirmed in conversation with CL)&lt;br /&gt;
* Lear Cale (confirmed in conversation with CL)&lt;br /&gt;
* LordJason Kiesler (confirmed in conversation with CL)&lt;br /&gt;
* Starlight Kiesler (confirmed in conversation with CL)&lt;br /&gt;
&lt;br /&gt;
===Animators who released some freebies in the past but now never licence their stuff [3] (last updated September 15th, 2008)===&lt;br /&gt;
* Neo Virgo (confirmed in conversation with CL 5 July 2008)&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Shukran Fahid (confirmed in conversation with CL 24 Aug 2008. Please do not contact him about these freebies as he is no longer in possession of them; you must obtain them from somewhere else. And, they are not supported.)&lt;br /&gt;
&lt;br /&gt;
===Creator no longer exists [4] (last updated September 15th, 2008)===&lt;br /&gt;
* Cid Jacob&lt;br /&gt;
* Eva Capalini&lt;br /&gt;
&lt;br /&gt;
===Status Uncertain===&lt;br /&gt;
(IM’ed / emailed a minimum of 3 times, but no response. Attempts to contact them have been abandoned. Last updated September 15th, 2008)&lt;br /&gt;
* Cristiano Midnight&lt;br /&gt;
* Dyonis Blanc&lt;br /&gt;
* Gwinivere Grayson&lt;br /&gt;
* Kiari LeFay&lt;br /&gt;
* Kris Gullwing&lt;br /&gt;
* Launa Fauna&lt;br /&gt;
* Michael Firefly&lt;br /&gt;
* Princess Medici&lt;br /&gt;
* Remo Yossarian&lt;br /&gt;
* stephenpaul Bliss (reportedly no longer active in SL; status of his animations uncertain.)&lt;br /&gt;
&lt;br /&gt;
* Sine Wave (various creators). Released the following genuine freebies: Lime Jelly, Hipster, We love you girl, and We love you boy. There is a full-perm version of Caramel circulating, but its release was accidental.&lt;br /&gt;
&lt;br /&gt;
===FOOTNOTES===&lt;br /&gt;
&lt;br /&gt;
[1] if you see these animations being used by anyone but them, they are likely pirated.&lt;br /&gt;
&lt;br /&gt;
[2] You need to check with these animators when free stuff created by them comes into your hands.&lt;br /&gt;
&lt;br /&gt;
[3] These people released some stuff as freebies in the distant past, but now only produce animations for their own use, and never licence any of these current ones out.&lt;br /&gt;
&lt;br /&gt;
[4] An effort was made at clarification but no real determination of status was possible owing to the accounts having been deleted from SL. Use at your own risk.&lt;br /&gt;
&lt;br /&gt;
[5] Ayla Holt and Kammie Rayna were avatars used by Linda Kellie. Public domain status in all OpenSim or SL grids was confirmed on 17 January 2012 in conversation with Reven Rosca. Also confirmed on Linda&#039;s website, http://www.lindakellie.com/ (link valid as of 19 January 2012), from where the source files for her animations can be downloaded.&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Version_Tracking&amp;diff=1161655</id>
		<title>MLPV2 Version Tracking</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Version_Tracking&amp;diff=1161655"/>
		<updated>2012-01-19T02:20:09Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MLPV2 Version Tracking ==&lt;br /&gt;
&lt;br /&gt;
MLPV2.5a&lt;br /&gt;
&lt;br /&gt;
This is a first cut at memory reduction for MLPV2. The goal is to reduce memory usage stats.&lt;br /&gt;
&lt;br /&gt;
* ~menucfg: deleted state exit handler, moved code to entry handler.&lt;br /&gt;
* ~menucfg sets memory limit to usage + 100 and shuts off&lt;br /&gt;
* MEMORY commands for .MENUITEMS and .POSITIONS (see xxxx.example for examples)&lt;br /&gt;
* prints ~menu memory usage on Adjust.  What about ~positions? ~pose?&lt;br /&gt;
* reduced memory in ~run&lt;br /&gt;
* &amp;quot;Adjust&amp;quot; menu button now prints current memory usage in ~menu.  (Need something for ~positions as well.)&lt;br /&gt;
&lt;br /&gt;
TODO in subsequent release(s):&lt;br /&gt;
&lt;br /&gt;
* have posers set their memory limit low -- NOPE, leave as LSL, because they take 17K in Mono.&lt;br /&gt;
* have posers shut themselves down?  (Currently ~menu stops them when not in use.)&lt;br /&gt;
* check for other scripts to lower memory.&lt;br /&gt;
* memory limit for ~pos?  use same as ~menu, or that minus a constant?&lt;br /&gt;
* find out whether lists can be further optimized&lt;br /&gt;
* MEMORY commands for ~sequencer and ~swap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4z9&lt;br /&gt;
&lt;br /&gt;
* sequences: omit objname in chat&lt;br /&gt;
* xcite: allow multiple /x in chat strings&lt;br /&gt;
* Changed scripts: ~sequences,  ~MLPT-Xcite-adaptor4, and ~menu (version number only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4z5,6,7&lt;br /&gt;
* Use version 2.4z7 (5 and 6 releases were replaced within hours owing to permission issues, etc.)&lt;br /&gt;
* Moved the &amp;quot;check config&amp;quot; feature to a separate script in MLP tools, freeing up a bit of memory in ~menu and ~memory.&lt;br /&gt;
* The config check is for when you think it&#039;s done: it checks for poses without positions and vice versa, or missing sounds.&lt;br /&gt;
* Change to ~ball that allows changing sit target without having to adjust .POSITIONS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4z4&lt;br /&gt;
* Resync when starting same anim (e.g., new pose using same anim, or choosing same pose again)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4z3&lt;br /&gt;
* BUG FIX - Since MLPV2.4w, if you change to a pose with fewer balls, avs popped off are not de-animated, and partner scripts (like xcite) are not told that the avatar stood.&lt;br /&gt;
* Only changed script is ~menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4 z&lt;br /&gt;
* Adds SOUND for sequences&lt;br /&gt;
&lt;br /&gt;
2.4 y&lt;br /&gt;
* With this version, you may now delete unnecessary &amp;quot;~poser n&amp;quot; scripts (e.g. ~poser 5).  Delete the unnecessary high-numbered ones.  For couples, you need &amp;quot;~poser&amp;quot; and &amp;quot;~poser 1&amp;quot; but not the others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4 w&lt;br /&gt;
* Should fit about 50 more couples poses (assuming button and anim names aren&#039;t long).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4 v&lt;br /&gt;
* added random expressions via  ::21 (change in all ~poser scripts)&lt;br /&gt;
* fixed: the &amp;quot;build-in&amp;quot; typo;&lt;br /&gt;
*  fixed: example SEQUENCES nc had debug turned on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4u2&lt;br /&gt;
* same as 2.4u, but with a &#039;fullstop timeout&#039; script in the tools box&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4u&lt;br /&gt;
* allow STAND as first pose chosen in a menu.  Previously, rezzed no balls for STAND (used whatever balls from last menu chosen)&lt;br /&gt;
* provide a button for adjusting STAND in zz-adjDefault&lt;br /&gt;
* free up some memory in ~menu (about 2K)&lt;br /&gt;
* Changes to: ~menu, .readme only, .POSITIONS.zz-default&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4t2&lt;br /&gt;
* Forgot to update vers # in 2.4t, please use this one.&lt;br /&gt;
* Changed: ~menu, ~swap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4t&lt;br /&gt;
* Minor bug fixed: if SWAP used after reset before any pose selected, ~swap fails; reset required.&lt;br /&gt;
* ~MLPT-timeout added to MLP Tools box.  Drop this script in so MLP will STOP when unused for one hour (editable).  See MLPT readme for details.&lt;br /&gt;
* NOTE: In this distribution to the MLPV2 group, ~MLPT-timeout is included directly, not just in the MLP Tools box.  Please give it a try and let me know if there are any problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4s&lt;br /&gt;
* Sequences turned &amp;quot;chat&amp;quot; off; this update fixes that.  I thought I&#039;d fixed that before, but evidently not.&lt;br /&gt;
* Changed scripts are ~menu (version string only), and ~sequence.&lt;br /&gt;
* No other changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4q&lt;br /&gt;
* MLPV2.4p was borked in reading positions.  This fixes it.  It also backs out the ~memory changes, which don&#039;t work well with the new server code (1.30.2) (as I&#039;d suspected).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4p1&lt;br /&gt;
* fixed OFF for &amp;quot;CHAT Chat Info  OFF&amp;quot; and &amp;quot;REDO RedoMenu   OFF&amp;quot; configs.  (Buttons worked; default settings didn&#039;t.)&amp;lt;br /&amp;gt;&lt;br /&gt;
* removed object name from pose chats&amp;lt;br /&amp;gt;&lt;br /&gt;
* reduced probability of &amp;quot;*&amp;quot; prefix in ~ball desc causing it to miss color change message&amp;lt;br /&amp;gt;&lt;br /&gt;
* eliminated sliced arrays in ~memory, dramatically increasing free mem (but perhaps running afoul of upcoming changes, stay tuned). followed Liz&#039;s suggestion to use one list rather than multiple.  I don&#039;t know why multiple had the severe overhead.  When I tested it earlier, the two methods worked the same in Mono, whereas multiple lists worked much better for LSL.  However, there&#039;s an issue here, and I expect this subject will come up again, related to memory handling differences for per-parcel script memory limits.&amp;lt;br /&amp;gt;&lt;br /&gt;
* sitter: Instead of arrow keys adjusting, you now press both page-up and page-down to enable the arrow keys (shift left/right, up/down, and page up/down).  Push page-up and page-down to disable again.  This way, folks trying to adjust their view won&#039;t move their avvies.&lt;br /&gt;
* updated scripts: ~menu, ~memory, ~ball&amp;lt;br /&amp;gt;&lt;br /&gt;
* Added &amp;quot;ready&amp;quot; linked message.   Uses -11003, &amp;quot;READY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4p&lt;br /&gt;
* same as for 2.4p1 above, except linked message &amp;quot;ready&amp;quot; used channel 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4n4&lt;br /&gt;
* fixes to address some sequencing issues such as NOCHAT turning off all chat, etc.&amp;lt;br /&amp;gt;&lt;br /&gt;
Changes made to the following scripts: ~sequencer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4n3&lt;br /&gt;
* fixes to turning off scripts (lag reduction).  Should no longer fail after sim reset.  Should also fix a reanimation problem.&amp;lt;br /&amp;gt;&lt;br /&gt;
* Leave ~timeout running so it&#039;ll delete itself when bought&amp;lt;br /&amp;gt;&lt;br /&gt;
* ~timeout moved to MLP Tools kit&amp;lt;br /&amp;gt;&lt;br /&gt;
* Changes made to the following scripts: ~menu and and all ~poser* scripts (~poser, ~poser1, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4n2&lt;br /&gt;
* by this version, the MATURE directive was partially retired by being commented out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4n&lt;br /&gt;
* fix warning when multiple people using menu at same time (popups go to wrong people)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.4m - add warning and truncate for pose button label too big (usually, missing &amp;quot;|&amp;quot;)&lt;br /&gt;
- sitter adjustable poseball (start ~ball description with plus sign to activate)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v2.4l&lt;br /&gt;
* avoid &amp;quot;animating without permission&amp;quot; script errors (when sitter doesn&#039;t accept) -- partially solved (error gone, but something&#039;s still wrong if MLP bought when someone&#039;s on a ball.)&amp;lt;br /&amp;gt;&lt;br /&gt;
* MATURE directive (skip rest of card if not MATURE sim). (might ditch this)&amp;lt;br /&amp;gt;&lt;br /&gt;
* stop poser# scripts when corresponding ball isn&#039;t rezzed&amp;lt;br /&amp;gt;&lt;br /&gt;
* stop several other scripts when no balls are rezzed&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2k&lt;br /&gt;
* fix ~prop: don&#039;t jump on double-save&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2j&lt;br /&gt;
* fix ~ball: don&#039;t listen if rez-arg is zero; cancel old listen on rez.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2i&lt;br /&gt;
* fix getrefpos issue on save&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2h&lt;br /&gt;
* warn if props aren&#039;t copiable (check for current and for next owner)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2g&lt;br /&gt;
* Adjust mode auto-saves props too; delete trailing zeros on save&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v4.2f&lt;br /&gt;
* STOP resets swap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v2.4e&lt;br /&gt;
* restarter button in MLP Tools, xcite double-stim for per-anim fixed&lt;br /&gt;
&lt;br /&gt;
2.4 d&lt;br /&gt;
* Bug fix:  SAVE after SWAP should now work correctly. Note: don&#039;t SWAP while editing a pose; it&#039;ll reset it to the previously saved position.  Instead, save and then swap, after which you can save and it&#039;ll do the right thing.  I should put this in the wiki!&lt;br /&gt;
* ~timeout put back in&lt;br /&gt;
&lt;br /&gt;
2.4&lt;br /&gt;
* HIDDEN attribute for menus (instead of &amp;quot;ALL/GROUP/OWNER&amp;quot;) for menus used only by sequences.&lt;br /&gt;
* NOCHAT option for sequences (use &amp;quot;SEQUENCE | seqname | NOCHAT&amp;quot;) -- disables bed chatting pose name during sequence.&lt;br /&gt;
* SWAP behavior configurable per-pose (for poses with more than 2 balls).  See &amp;quot;CONFIGURING SWAP FEATURE&amp;quot; above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.3k&lt;br /&gt;
* fixed startup race condition (stopping before reading MENUITEMS), fixed sequence labels not found&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.3j&lt;br /&gt;
* height menu bug fix (probably broken since 2.3&#039;s reorient menu added)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.3i&lt;br /&gt;
* bug fix (remenu broken in 2.3h)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.3h&lt;br /&gt;
* sequences: rez balls on sequence start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.3g&lt;br /&gt;
* reset fixes:&lt;br /&gt;
* kill balls on reset in ~menu startup&lt;br /&gt;
* don&#039;t say &amp;quot;click to start&amp;quot; until ready, in ~run&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CHANGES in MLPV2 Version 2.3:&lt;br /&gt;
&lt;br /&gt;
- Supports sounds&lt;br /&gt;
&lt;br /&gt;
- Supports up to 6 avatars (poseballs)&lt;br /&gt;
&lt;br /&gt;
- Sequences (tours) -- set up a menu button that plays a sequence of poses and chats.  You configure the sequences in a new .SEQUENCE type of notecard.  More info on that here:&lt;br /&gt;
&lt;br /&gt;
- When rezzed, balls are now named ~ball0 .. ~ball5, to support easy sitting for bot clients (used for machinima, not camping!)  The object name in inventory has not changed.&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Adjust Pos&amp;quot; is now a toggle.  Try it and see!  Avs can hop on and off and balls return to the &#039;adjusting&#039; shape.  You can also use STOP to return to normal mode.&lt;br /&gt;
&lt;br /&gt;
- EZ-Adust!  Now, when you&#039;re in adjust mode and you change poses, it saves the current pose before swithcing to new pose.  To abandon changes, quit adjust mode, STOP, or just re-select the current pose.&lt;br /&gt;
&lt;br /&gt;
- TOOLS PACK:&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Reorient&amp;quot; menu for more easily adapting an existing pose set to a new furniture item&lt;br /&gt;
&lt;br /&gt;
- script to check anim permissions&lt;br /&gt;
&lt;br /&gt;
- script to check for unused animations&lt;br /&gt;
&lt;br /&gt;
- Three different example xcite adaptor scripts (requires Xcite! Partner script from Xcite)&lt;br /&gt;
- AutoZhao adaptor script&lt;br /&gt;
&lt;br /&gt;
- touch passer moved here, since it&#039;s never required in the MLP prim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CHANGES in MLPV2 Version 2.2 (unreleased other than to MLPV2 group)&lt;br /&gt;
&lt;br /&gt;
- Added LMs when avs sit or unsit, to make it possible to add support for things like xcite and cuffs without modifying MLP scripts.  Read more here:&lt;br /&gt;
&lt;br /&gt;
- Cleaner chat on DUMP (omits object name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CHANGES in MLPV2 Version 2.1:&lt;br /&gt;
&lt;br /&gt;
- Props!  Rez an object per pose.  Object is deleted when changing to new pose, or after 3 minutes if bed is deleted.&lt;br /&gt;
&lt;br /&gt;
- 15 ball colors supported!&lt;br /&gt;
&lt;br /&gt;
- AUTOBACK - automatically inserts BACK before MORE--&amp;gt; button (optional, off by default)&lt;br /&gt;
&lt;br /&gt;
- Bug fix for AUTOMORE on main menus with too many buttons.  AUTOMORE no longer supported for main menu.  Might be fixed some day.&lt;br /&gt;
&lt;br /&gt;
- Bug fix for AUTOMORE menues with more than one extra page.&lt;br /&gt;
&lt;br /&gt;
- Expression control code removed -- didn&#039;t work out.  MLPV2 no longer takes controls. Of course, still compatible with all MLP and MLPV2.0 scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CHANGES in MLPV2, Version 2.0:&lt;br /&gt;
&lt;br /&gt;
- Now supports Solo, 3some, and 4some menus.&lt;br /&gt;
&lt;br /&gt;
- Memory optimized: now holds over 70 couples poses.&lt;br /&gt;
&lt;br /&gt;
- Expressions supported (20 expressions, constant or periodic).  See &amp;quot;TO ADD POSES&amp;quot; above.&lt;br /&gt;
&lt;br /&gt;
- Extended menus.  (Automatic &amp;quot;More--&amp;gt;&amp;quot; button for menus with more than 12 buttons.)&lt;br /&gt;
&lt;br /&gt;
- Menu buttons now appear in menus in the same order as in the configuration&lt;br /&gt;
but only if the new MENUORDER config item appears -- otherwise order is same as before, for backwards compatibility).&lt;br /&gt;
&lt;br /&gt;
- Modular configuration: reads all *.MENUITEMS* and *.POSITIONS* files, in sort order (same as in object contents).&lt;br /&gt;
&lt;br /&gt;
MENU config lines with no corresponding TOMENU lines get added to the main menu (replacing a blank &amp;quot;TOMENU -&amp;quot; line).&lt;br /&gt;
&lt;br /&gt;
This allows  makers to easily provide add-on packs, each being folder containing .MENUITEMS*, .POSITIONS*, and animations files. Customer simply drops the folder in and resets.&lt;br /&gt;
&lt;br /&gt;
- Backwards-compatible with MLP V1.2 configurations.&lt;br /&gt;
&lt;br /&gt;
- Ball timeouts have been disabled.  This should make MLPV2 a little more efficient. However, if you move a bed with balls rezzed, you&#039;ll need to delete the balls manually.&lt;br /&gt;
&lt;br /&gt;
- Set poseball&#039;s floating text and pie menu sit text by changing its description.&lt;br /&gt;
Also, if the ball&#039;s description begins with an asterisk (&amp;quot;*&amp;quot;), the poseball is phantom.&lt;br /&gt;
After changing ball&#039;s description, STOP to delete any balls and then select any pose.&lt;br /&gt;
&lt;br /&gt;
- New LM button type, to pass LMs to other scripts/prims. This allows adding features to furniture, with buttons in the MLP menus, without changing any MLP scripts.&lt;br /&gt;
&lt;br /&gt;
- Warning for duplicate entries in .POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
- Configuration consistency checker: try &amp;quot;ConfigCheck&amp;quot; in Shutdown menu&lt;br /&gt;
NOTE: this will reload .POSITIONS.* files, so backup any saved positions first! It will find buttons with no positions and vice versa.&lt;br /&gt;
&lt;br /&gt;
- AutoZhao support&lt;br /&gt;
&lt;br /&gt;
- Restart menu reorganized:&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;Pos Reset&amp;quot; button after changing *.POSITIONS* files.&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;Menu Reset&amp;quot; button after changing *.MENUITEMS* files.&lt;br /&gt;
&lt;br /&gt;
Use &amp;quot;Restart&amp;quot; button to restart all.  This used to do only a menu reset.&lt;br /&gt;
&lt;br /&gt;
- MLP bug fix: if you rez a copy, it uses the same channel as the original, and on MLP V1.2 you&#039;d get crosstalk.&lt;br /&gt;
&lt;br /&gt;
The menu script is now reset on rez.  This does not reset positions; saved positions are not lost.&lt;br /&gt;
&lt;br /&gt;
- MLP bug fix: Avoid reanimating a non-sitting avatar!  This happened in these cases that I&#039;m aware of:&lt;br /&gt;
&lt;br /&gt;
A)  Avatar is posed and STOP button is hit and then a new pose is selected.  The avatar (no longer sitting) would get animated.&lt;br /&gt;
&lt;br /&gt;
B) Same as above, but instead of STOP button, avatar teleports or relogs&lt;br /&gt;
&lt;br /&gt;
[[Category:MLPV2]]&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161610</id>
		<title>MLPV2 Public Domain Animations</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Public_Domain_Animations&amp;diff=1161610"/>
		<updated>2012-01-18T01:29:40Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: Created page with &amp;quot;{{Navbox/MLPV2}}  ==Animations: Which are public-domain, which are not?==  Note: &amp;lt;i&amp;gt;this list has generally been maintained by Chaz Longstaff. If you want to be added to one of t…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
&lt;br /&gt;
==Animations: Which are public-domain, which are not?==&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;i&amp;gt;this list has generally been maintained by Chaz Longstaff. If you want to be added to one of the lists below and don&#039;t know how to edit a wiki page, just IM him and he will add you to the appropriate section that you indicate (please indicate in your IM the section.)&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beginning furniture makers or experimenters often don’t have the money and / or confidence yet to invest in buying licenced animations.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of the status of animations from various animators. It&#039;s to help you determine which animations you can safely regard as being in the public domain (i.e. &amp;quot;freebies&amp;quot;), versus which ones might be illegally floating around as pirated animations. Using pirated animations -- knowingly or unknowingly, it&#039;s the same -- can cause your creations to be deleted by LL and get you a bad reputation just when you are starting out and trying to get known.&lt;br /&gt;
&lt;br /&gt;
Now, just because the animations are in the public domain doesn&#039;t always make them &amp;quot;good quality&amp;quot; -- they can be dated, and show their age, which can be why they were released at a certain point for free. But when you are just started out and practising, or want to make a few things just for friends, they can be very useful.&lt;br /&gt;
&lt;br /&gt;
In the lists below, &amp;quot;confirmed in conversation with CL&amp;quot; -- the CL stands for Chaz Longstaff.&lt;br /&gt;
&lt;br /&gt;
===Genuine freebies (last updated 17 Jan 2012)===&lt;br /&gt;
* Ayla Holt [5]&lt;br /&gt;
* Butcher Cassidy (confirmed in conversation with CL)&lt;br /&gt;
* Chip Midnight (confirmed in conversation with CL)&lt;br /&gt;
* Damien Fate (confirmed in conversation with CL)&lt;br /&gt;
* Emma Thorn (confirmed in conversation with CL 3 August 2008)&lt;br /&gt;
* Fleabite Beach (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
* Kammie Rayna [5]&lt;br /&gt;
* Linda Kellie [5]&lt;br /&gt;
* linkin Slate (confirmed in conversation with CL)&lt;br /&gt;
* Ulrika Zugzwang (from her profile, noted by CL)&lt;br /&gt;
* YadNi Monde (confirmed in conversation with CL)&lt;br /&gt;
* Yuriko Nishi (confirmed in conversation with CL 5 June 2008)&lt;br /&gt;
&lt;br /&gt;
===Animators whose stuff always requires a licence (last updated September 15th, 2008)===&lt;br /&gt;
* Animator Ragu&lt;br /&gt;
* Beau Perkins&lt;br /&gt;
* Bella Beleza&lt;br /&gt;
* Ben Stravinsky&lt;br /&gt;
* Cita Boa&lt;br /&gt;
* Craig Altman&lt;br /&gt;
* Damen Gorilla&lt;br /&gt;
* Dylan Rickenbacker&lt;br /&gt;
* fana dechou&lt;br /&gt;
* Furr Burt&lt;br /&gt;
* Johan Durant&lt;br /&gt;
* loufa Shilova&lt;br /&gt;
* Medhue Simoni&lt;br /&gt;
* mikeD Streeter&lt;br /&gt;
* Natalie Oe (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nya Raymaker / Jolly Lovenkraft (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Nytemyst Grace&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Parsalin Gullwing&lt;br /&gt;
* Sandy Clymer&lt;br /&gt;
* Sin Toshi&lt;br /&gt;
* Siryn Rosse (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* store Allen&lt;br /&gt;
* suzi sohmers&lt;br /&gt;
* Tara Bournemouth&lt;br /&gt;
* trebbort subagja&lt;br /&gt;
* Varon Kappler&lt;br /&gt;
* Zoe Biggles&lt;br /&gt;
&lt;br /&gt;
===Animators who never licence their stuff [1] (last updated September 15th, 2008)===&lt;br /&gt;
* Abramelin Wolfe&lt;br /&gt;
* Cheree Bury (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Darkness Anubis&lt;br /&gt;
* Desiree Bisiani (and Cheewha Palen)&lt;br /&gt;
* Flip Fitzsimmons&lt;br /&gt;
* Hol ALexander&lt;br /&gt;
* jamie Cheeky&lt;br /&gt;
* Jennifer Brennon&lt;br /&gt;
* Lizz Silverstar&lt;br /&gt;
* niknak Bugaboo&lt;br /&gt;
* Paul Llewelyn&lt;br /&gt;
* Paul Lobo&lt;br /&gt;
* Phil Deakins&lt;br /&gt;
* Ravanne Sullivan&lt;br /&gt;
* Renee Irwin&lt;br /&gt;
* Riann Maltese&lt;br /&gt;
&lt;br /&gt;
===Animators who produce both licenced and freebie stuff [2] (last updated September 15th, 2008)===&lt;br /&gt;
* Darien Caldwell (confirmed in conversation)&lt;br /&gt;
* Deira Llanfair  (confirmed here in this thread in old SL forums 13 Aug 2008)&lt;br /&gt;
* Ferran Brodsky (confirmed in conversation with CL)&lt;br /&gt;
* Indika Herbst (confirmed in conversation with CL)&lt;br /&gt;
* Lear Cale (confirmed in conversation with CL)&lt;br /&gt;
* LordJason Kiesler (confirmed in conversation with CL)&lt;br /&gt;
* Starlight Kiesler (confirmed in conversation with CL)&lt;br /&gt;
&lt;br /&gt;
===Animators who released some freebies in the past but now never licence their stuff [3] (last updated September 15th, 2008)===&lt;br /&gt;
* Neo Virgo (confirmed in conversation with CL 5 July 2008)&lt;br /&gt;
* Owain Raymaker (confirmed in conversation with CL 13 Aug 2008)&lt;br /&gt;
* Shukran Fahid (confirmed in conversation with CL 24 Aug 2008. Please do not contact him about these freebies as he is no longer in possession of them; you must obtain them from somewhere else. And, they are not supported.)&lt;br /&gt;
&lt;br /&gt;
===Creator no longer exists [4] (last updated September 15th, 2008)===&lt;br /&gt;
* Cid Jacob&lt;br /&gt;
* Eva Capalini&lt;br /&gt;
&lt;br /&gt;
===Status Uncertain===&lt;br /&gt;
(IM’ed / emailed a minimum of 3 times, but no response. Attempts to contact them have been abandoned. Last updated September 15th, 2008)&lt;br /&gt;
* Cristiano Midnight&lt;br /&gt;
* Dyonis Blanc&lt;br /&gt;
* Gwinivere Grayson&lt;br /&gt;
* Kiari LeFay&lt;br /&gt;
* Kris Gullwing&lt;br /&gt;
* Launa Fauna&lt;br /&gt;
* Michael Firefly&lt;br /&gt;
* Princess Medici&lt;br /&gt;
* Remo Yossarian&lt;br /&gt;
* stephenpaul Bliss (reportedly no longer active in SL; status of his animations uncertain.)&lt;br /&gt;
&lt;br /&gt;
* Sine Wave (various creators). Released the following genuine freebies: Lime Jelly, Hipster, We love you girl, and We love you boy. There is a full-perm version of Caramel circulating, but its release was accidental.&lt;br /&gt;
&lt;br /&gt;
===FOOTNOTES===&lt;br /&gt;
&lt;br /&gt;
[1] if you see these animations being used by anyone but them, they are likely pirated.&lt;br /&gt;
&lt;br /&gt;
[2] You need to check with these animators when free stuff created by them comes into your hands.&lt;br /&gt;
&lt;br /&gt;
[3] These people released some stuff as freebies in the distant past, but now only produce animations for their own use, and never licence any of these current ones out.&lt;br /&gt;
&lt;br /&gt;
[4] An effort was made at clarification but no real determination of status was possible owing to the accounts having been deleted from SL. Use at your own risk.&lt;br /&gt;
&lt;br /&gt;
[5] Ayla Holt and Kammie Rayna were avatars used by Linda Kellie. Public domain status confirmed on 17 January 2012 in conversation with Reven Rosca.&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:Navbox/MLPV2&amp;diff=1161608</id>
		<title>Template:Navbox/MLPV2</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:Navbox/MLPV2&amp;diff=1161608"/>
		<updated>2012-01-18T01:05:14Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox&lt;br /&gt;
|float={{{float|right}}}&lt;br /&gt;
|width={{{width|30%}}}&lt;br /&gt;
|1={{{1|}}}&lt;br /&gt;
|title=[[MLPV2]]&lt;br /&gt;
|content=For users:&lt;br /&gt;
*[[MLPV2_Users_Tutorial | MLPV2 User&#039;s Tutorial]]&lt;br /&gt;
*[[MLPV2 Users Reference | MLPV2 User&#039;s Reference]]&lt;br /&gt;
For users and builders:&lt;br /&gt;
*[[MLPV2 FAQ | MLPV2 FAQ]]&lt;br /&gt;
*[[MLPV2 Troubleshooting Tips | MLPV2 Troubleshooting Tips]]&lt;br /&gt;
For builders:&lt;br /&gt;
*[[MLPV2 Tutorial | MLPV2 Tutorial]]&lt;br /&gt;
*[[MLPV2 Reference Manual | MLPV2 Reference Manual]]&lt;br /&gt;
*[[MLPV2 Addons | MLPV2 Addons]]&lt;br /&gt;
*[[MLPV2 and Chains TUTORIAL | MLPV2 and Chains Tutorial]]&lt;br /&gt;
*[[MLPV2 Link Message Numbers | MLPV2 Link Message Numbers]]&lt;br /&gt;
*[[MLPV2 Public Domain Animations | MLPV2 Public Domain Animations]]&lt;br /&gt;
*[[MLPV2 Version Tracking]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:MLPV2]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1160112</id>
		<title>MLPV2 Troubleshooting Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=MLPV2_Troubleshooting_Tips&amp;diff=1160112"/>
		<updated>2011-12-23T23:50:59Z</updated>

		<summary type="html">&lt;p&gt;Chaz Longstaff: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Navbox/MLPV2}}&lt;br /&gt;
These MLPV2 troubleshooting tips are for normal end users and builders.&lt;br /&gt;
&lt;br /&gt;
== User issues ==&lt;br /&gt;
&lt;br /&gt;
These issues can be seen by any MLPV2 user even when the furniture is reasonably set up.&lt;br /&gt;
&lt;br /&gt;
=== Why am I not being animated? ===&lt;br /&gt;
Try turning off your Animation Overrider, if you have one.  Whether this is an issue for you depends on a techical detail: the priority of the animations in your AO and the priority of the animations in the MLP/MLPV2 product.&lt;br /&gt;
&lt;br /&gt;
=== Why am I floating? ===&lt;br /&gt;
Sometimes we can be using a pose and suddenly we rise about 1 meter higher and stay there.  Sometimes this happens in everyone&#039;s view, and other times it only appears for some.  This is an SL bug and happens with any animation system, not just MLP/MLPV2.   The problem usually goes away if you select the pose again, or stand and sit again.  Sometimes it may be necessary to relog.&lt;br /&gt;
&lt;br /&gt;
=== Balls won&#039;t rez when I choose a pose! ===&lt;br /&gt;
First, try STOP.  If the balls got deleted for any reason, they won&#039;t rez when you pick a pose and the MLP still thinks the balls are there.  STOP fixes this.  (The timeout in many MLP objects also help avoid this, by doing a STOP if nobody&#039;s used it for a while.)&lt;br /&gt;
&lt;br /&gt;
Second (if first doesn&#039;t work), try resetting via the MLPV2 menu: &amp;quot;OPTIONS -&amp;gt; Shutdown... -&amp;gt; Restart&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Consider if maybe they *are* rezzing, but way below you or way above you -- check the description line of the MLP object to see if there is a number in there, in which case set it to 0.&lt;br /&gt;
&lt;br /&gt;
=== Menu doesn&#039;t come up ===&lt;br /&gt;
Make sure you&#039;re on land where you are allowed to run scripts.  There is a &amp;quot;no scripting&amp;quot; icon at the top of the viewer screen if you can&#039;t.&lt;br /&gt;
&lt;br /&gt;
If you can&#039;t, try setting your group to the land&#039;s group.  If that makes the no-scripting icon go away, set the MLP object to the land&#039;s group.  (Do this in the Edit tab, or be wearing the group tag when you rez the object.)&lt;br /&gt;
&lt;br /&gt;
If that isn&#039;t the problem, most likely it had a stack/heap error when you were away.&lt;br /&gt;
&lt;br /&gt;
If the object permissions allow it, select the object and use &amp;quot;Reset Scripts&amp;quot;.  (In original style viewers, this is SL menu &amp;quot;Tools -&amp;gt; Reset Scripts in Selection&amp;quot;.  For SL2, I have no idea where it is.  Naughty LL for goofing everything up.)&lt;br /&gt;
&lt;br /&gt;
If this is a recurring problem, there is an MLPV2 recovery script; ask the MLPV2 group for more info.  Alternatively, delete some of the poses, to allow more room.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Animate me&amp;quot; permission popup not happening===&lt;br /&gt;
&lt;br /&gt;
You won&#039;t get the animate permission popup if you were the last person on a particular poseball. It keeps your permission.  You also don&#039;t get animate permission for yourself when MLP is used as a HUD, because worn items give permission automatically. (So do sat-upon items, but in the case of MLP, the script that takes permission is in the furniture, not the ball.) &lt;br /&gt;
&lt;br /&gt;
=== avatar != perm key ===&lt;br /&gt;
This is some debugging code that Lear had left exposed by mistake in some versions. It can be ignored; it is not really an error.&lt;br /&gt;
&lt;br /&gt;
If it is annoying, just update to the latest script set.  (Users can do this if the item is modifiable, but users should ask the maker first in case the maker has made custom modifications or is using add-on scripts.)&lt;br /&gt;
&lt;br /&gt;
=== OPTIONS menu doesn&#039;t work after deeding to group ===&lt;br /&gt;
If you deed an MLP, you lose the OPTIONS menu unless you remember to change all the OWNER menus to GROUP menus, and even then you won&#039;t be able to use full shutdown.&lt;br /&gt;
&lt;br /&gt;
== Builder issues ==&lt;br /&gt;
&lt;br /&gt;
=== Animation xyx not found ===&lt;br /&gt;
* Check that the animation is indeed in the prim&lt;br /&gt;
* Check the spelling&lt;br /&gt;
* If you are using expression suffixes, check that you didn&#039;t put a space before the expression suffix&lt;br /&gt;
* Check that as a separator in POSE lines you have used only &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; or &amp;lt;pre&amp;gt;space|space&amp;lt;/pre&amp;gt; You can also use two spaces on each side of the vertical bar, but you cannot use three spaces: the superfluous space is not stripped away while reading the notecard; instead, it gets treated as part of the animation name, and thus the animation name can&#039;t be found.&lt;br /&gt;
* Also check for invisible soft-returns that may have come in if you were doing your work in another program such as Microsoft Word.&lt;br /&gt;
&lt;br /&gt;
=== Animation won&#039;t remember its position ===&lt;br /&gt;
This can occur that even though you&#039;ve triple-checked all your work; there will be an animation that sometimes will come out in the right position, sometimes not. After a bit of head-banging, you realize it all depends on which animation you played just before it. If the creator of that animation did not set a hip position for it, you will get different results depending on which pose you ran last. That is, if you have 3 animations, 2 with hip positions and one without, the hip position for the one without will be left over from whichever of the last two animations you used. Which may throw your pose all off. There is nothing you can do except abandon use of the animation; the problem is in the animation itself, and it&#039;s not suitable for use with MLP-like scripts though it may work fine as sold in a static poseball.&lt;br /&gt;
&lt;br /&gt;
=== Balls rez on top of each other, even though you are sure you have positions right. ===&lt;br /&gt;
Check for duplicate stored positions. *Any* duplicate stored positions, even those not related to the pose in question, can cause this.&lt;br /&gt;
&lt;br /&gt;
Check for the memory script having blown up during booting. It&#039;s easy to miss this, as the error bubble only shows for a short time then goes away. To ensure you don&#039;t miss it, you can in Preferences for &amp;quot;Text Chat&amp;quot; turn on &amp;quot;Show script errors and warnings as regular chat.&amp;quot; That way, you&#039;ll be able to see such script problems even after problem bubble has faded.&lt;br /&gt;
&lt;br /&gt;
=== Balls: not enough rezzing ===&lt;br /&gt;
You have a Menu with poses that have 4 animations to them, but only 2 balls are rezzing. ||Check that you didn&#039;t tell the pose to only rez 2 balls. Example: &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK&amp;lt;/pre&amp;gt; for 4 animations should be something like &amp;lt;pre&amp;gt;MENU Cuddles | ALL | BLUE | PINK | BLUE | PINK&amp;lt;/pre&amp;gt; (or whatever) . Easy mistake for tired eyes to make!&lt;br /&gt;
&lt;br /&gt;
Also, check that you didn&#039;t drop the permission parameter. For instance, if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK | BLUE &amp;lt;/pre&amp;gt;&lt;br /&gt;
forgetting to put in there the [ALL | GROUP | OWNER] parameter, MLP will get mixed up, think that PINK is the permission parameter, and only rez the blue ball.&lt;br /&gt;
&lt;br /&gt;
if you say&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Cuddles | PINK &amp;lt;/pre&amp;gt;&lt;br /&gt;
No balls will rez at all.&lt;br /&gt;
&lt;br /&gt;
Fix: put a permission parameter back in.&lt;br /&gt;
&lt;br /&gt;
===Booting up: MLP starts, gets a bit of the way, then goes no further ===&lt;br /&gt;
&lt;br /&gt;
Check that you have both a .MENUITEMS and .POSITIONS notecard in there.&lt;br /&gt;
&lt;br /&gt;
=== Couldn&#039;t find (script)&amp;quot; error ===&lt;br /&gt;
If you get a message like this upon first dragging and dropping the MLPv2 scripts into a prim, disregard it. It occurs because a prim contents are very slow to refresh in SL, and one script thinks another one is not there yet. Do nothing; it will sort itself out in a few seconds.&lt;br /&gt;
&lt;br /&gt;
=== llDialog: button labels must be 24 or fewer characters long ===&lt;br /&gt;
You have almost certainly forgotten a &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; in a POSE line. Consequently, the scripts were counting the Button name and the first animation name as the button name, making the button name too long. &lt;br /&gt;
&lt;br /&gt;
=== Notecards: I set my notecards to full-perm but customers can&#039;t open them to save positions, etc. ===&lt;br /&gt;
This happens if the object is no-modify.  You can&#039;t open notecards in a no-modify object. SL limitation.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No Unused TOMENU&amp;quot; Getting this msg but I know that&#039;s not right ===&lt;br /&gt;
Check the top of your main MENUITEMS card, referring to the help in this section https://wiki.secondlife.com/wiki/MLPV2_Reference_Manual#.MENUITEMS.2A_NOTECARDS&lt;br /&gt;
&lt;br /&gt;
=== Props don&#039;t rez and I have everything right ===&lt;br /&gt;
# Make sure you have the ~props script in the MLP object.  (Actually, this won&#039;t keep the prop from rezzing; it will keep it from saving its position, and keep it from deleting itself when moving to a new pose.)&lt;br /&gt;
# MLP is very case sensitive. CHAT 2 in .MENUITEMS does not equal Chat 2 in the props notecard. Check to make sure the case matches.&lt;br /&gt;
# Watch the prim count on the parcel where you are working. If the available prim count is going down, then your prop is rezzing -- just not somewhere where you are seeing it.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Script run-time error / Stack-Heap Collision&amp;quot; ===&lt;br /&gt;
This is a clue that, sadly, there are too many items in your .menuitems.xxx or .positions.xxx notecards for the script memory to handle. Congratulations, you&#039;ve just been initiated into the battle-scarred club like the rest of us.&lt;br /&gt;
&lt;br /&gt;
First, make sure the scripts are compiled Mono, not LSL.  By default they&#039;re Mono and you&#039;re better off if you do NOT recompile them.&lt;br /&gt;
&lt;br /&gt;
Second, make sure you have no unused positions stored in any .positions notecards. See tidying tip here https://wiki.secondlife.com/w/index.php?title=MLPV2_Reference_Manual&amp;amp;action=submit#TIP.21_Positions_Notecard_tidying. Tidy, restart and see if that helps.&lt;br /&gt;
&lt;br /&gt;
Third: try optimizing your saved .POSITIONS.  If you have old .POSITIONS notecard data with lots of trailing zeros, you can get them trimmed down using this procedure:&lt;br /&gt;
&lt;br /&gt;
# drop .MENUITEMS.reorient (from MLP Tools box) in.&lt;br /&gt;
# Menu Reset.&lt;br /&gt;
# Use the Reorient menu to move all the poses by 1 cm. This will save all the poses, with only a small change. If you don&#039;t want the 1cm change, then just move it back 1cm after it finishes. Wait for both props and pose adjustment to complete! (Be patient!)&lt;br /&gt;
# dump pos, dump props, and save to appropriate notecards.&lt;br /&gt;
# Delete MENUITEMS.reorient, and restart.&lt;br /&gt;
&lt;br /&gt;
This will strip all the trailing zeros.&lt;br /&gt;
&lt;br /&gt;
Fourth: if your anims are mod, you can change the names.  Use short names, which take less memory.  Short button names also use less memory.&lt;br /&gt;
&lt;br /&gt;
The last resort is more drastic. You must give up on some poses, and delete their POSE lines from the .MENUITEMS* cards, and their position settings from the .POSITIONS* cards. You may leave the actual animations in the MLPv2 prim, but you might as well remove them as they won&#039;t be used anyway.&lt;br /&gt;
&lt;br /&gt;
=== What do I do about balls that are sunk into the mattress? ===&lt;br /&gt;
This problem is caused by the animation hip offset being too high.  One fix is to redo the animation and set the hip offset lower.  If you can&#039;t do that, then there are workarounds.&lt;br /&gt;
&lt;br /&gt;
One workaround is to make sure the first pose on every menu has a position where the balls are visible.&lt;br /&gt;
&lt;br /&gt;
The other workaround is to change the sit target in the poseball, so the balls will be higher for the same avatar positions.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this will affect all poses, making the balls appear higher for all poses.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Pull out ~ball.  Open it, and edit the ~ball script inside.&lt;br /&gt;
# For MLPV2.4x and later, near the top of the script:&lt;br /&gt;
## Look for this: &amp;quot;vector SitTarget = &amp;lt;0.,0.,.1&amp;gt;&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;vector SitTarget = &amp;lt;0.,0.,-.4&amp;gt;&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Versions before MLPV2.4x:&lt;br /&gt;
## Look for this: &amp;quot;llSitTarget(&amp;lt;0.0,0.0,0.1&amp;gt;, ZERO_ROTATION);&amp;quot;&lt;br /&gt;
## Change it to : &amp;quot;llSitTarget(&amp;lt;0.0,0.0,-.4&amp;gt;, ZERO_ROTATION);&amp;quot;  (Note that .1 changed to -.4: adjust to taste.)&lt;br /&gt;
# Take the ~ball object into inventory&lt;br /&gt;
# Delete ~ball from the MLPV2&lt;br /&gt;
# Drag the updated ~ball from inventory into the MLPV2&lt;br /&gt;
&lt;br /&gt;
This will make all the poses .5 M lower than they were, with the balls at the same place.  If that&#039;s a bigger change than you wanted, try -.2 or -.1 (that is, adjust to taste).&lt;br /&gt;
&lt;br /&gt;
For versions prior to MLPV2.4z6, you will then need to adjust all the positions to compensate.  I suggest you use the .MENUITEMS.reorient notecard for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run ===&lt;br /&gt;
Q: Heres what I have setup in the .sequences notecard:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;SEQUENCE | Romantic&lt;br /&gt;
MENU | Romance&lt;br /&gt;
POSE | standing&lt;br /&gt;
AVWAIT | 0 | Waiting for someone to sit on ball&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Kiss&lt;br /&gt;
WAIT | 10&lt;br /&gt;
POSE | Enter&lt;br /&gt;
WAIT | 15...&lt;br /&gt;
...REPEAT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It shows up in the menu selection, but no poseballs are rezzed when you select the sequence. Here&#039;s what I have in the .MENUITEMS notecard pertaining to the sequence-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MENU Romantic&lt;br /&gt;
LINKMSG Romantic | 0,-4,-12001,SEQUENCE Romantic&lt;br /&gt;
LINKMSG PAUSE | 0,-4,-12001,PAUSE&lt;br /&gt;
LINKMSG RESUME | 0,-4,-12001,RESUME&lt;br /&gt;
SWAP&lt;br /&gt;
STOP&lt;br /&gt;
BACK&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A: Your problem is simple: you have two buttons with the same label, which isn&#039;t allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sequence just won&#039;t run or skips poses in it===&lt;br /&gt;
Currently (2011), the sequencer script won&#039;t complain to you if the poses you reference actually exist or not. You&#039;re on your own for making sure they actually exist and are named exactly the same (in a menu card) as the way you are referring to them. So watch for this.&lt;br /&gt;
&lt;br /&gt;
=== Xcite! features such as tilt  / arousal just don&#039;t seem to work ===&lt;br /&gt;
Make sure you have the latest set of partner scripts (as of Jan 2012, the latest release was I think in 2009.) Make sure your own Xcite! bits aren&#039;t horribly out of date -- you need 3.0 bits or higher. Contacting xcite help isn&#039;t of much use; as of mid 2011 they became non-responsive to business partners.&lt;br /&gt;
&lt;br /&gt;
That being said, features won&#039;t work unless the xcite partner script is set be either no copy or no transfer. They also won&#039;t work if the perms were wrong when you rezzed the product, so edit the script and reset it. That will make the script start to run -- it dies upon start up if perms on the script are wrong.&lt;/div&gt;</summary>
		<author><name>Chaz Longstaff</name></author>
	</entry>
</feed>