LSL Protocol/LockMeister System

From Second Life Wiki
< LSL Protocol
Revision as of 08:14, 30 April 2012 by Kyrah Abattoir (talk | contribs) (little addendum about using llRegionSayTo())
Jump to navigation Jump to search

LockMeister

The LockMeister System is a keyring of commands used for enhanced functions in bondage toys, its main function is to get the keys needed for particle chains, but as the protocol grow more and more commands are added. This protocol is maintained and designed by Kyrah Abattoir, IM her inworld if you have suggestions.

Return to protocol exchange

Features

  • Simple to use
  • Flexible
  • Fully backward compatible
  • Sensorless key grabbing (possible on child prims too) for particle chains (several mooring points)
  • Boot/shoes animation overrider controlling (on/off)
  • Color propagation in a lockmeister item set

How does it work?

Basically, all LockMeister items listen on channel -8888
Its strongly recommended to use only the llWhisper function for sending the commands

When someone sits on a LockMeister compliant item, this one will sequentially send the ping messages to each of the mooring points it needs, for example for a St. Andree Cross we will ping the wrist and ankle cuffs, in our example we see we will have to send the messages lcuff,rcuff,llcuff,rlcuff (which are the ones for these points).
When a LockMeister attachment detects the message corresponding to itself in the channel -8888 it will answer by the same message completed by "ok"

'An item will send the message using this format:
message shape: <avatar key><command> example: "748bb591-0d9d-4907-8287-dc27b8267e24lcuff" (we ping the left wrist cuff attachment of the avatar whose key is positioned before the name of the attachment point, or command)
The concerned attachment will answer:
message shape: <avatar key><command>" ok" example: "748bb591-0d9d-4907-8287-dc27b8267e24lcuff ok" (the concerned object answer on the channel -8888)

In order to draw a chain of particles we need the key of the object. When we used the listener event to get the answer message, the listen event returned us the key of the object that answered in it's key id field. This is the key of the speaking prim, which should be the prim we need to attach the chain to.

Complete List of Mooring Points

NOTE: THERE ARE NO TYPO ERRORS IN THE MOORING POINT NAMES (like ltigh/rtigh)

# name Description
1 rcuff right wrist cuff
2 rbiceps right upperarm cuff
3 lbiceps left upper arm cuff
4 lcuff left wrist cuff
5 lblade left shoulder blade
6 rblade right shoulder blade
7 rnipple right nipple point
8 lnipple left nipple point
9 rfbelt right front of the belt
10 lfbelt left front of the belt
11 rtigh right upper leg cuff
12 ltigh left upper leg cuff
13 rlcuff right ankle cuff
14 llcuff left ankle cuff
15 lbbelt left back of the belt
16 rbbelt right back of the belt
17 pelvis lower front of the pelvis
18 fbelt front of the belt
19 bbelt back of the belt
20 rcollar right of the collar
21 lcollar left of the collar
22 thead top of the head
23 collar front of the collar
24 lbit left corner of mouth/cheek (for pony bits)
25 rbit right corner of mouth/cheek (for pony bits)
26 nose nose
27 bcollar back of the collar
28 back middle of the back
29 lhand left hand (e.g. for mittens)
30 rhand right hand (e.g. for mittens)
Lockmeister-mooring-pts.jpg

Others

  • handle - type "leash handle" , this is useful for leashing to a leash handle.
  • tether - type "tether point" , this is useful for leashing to some fixed anchor.

Special Commands

<avatar key>col<vector> - order a color change (used in LockMeister collars to tint the cuffs like the collar) OPTIONAL
ex: "748bb591-0d9d-4907-8287-dc27b8267e24col<1.0,1.0,1.0>" will say to an item able to understand it (color yourself in white)

<avatar key>booton/bootoff = commands sent by collar objects, asking that the shoes animation overrider be started or stopped
ex: "748bb591-0d9d-4907-8287-dc27b8267e24booton" activate the animation overrider
ex: "748bb591-0d9d-4907-8287-dc27b8267e24bootoff" deactivate the animation overrider

Amethyst extension commands

The following commands are not part of the main lockmeister protocol, but additions Amethyst Rosencrans made in her sold and free cuff scripts. They are here to document the extensions so others can utilize them.

<avatar key>target|point1|point2 = Connect a chain from mooring point 1 to mooring point 2 ex: "748bb591-0d9d-4907-8287-dc27b8267e24target|lcuff|rcuff" will create a chain from the left cuff to the right cuff

<avatar key>target|point = Remove a chain from mooring point ex: "748bb591-0d9d-4907-8287-dc27b8267e24target|lcuff" will remove a chain from the left cuff

<avatar key>texture|<texture key> = Change the texture of the chains used by the target command ex: "748bb591-0d9d-4907-8287-dc27b8267e24texture|1ffb37fa-2fc1-dbec-d8ea-0607583a03c6" will change the chain texture

<avatar key>gravity|<downward acceleration float> = Change the rate at which the chain particles move down ex: "748bb591-0d9d-4907-8287-dc27b8267e24gravity|0.5" will change the chain texture to move down half a meter a second

<avatar key>age|<age float> = Change how fast the chain particles move from point 1 to point 2 ex: "748bb591-0d9d-4907-8287-dc27b8267e24age|2.0" will change the chain texture to move the distance in 2 seconds

Cool Products extension commands

The following commands are not part of the main lockmeister protocol, but additions Henri Beauchamp made for use by his Cool Products (such as the Cool Collar). They are here to document the extensions so others can utilize them.

<avatar key>point here = Signals that anchoring point "point" just appeared. ex: "748bb591-0d9d-4907-8287-dc27b8267e24handle here" could be emitted by the on_rez event of a leash handle to signal the collars connected to the owner of the leash handle that they should connect to it instead of staying connected to the center of the avatar.

<avatar key>point gone = Signals that anchoring point "point" just disappeared. ex: "748bb591-0d9d-4907-8287-dc27b8267e24handle gone" could be emitted by the a leash handle when it is detached to signal the collars connected to it that they should unleash.

(unknown) extension commands

<toucher key>post ok = Signals that <toucher key> has touched an object. The toy will then issue an "<object key>handle" command to the object, which will return "<object key>handle ok" to activate the leash.

Note about message sending

  • It is recommended to send the "ping" messages through llWhisper so only close proximity objects will receive them.
  • Now that llRegionSayTo() is available, it is strongly recommended to send "pong" messages through llRegionSayTo(), because of this, it is NOT recommended to have objects rely on "message snooping", because they won't be able to see message replies with llRegionSayTo.

Seal Of Approval (optional)

The seal of aproval program is currently discontinued.

Example Scripts

Example Attachment Script

<lsl>//KDC sample LockMeister attachment version 1.0 // //NOTE: This script must be in the root prim of the object for working properly and the root prim must // ALSO be the prim you want the particles to go to, since this script use an attach event, if you // want the root prim to be another prim you will need to write your own code //... //and in a general way this script is here as an explanation to the LockMeister System so ... WRITE YOUR OWN CODE!! // //KDC, kyrah design concept

string mooring_point = "lcuff"; //write here the mooring point you want to use integer attach_control = TRUE; //TRUE if you want to control the attach point (and detach if attached on the wrong part of the body, else, FALSE integer attach_point = ATTACH_LLARM; //write here the attachment point that need to be controlled //example : //left wrist/arm = ATTACH_LLARM //right wrist/arm = ATTACH_RLARM string attach_text = "this cuff must be attached to the left forearm"; //the text to display when the object detach itself default {

   attach(key id)
   {
       if(id != NULL_KEY)
       llResetScript();
   }
   state_entry()
   {
       if(llGetAttached() != attach_point && attach_control)
           llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
       else
           llListen(-8888,"","","");//open the lockmeister channel
   }
   listen(integer channel,string name,key id,string message)
   {
       if (message == (string)llGetOwner()+ mooring_point)//did we get a ping message for us?
           llWhisper(-8888,(string)llGetOwner()+ mooring_point+" ok");//answering it
           //Alternative answering method (not recommended!)
           llRegionSayTo(id, -8888, (string)llGetOwner()+ mooring_point+" ok");//answering it
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_ATTACH)
       {
           llOwnerSay(attach_text);
           llDetachFromAvatar();
       }
   }

}</lsl>