MLPV2 Give Item Add-on

From Second Life Wiki
Revision as of 15:53, 3 August 2008 by Chaz Longstaff (Talk | contribs)

Jump to: navigation, search

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 -4 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(str,["#"],[]);
          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>