Difference between revisions of "LSL Protocol/LockMeister System"

From Second Life Wiki
Jump to navigation Jump to search
(I hope you like the formatting, it was screaming for some.)
Line 1: Line 1:
{{LSL Header}}
{{RightToc}}
===License===
'''IMPORTANT PLEASE READ'''<br>
'''IMPORTANT PLEASE READ'''<br>
There has been a change in the license covering the lockmeister protocol, this license change will affect all new users.
There has been a change in the license covering the LockMeister Protocol, this license change will affect all new users.


The LockMeister protocol is now covered under the a modified (see below for detail of the changes) GNU GPLv3 (http://www.gnu.org/licenses/gpl.txt for details.)
The LockMeister Protocol is now covered under the a modified (see below for detail of the changes) GNU GPLv3 (http://www.gnu.org/licenses/gpl.txt for details.)
<br><br>
 
Changes to the GPLv3:<br>
====Changes to the GPLv3====
In order to ensure bi directional compatibility, any other protocol used in conjunction with the Lockmeister protocol must be available under the GPLv3.
In order to ensure bi-directional compatibility, any other protocol used in conjunction with the Lockmeister protocol must be available under the GPLv3.
<br>
<br>
--[[User:Kyrah Abattoir|Kyrah Abattoir]] 02:52, 21 May 2008 (PDT)
--[[User:Kyrah Abattoir|Kyrah Abattoir]] 02:52, 21 May 2008 (PDT)
----
 
<br>
==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.<br />
 
<br />
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 {{User|Kyrah Abattoir}}, {{HoverText|IM|Instant Message}} her inworld if you have suggestions.
[[Exchange|Return to protocol exchange]]<br />
 
<br />
[[LSL_Protocol|Return to protocol exchange]]
Main features:<br />
 
-simple to use<br />
===Features===
-flexible<br />
*Simple to use
-fully backward compatible<br />
*Flexible
-sensorless key grabbing (possible on child prims too) for particle chains (several mooring points)<br />
*Fully backward compatible
-boot/shoes animation overrider controling (on/off)<br />
*Sensorless key grabbing (possible on child prims too) for particle chains (several mooring points)
-color propagation in a lockmeister item set<br />
*Boot/shoes animation overrider controlling (on/off)
<br />
*Color propagation in a lockmeister item set
how does it work?<br />
 
<br />
===How does it work?===
Basically, all lockmeister items listen on channel -8888<br />
 
Its strongly recomended to use only the llWhisper() function for sending the commands<br />
Basically, all LockMeister items listen on channel -8888<br />
<br />
Its strongly recommended to use only the [[llWhisper]] function for sending the commands
when someone sit on a lockmeister compliant item, this one will sequencially send the ping messages to each of the mooring points it need ,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 (wich are the ones for these points).<br />
 
When a lockmeister attachment detect the message corresponding to itself in the channel -8888 it will answer by the same message completed by "ok"<br />
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).<br />
<br />
When a LockMeister attachment detects the message corresponding to itself in the channel -8888 it will answer by the same message completed by "ok"
so an item will send the message using this format:<br />
 
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.<br />
''''An item will send the message using this format:'''<br />
The concerned attachment will answer:<br />
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)<br />
'''The concerned attachment will answer:'''<br />
message shape: <avatar key><command>" ok" example: "748bb591-0d9d-4907-8287-dc27b8267e24lcuff ok" (the concerned object answer on the channel -8888)<br />
message shape: <avatar key><command>" ok" example: "748bb591-0d9d-4907-8287-dc27b8267e24lcuff ok" (the concerned object answer on the channel -8888)<br />
<br />
 
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.<br />
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.
<br />
 
<br />
===Complete List of Mooring Points===
<br />
{|
<br />
|- valign="top"
list of the different mooring points<br />
|
[[Image:lockmeister-mooring-pts.jpg]]<br />
{| class="sortable" {{Prettytable|style=margin-top:0;}}
1: rcuff - right wrist cuff<br />
|- {{Hl2}}
2: rbiceps - right upperarm cuff<br />
!| #
3: lbiceps - left upper arm cuff<br />
!| name
4: lcuff - left wrist cuff<br />
! class="unsortable" | Description
5: lblade - left shoulder blade<br />
|-
6: rblade - right shoulder blade<br />
|| 1 || rcuff || right wrist cuff
7: rnipple - right nipple point<br />
|-
8: lnipple - left nipple point<br />
|| 2 || rbiceps || right upperarm cuff
9: rfbelt - right front of the belt<br />
|-
10: lfbelt - left front of the belt<br />
|| 3 || lbiceps || left upper arm cuff
11: rtigh - right upper leg cuff<br />
|-
12: ltigh - left upper leg cuff<br />
|| 4 || lcuff || left wrist cuff
13: rlcuff - right ankle cuff<br />
|-
14: llcuff - left ankle cuff<br />
|| 5 || lblade || left shoulder blade
15: lbbelt - left back of the belt<br />
|-
16: rbbelt - right back of the belt<br />
|| 6 || rblade || right shoulder blade
17: pelvis - lower front of the pelvis<br />
|-
18: fbelt - front of the belt<br />
|| 7 || rnipple || right nipple point
19: bbelt - back of the belt<br />
|-
20: rcollar - right of the collar<br />
|| 8 || lnipple || left nipple point
21: lcollar - left of the collar<br />
|-
22: thead - top of the head<br />
|| 9 || rfbelt || right front of the belt
23: collar - front of the collar<br />
|-
24: lbit - left corner of mouth/cheek (for pony bits)<br />
|| 10 || lfbelt || left front of the belt
25: rbit - right corner of mouth/cheek (for pony bits)<br />
|-
26: nose - nose<br />
|| 11 || rtigh || right upper leg cuff
27: bcollar - back of the collar<br />
|-
28: back - middle of the back<br />
|| 12 || ltigh || left upper leg cuff
<br />
|-
OTHERS:<br />
|| 13 || rlcuff || right ankle cuff
handle - type "leash handle" , this is usuefull for leashing to a leash handle.<br />
|-
<br />
|| 14 || llcuff || left ankle cuff
special commands<br />
|-
<avatar key>col<vector> - order a color change (used in lockmeister collars to tint the cuffs like the collar) OPTIONAL<br />
|| 15 || lbbelt || left back of the belt
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)<br />
|-
<br />
|| 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
|}
|[[Image:lockmeister-mooring-pts.jpg]]
|}
 
====Others====
* handle - type "leash handle" , this is useful for leashing to a leash handle.
 
===Special Commands===
<avatar key>col<vector> - order a color change (used in LockMeister collars to tint the cuffs like the collar) OPTIONAL<br />
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<br />
<avatar key>booton/bootoff = commands sent by collar objects, asking that the shoes animation overrider be started or stopped<br />
ex: "748bb591-0d9d-4907-8287-dc27b8267e24booton" activate the animation overrider<br />
ex: "748bb591-0d9d-4907-8287-dc27b8267e24booton" activate the animation overrider<br />
ex: "748bb591-0d9d-4907-8287-dc27b8267e24bootoff" deactivate the animation overrider<br />
ex: "748bb591-0d9d-4907-8287-dc27b8267e24bootoff" deactivate the animation overrider
<br />
 
<br />
===Seal Of Approval===
if you plan to integrate the lockmeister system to your products, contact [[KyrahAbattoir]] inworld to get the aproval logo<br />
If you plan to integrate the LockMeister System into your products, contact {{User|Kyrah Abattoir}} inworld to get logo approval.
a basic lockmeister furniture need to receive the seal of aproval:<br />
====Requirements====
<br />
Here is a list of what a piece of basic LockMeister furniture needs to receive the seal of approval.
-high quality building<br />
 
-use a single listener for the lockmeister channel<br />
*High quality building
-test the presence of the cuffs it need when the avatar sit on it<br />
*Use a single listener for the LockMeister channel
-if cuffs respond, draw the chains properly<br />
*Test the presence of the cuffs it need when the avatar sits on it
-must provide a free cuff set or the required attachments it need to work properly (you can get mines)<br />
*If cuffs respond, draw the chains properly
<br />
*Must provide a free cuff set or the required attachments it need to work properly (you can use mine)
Example scripts<br />
<br />
example attachment script:<br />


===Example Scripts===


<lsl>//KDC sample lockmeister attachment version 1.0
====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
//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!!
//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
//KDC, kyrah design concept
Line 126: Line 166:
     {
     {
         if(llGetAttached() != attach_point && attach_control)
         if(llGetAttached() != attach_point && attach_control)
             llRequestPermissions(llGetOwner(),PERMISSION_ATTACH);
             llRequestPermissions(llGetOwner(), PERMISSION_ATTACH);
         else
         else
             llListen(-8888,"","","");//open the lockmeister channel
             llListen(-8888,"","","");//open the lockmeister channel
Line 137: Line 177:
     run_time_permissions(integer perm)
     run_time_permissions(integer perm)
     {
     {
         llOwnerSay(attach_text);
         if(perm & PERMISSION_ATTACH)
        llDetachFromAvatar();
        {
            llOwnerSay(attach_text);
            llDetachFromAvatar();
        }
     }
     }
}</lsl>
}</lsl>

Revision as of 15:10, 21 May 2008

License

IMPORTANT PLEASE READ
There has been a change in the license covering the LockMeister Protocol, this license change will affect all new users.

The LockMeister Protocol is now covered under the a modified (see below for detail of the changes) GNU GPLv3 (http://www.gnu.org/licenses/gpl.txt for details.)

Changes to the GPLv3

In order to ensure bi-directional compatibility, any other protocol used in conjunction with the Lockmeister protocol must be available under the GPLv3.
--Kyrah Abattoir 02:52, 21 May 2008 (PDT)

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

# 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
Lockmeister-mooring-pts.jpg

Others

  • handle - type "leash handle" , this is useful for leashing to a leash handle.

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

Seal Of Approval

If you plan to integrate the LockMeister System into your products, contact Kyrah Abattoir inworld to get logo approval.

Requirements

Here is a list of what a piece of basic LockMeister furniture needs to receive the seal of approval.

  • High quality building
  • Use a single listener for the LockMeister channel
  • Test the presence of the cuffs it need when the avatar sits on it
  • If cuffs respond, draw the chains properly
  • Must provide a free cuff set or the required attachments it need to work properly (you can use mine)

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
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_ATTACH)
       {
           llOwnerSay(attach_text);
           llDetachFromAvatar();
       }
   }

}</lsl>