secondlife / jira-archive

3 stars 0 forks source link

[BUG-9749] When sitting on a prim with or without a sittarget a scripted listener in an attachment cannot receive say/shout/whisper messages from another scripted attachment if seated further than the range of the say/shout/whisper from the root prim of the object #17214

Closed sl-service-account closed 9 months ago

sl-service-account commented 9 years ago

Steps to Reproduce

I sat on a prim in a linkset of a building that had no scripts in it (no sittarget set). A worn scripted attachment on my avatar failed to listen to commands from another worn and scripted attachment on my avatar.

I then began testing to see exactly where the failure was and learned that the listen was the issue. I also observed that if the attachments are worn prior to sitting the scripts will exhibit a communications failure. It should be noted that if the listening attachment is worn after sitting the objects will exhibit successful communications as expected.

Test One:

  1. Create a prim and add the following script to it:

//Listens to chat from Listen Test Speaker script below changing the color of the prim when it hears the proper chat
list colors = [<0, 0, 0>, <1, 0, 0>, <0, 1, 0>, <0, 0, 1>, <1, 1, 1>];

default
{
    on_rez(integer start_params)
    {
        llResetScript();
    }

    state_entry()
    {
        llSetObjectName("Listen Test Listener");
        llListen(-12, "", "", "");
    }

    listen(integer chan, string name, key id, string msg)
    {
        list temp = llParseString2List(msg, ["||"], [""]);
        if(llList2Key(temp, 0) == llGetOwner())
        {
            llSetColor((vector)llList2String(colors, (integer)llList2String(temp, 1)), ALL_SIDES);
        }
    }
}
  1. Create a second prim and add the following script to it:

//Speaks on a timed event and changes it's color.
list colors = [<0, 0, 0>, <1, 0, 0>, <0, 1, 0>, <0, 0, 1>, <1, 1, 1>];
integer x = 0;

default
{
    on_rez(integer start_params)
    {
        llResetScript();
    }

    state_entry()
    {
        llSetObjectName("Listen Test Speaker");
        llWhisper(-12, (string)llGetOwner() + "||" + (string)x);
        llSetColor((vector)llList2String(colors, x), ALL_SIDES);
        llSetTimerEvent(10);
    }

    timer()
    {
        x++;
        if(x > 4)
        {
            llResetScript();
        }
        else
        {
            llWhisper(-12, (string)llGetOwner() + "||" + (string)x);
            llSetColor((vector)llList2String(colors, x), ALL_SIDES);
            llSetTimerEvent(10);
        }
    }
}
  1. Take both objects into your inventory.
  2. Wear both objects on your avatar.
  3. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).

Notice the objects stop communicating with each other.

Test Two:

  1. Follow the steps 1, 2, and 3 from Test One.
  2. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).
  3. Wear both objects on your avatar.

You will notice that the prims continue to communicate as expected.

Test Three:

  1. Follow steps 1, 2, and 3 as in the previous two tests.
  2. Wear only the speaking scripted attachment (Listen Test Speaker).
  3. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).
  4. Wear the listening scripted attachment (Listen Test Listener).

You will notice that the prims continue to communicate as expected.

You can confirm the speaking status of the Listen Test Speaker script by placing another Listen Test Speaker near your avatar and observe it's behavior.

Actual Behavior

When sitting on a prim with or without a sittarget if the seated avatar is further than the range of the say/shout/whisper range of a scripted speaking worn attachment (such as a hud) a worn attachment set to listen to the speaking attachment will fail to hear the messages. The speaking attachment continues to speak, but the listening attachment will not hear the messages acting as though it is out of range unless the listening scripted attachment is attached after sitting.

Expected Behavior

Worn attachments should be able to continue to communicate with each other regardless of seated position from the root prim. They should work exactly as they do if an avatar is standing.

Other information

I tested this using both Second Life 3.7.28 (300920) Apr 15 2015 08:00:41 (Second Life Project Managed Marketplace) and Firestorm 4.7.1 (45325) Apr 30 2015 16:16:04 (Firestorm-Beta) with Havok support.

Original Jira Fields | Field | Value | | ------------- | ------------- | | Issue | BUG-9749 | | Summary | When sitting on a prim with or without a sittarget a scripted listener in an attachment cannot receive say/shout/whisper messages from another scripted attachment if seated further than the range of the say/shout/whisper from the root prim of the object | | Type | Bug | | Priority | Unset | | Status | Closed | | Resolution | Duplicate | | Reporter | Certified Lunasea (certified.lunasea) | | Created at | 2015-07-26T01:21:45Z | | Updated at | 2015-07-29T18:54:15Z | ``` { 'Business Unit': ['Platform'], 'Date of First Response': '2015-07-25T20:32:13.629-0500', "Is there anything you'd like to add?": 'Test One:\r\n\r\n1. Create a prim and add the following script to it:\r\n\r\n//Listen Test Listener - Listens to chat from Listen Test Speaker script below changing the color of the prim when it hears the proper chat\r\nlist colors = [<0, 0, 0>, <1, 0, 0>, <0, 1, 0>, <0, 0, 1>, <1, 1, 1>];\r\n\r\ndefault\r\n{\r\n on_rez(integer start_params)\r\n {\r\n llResetScript();\r\n }\r\n \r\n state_entry()\r\n {\r\n llSetObjectName("Listen Test Listener");\r\n llListen(-12, "", "", "");\r\n }\r\n \r\n listen(integer chan, string name, key id, string msg)\r\n {\r\n list temp = llParseString2List(msg, ["||"], [""]);\r\n if(llList2Key(temp, 0) == llGetOwner())\r\n {\r\n llSetColor((vector)llList2String(colors, (integer)llList2String(temp, 1)), ALL_SIDES);\r\n }\r\n }\r\n}\r\n\r\n2. Create a second prim and add the following script to it:\r\n\r\n//Listen Test Speaker - Speaks on a timed event and changes it\'s color.\r\nlist colors = [<0, 0, 0>, <1, 0, 0>, <0, 1, 0>, <0, 0, 1>, <1, 1, 1>];\r\ninteger x = 0;\r\n\r\ndefault\r\n{\r\n on_rez(integer start_params)\r\n {\r\n llResetScript();\r\n }\r\n \r\n state_entry()\r\n {\r\n llSetObjectName("Listen Test Speaker");\r\n llWhisper(-12, (string)llGetOwner() + "||" + (string)x);\r\n llSetColor((vector)llList2String(colors, x), ALL_SIDES);\r\n llSetTimerEvent(10);\r\n }\r\n \r\n timer()\r\n {\r\n x++;\r\n if(x > 4)\r\n {\r\n llResetScript();\r\n }\r\n else\r\n {\r\n llWhisper(-12, (string)llGetOwner() + "||" + (string)x);\r\n llSetColor((vector)llList2String(colors, x), ALL_SIDES);\r\n llSetTimerEvent(10);\r\n }\r\n }\r\n}\r\n\r\n3. Take both objects into your inventory.\r\n4. Wear both objects on your avatar.\r\n5. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).\r\n\r\nNotice the objects stop communicating with each other.\r\n\r\nTest Two:\r\n\r\n1. Follow the steps 1, 2, and 3 from Test One.\r\n2. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).\r\n3. Wear both objects on your avatar.\r\n\r\nYou will notice that the prims continue to communicate as expected.\r\n\r\nTest Three:\r\n\r\n1. Follow steps 1, 2, and 3 as in the previous two tests.\r\n2. Wear only the speaking scripted attachment (Listen Test Speaker).\r\n3. Sit on an object that puts you more than 10 meters from the root of the object (with or without a sittarget set by a script).\r\n4. Wear the listening scripted attachment (Listen Test Listener).\r\n\r\nYou will notice that the prims continue to communicate as expected.\r\n\r\nYou can confirm the speaking status of the Listen Test Speaker script by placing another Listen Test Speaker near your avatar and observe it\'s behavior.', 'Severity': 'Unset', 'System': 'SL Simulator', 'Target Viewer Version': 'viewer-development', 'What just happened?': 'When sitting on a prim with or without a sittarget if the seated avatar is further than the range of the say/shout/whisper range of a scripted speaking worn attachment (such as a hud) a worn attachment set to listen to the speaking attachment will fail to hear the messages. The speaking attachment continues to speak, but the listening attachment will not hear the messages acting as though it is out of range unless the listening scripted attachment is attached after sitting.', 'What were you doing when it happened?': 'I sat on a prim in a linkset of a building that had no scripts in it (no sittarget set). A worn scripted attachment on my avatar failed to listen to commands from another worn and scripted attachment on my avatar.\r\n\r\nI then began testing to see exactly where the failure was and learned that the listen was the issue IF the attachments are worn prior to sitting. If the attachments are worn after sitting they will communicate as expected.', 'What were you expecting to happen instead?': 'Worn attachments should be able to continue to communicate with each other regardless of seated position from the root prim. They should work exactly as they do if an avatar is standing.', 'Where': 'http://maps.secondlife.com/secondlife/Celebration%20Island/138/67/22', } ```
sl-service-account commented 9 years ago

Certified Lunasea commented at 2015-07-26T01:30:18Z

This issue may well be related to https://jira.secondlife.com/browse/SVC-6909 though it appears the SVC project is not longer active, hence creating a new report for this issue.

sl-service-account commented 9 years ago

Whirly Fizzle commented at 2015-07-26T01:32:14Z

Ref: SVC-6909 and BUG-9142

sl-service-account commented 9 years ago

Certified Lunasea commented at 2015-07-26T04:08:01Z, updated at 2015-07-26T04:37:26Z

Thank you, Whirly. I would have commented on those issues but unfortunately I am unable to do so. I did a bit of added testing prior to putting this issue up but could not add that to SVC-6909 and was not aware of BUG-9142 prior to submitting this entry. If at all possible I would like to have my observations and comments added to SVC-6909 and/or BUG-9142 in the hopes that the added reproduction steps allow Linden Lab to better locate and eliminate this bug.

I have marked this entry as a major bug due to the loss of functionality with worn attachments and the fact that this is unexpected, and may be of concern for merchants and their customers.

Edits: Additional edits made for readability and clarification.

sl-service-account commented 9 years ago

Lucia Nightfire commented at 2015-07-26T13:26:31Z

You can alternatively use llRegionSayTo() targeting yourself and all attachments listening to the target channel can detect the chat.

sl-service-account commented 9 years ago

Certified Lunasea commented at 2015-07-26T18:03:11Z

Thank you, Lucia. That certainly may be a workaround that I will have to do some testing with. Sounds like it may solve my individual issue.

That being said I still feel that the inconsistent behavior of llListen() in the above tests is a tad bothersome, and it really needs to have someone at Linden Lab look into it to determine why the communications are not working as expected, or at least why they are not consistent in their behavior.

If the behavior observed in test one is correct then added documentation (and perhaps a link to the llRegionSayTo() wiki page) may be needed on the Second Life Wiki for llSay(), llShout(), and llWhisper() and the inconsistent behavior observed in test two and test three needs to be fixed to be consistent with that behavior.

If the behavior observed in test two and test three is correct then the inconsistent behavior observed in test one needs to be fixed to allow the attached objects to communicate in the same manner as they would if the avatar is standing.

sl-service-account commented 9 years ago

Caleb Linden commented at 2015-07-29T18:54:16Z

We found a matching jira that dev is currently looking at. Thanks for the report