MLPV2 Give Item Add-on

From Second Life Wiki
Revision as of 17:00, 24 March 2011 by Chaz Longstaff (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.

By Chaz Longstaff, June 2008.


Example:

LINKMSG TieMeUp | 1,-4,987789,Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs.

Steps to use:

  1. Copy and paste everything below the double-line on this page into a script called, for the sake of argument, "~give" (the script name is actually irrelevant; you may call it kumquat if you wish;)
  2. Drop the script into the prim where you have the rest of the MLPV2 scripts;
  3. 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;
  4. Add to the menu in an MLPV2 menu notecard the following line:
LINKMSG MyButtonName | 1,-4,987789,NamesOfObjectToOffer##MsgToPerson


In the above line, there are three elements for you to customize as appropriate:

  • MyButtonName -- the wording that you want to appear for the button on the blue menu
  • 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 hache (aka number, aka pound) sign # . Example: Item01#Item02#Item03 . If you are not offering more than one, don't worry about the # separator here.
  • MsgToPerson -- A message to be instant messaged to the person being offered the item, so they know what it is for, and don't think it's a random spammer or griefer passing by, etc.

Note that NamesOfObjectToOffer and MsgToPerson are separated by a ## separator (two hache symbols.)


What you don't need to change in the above sample line:

  • 1 -- makes it so the MLPV2 menu doesn't reappear, so the user can see the accept-object menu
  • -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.)
  • 987789 -- This is the number the ~give script looks for to detect a message to it.


<lsl> //add-on by Chaz Longstff for MLPV2 by Lear Cale. June 2008. //Function: gives object to someone on an MLPV2 ball //MLP button: LINKMSG MyButtonName | 1,-4,987789,NamesOfObjectToOffer##MsgToPerson //in a menu card, format a menu button like this, for example: //LINKMSG TieMeUp | 1,-4,987789,Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs. //In this example, TieMeUp is the button name //1 means whether to make the MLPV2 menu go away or not. //Generally set it to 1 as per the example, as otherwise the user //might not see the accept prompt for the inventory being given //-4 -- the value of LINK_THIS, meaning, send this message to this prim only. //(Use -1 if the ~give script is in a different prim.) //987789 -- don't change this, this is the communication channel //Cuff1#Cuff2#Cuff3#Cuff4##Wear these four cuffs. -- The items separated by # are the items to give, //followed by a message to be instant messaged to the recipient //of the object. It's good to include a msg, so that they don't think //it's a griefer trying to hand them something. Notice that the object(s) to give, //and the accompanying msg, are separated by ##


//parameters string ObjectToGive; string message; integer x; //_________________________ default{

  link_message(integer from, integer num, string str, key id) { 
      if (num == 987789) {
          list TempList = llParseStringKeepNulls(str,["##"],[]);
          message = llStringTrim(llList2String(TempList, 1),STRING_TRIM);
          string Objects = llStringTrim(llList2String(TempList, 0),STRING_TRIM);
          list ObjectsToGive = llParseStringKeepNulls(Objects,["#"],[]);
          integer GiveLength = llGetListLength(ObjectsToGive);
           if (GiveLength != 0) {
               if (message != "") {
                  llInstantMessage(id,message + " " + llList2CSV(ObjectsToGive));
               }
               for (x = 0; x < GiveLength; x++) {
                    ObjectToGive = llStringTrim(llList2String(ObjectsToGive, x),STRING_TRIM);                           
                          if (  ( llGetInventoryType(ObjectToGive) != INVENTORY_NONE)
                          && ( llGetInventoryPermMask(ObjectToGive, MASK_NEXT) & PERM_COPY)
                          && ( llGetInventoryPermMask(ObjectToGive, MASK_NEXT) & PERM_COPY) ) {
                              llGiveInventory(id,ObjectToGive);
                          }
               }//end of for
           }//end of checking GiveLength
      } //end of if check for the right channel
  } //end link_message event

} //end default state

</lsl>