OsMessageAttachments

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
m (Added a link to the OSSL Constants page)
m (XEngine to OSSL)
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{osslfunc
 
{{osslfunc
 
|threat_level=Moderate
 
|threat_level=Moderate
|permissions=${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
+
|permissions=${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
 
|delay=0
 
|delay=0
|function_syntax=void osMessageAttachments(key avatar, string message, list attachmentPoints, integer options);
+
|function_syntax= osMessageAttachments(key avatar, string message, list attachmentPoints, integer options);
 
|description=
 
|description=
 
Sends a specified message to the specified avatar's attachments on the specified attachment points.
 
Sends a specified message to the specified avatar's attachments on the specified attachment points.
Line 90: Line 90:
 
}
 
}
 
</source>
 
</source>
|additional_info= See the [[OSSL Constants]] page for information about the pre-defined constants that can be used for the 'options' argument of this function call.
+
|additional_info=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.
 
}}
 
}}

Revision as of 07:33, 7 November 2019

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.

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