OsMessageAttachments
From OpenSimulator
(Difference between revisions)
(15 intermediate revisions by one user not shown) | |||
Line 2: | Line 2: | ||
|threat_level=Moderate | |threat_level=Moderate | ||
|permissions=${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER | |permissions=${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER | ||
− | |delay=0 | + | |delay= (0.1 plus 0.010 per prim) |
|function_syntax= osMessageAttachments(key avatar, string message, list attachmentPoints, integer options); | |function_syntax= osMessageAttachments(key avatar, string message, list attachmentPoints, integer options); | ||
|description= | |description= | ||
Line 9: | Line 9: | ||
Behaves as [[osMessageObject]], without the sending script needing to know the attachment keys in advance. | Behaves as [[osMessageObject]], without the sending script needing to know the attachment keys in advance. | ||
<div style="background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid"> | <div style="background-color:#FFA500; padding:10px; padding-bottom:5px; border: 1px #FF544F solid"> | ||
− | This | + | This is incompatible with the normal use of dataserver event on scripts the receiving prim. |
</div> | </div> | ||
+ | |||
+ | 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_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. | ||
+ | |||
+ | This options can be combined with binary or |<br> | ||
+ | |||
+ | Calling with [[OSSL Constants/OS_ATTACH_MSG_ALL|OS_ATTACH_MSG_ALL]] in list attachmentPoints will sends the message to attachments on every point. If [[OSSL Constants/OS_ATTACH_MSG_INVERT_POINTS|OS_ATTACH_MSG_INVERT_POINTS]] is also provide, the message is ignored<br> | ||
|ossl_example=<source lang="lsl"> | |ossl_example=<source lang="lsl"> | ||
Line 94: | Line 103: | ||
</source> | </source> | ||
|additional_info=This function was added in 0.7.5-post-fixes | |additional_info=This function was added in 0.7.5-post-fixes | ||
− | |||
}} | }} |
Latest revision as of 19:35, 5 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 | Calling with OS_ATTACH_MSG_ALL in list attachmentPoints will sends the message to attachments on every point. If OS_ATTACH_MSG_INVERT_POINTS is also provide, the message is ignored | |
Threat Level | Moderate |
Permissions | ${OSSL|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER |
Extra Delay | (0.1 plus 0.010 per prim) 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 |