OsMessageAttachments

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
Line 13: Line 13:
  
 
Options:
 
Options:
[[OSSL Constants/OS_ATTACH_MSG_INVERT_POINTS|OS_ATTACH_MSG_INVERT_POINTS]] invert how the attachment points list should be treated. Will send to all but the listed ones
+
* [[OSSL Constants/OS_ATTACH_MSG_INVERT_POINTS|OS_ATTACH_MSG_INVERT_POINTS]] invert how the attachment points list should be treated. Will send to all but the listed ones
[[OSSL Constants/OS_ATTACH_MSG_OBJECT_CREATOR|OS_ATTACH_MSG_OBJECT_CREATOR]] send only to those attachments that have the same CreatorID as the script host prim
+
* [[OSSL Constants/OS_ATTACH_MSG_OBJECT_CREATOR|OS_ATTACH_MSG_OBJECT_CREATOR]] send only to those attachments that have the same CreatorID as the script host prim
[[OSSL Constants/OS_ATTACH_MSG_SCRIPT_CREATOR|OS_ATTACH_MSG_SCRIPT_CREATOR]] send only to those attachments  that have the same CreatorID as the script itself.
+
* [[OSSL Constants/OS_ATTACH_MSG_SCRIPT_CREATOR|OS_ATTACH_MSG_SCRIPT_CREATOR]] send only to those attachments  that have the same CreatorID as the script itself.
  
calling with [[OSSL Constants/OS_ATTACH_MSG_ALL|OS_ATTACH_MSG_ALL]] as attachpoint sends the message to attachments on every point<br>
+
This options can be combined with binary or |<br>
 +
 
 +
Calling with [[OSSL Constants/OS_ATTACH_MSG_ALL|OS_ATTACH_MSG_ALL]] as attachpoint sends the message to attachments on every point<br>
  
 
|ossl_example=<source lang="lsl">
 
|ossl_example=<source lang="lsl">

Revision as of 09:33, 1 January 2022

osMessageAttachments(key avatar, string message, list attachmentPoints, integer options);
Sends a specified message to the specified avatar's attachments on the specified attachment points.

Behaves as osMessageObject, without the sending script needing to know the attachment keys in advance.

This is incompatible with the normal use of dataserver event on scripts the receiving prim.

Options:

This options can be combined with binary or

Threat Level Moderate
Permissions ${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
Extra Delay 0 seconds
Example(s)
string NPCName = "osMessageAttachments";
key npc;
 
default
{
    state_entry()
    {
        llSensor("", NULL_KEY, OS_NPC, 96, TWO_PI);
    }
 
    sensor(integer d)
    {
        integer i;
        for(i=0;i<d;++i)
        {
            if(llDetectedName(i) == NPCName + " NPC")
            {
                osNpcRemove(llDetectedKey(i));
            }
        }
 
        llSensor("", NULL_KEY, OS_NPC, 96, TWO_PI);
    }
 
    no_sensor()
    {
        state ready;
    }
}
 
 
state ready
{
    state_entry()
    {
        npc = osNpcCreate(NPCName, "NPC", llGetPos(), llGetOwner());
    }
 
    touch_start(integer p)
    {
        integer i;
        integer wasNPC = FALSE;
        for(i=0;i<p;++i)
        {
            key detected = llDetectedKey(i);
            if(!wasNPC)
            {
                wasNPC = detected == npc;
            }
            list attachments = osGetNumberOfAttachments(detected, [
                ATTACH_HEAD,
                ATTACH_LHAND,
                ATTACH_RHAND
            ]);
            list attachmentsToMessage = [];
            integer j;
            integer k = llGetListLength(attachments);
            integer l;
            for(j=0;j<k;j+=2){
                l = llList2Integer(attachments, j);
                if(l > 0 && llList2Integer(attachments, j + 1) > 0){
                    attachmentsToMessage += [l];
                }
            }
            osMessageAttachments(detected, "foo", attachmentsToMessage, 0);
            osMessageAttachments(detected, "bar", attachmentsToMessage, OS_ATTACH_MSG_INVERT_POINTS);
            osMessageAttachments(detected, "baz", [OS_ATTACH_MSG_ALL], 0);
            osMessageAttachments(detected, "will never be sent", [OS_ATTACH_MSG_ALL], OS_ATTACH_MSG_INVERT_POINTS);
 
            osMessageAttachments(detected, "heard by both feet", [ATTACH_LFOOT, ATTACH_RFOOT], 0);
            osMessageAttachments(detected, "heard by object creator feet", [ATTACH_LFOOT, ATTACH_RFOOT], OS_ATTACH_MSG_OBJECT_CREATOR);
            osMessageAttachments(detected, "heard by script creator feet", [ATTACH_LFOOT, ATTACH_RFOOT], OS_ATTACH_MSG_SCRIPT_CREATOR);
        }
        if(!wasNPC)
        {
            osNpcTouch(npc, llGetKey(), 0);
        }
    }
}
Notes
This function was added in 0.7.5-post-fixes

See the OSSL Constants page for information about the pre-defined constants that can be used for the 'options' argument of this function call.

Personal tools
General
About This Wiki