Jump to content

Totally mystified and at a loss


Phil Deakins
 Share

You are about to reply to a thread that has been inactive for 275 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

There must be another script, in a object owned by you (or otherwise with land privileges) that's mistakenly listening on channel 0 for agent UUIDs to ban. The script need not be on your land, but it simply must have those permissions.

If it's issuing a warning, is there no way of figuring out the identity of the object issuing that warning? I'd have expected it would be identified in such a way you could right-click the text and track down the object details.

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

First I want to thank the kitten, @Fionalein, who voluntarily put her fur on the sacrificial block for testing purposes, and she wouldn't even accept a saucer of milk for her sacrifice :)

I've done some more testing this morning. An ejected avatar receives these:-

Notification with the SL logo
"You are no longer allowed here and have 15 seconds to leave."

In local chat:
[00:29] [Second Life: You have been banned indefinitely]

Both are received at the same time.

The second one is standard, but the first one is an SL Notification, and not from an object that is telling the avatar that it has to leave. Objects can only use dialogs. They can't use notifications like that.

I've whittled the code down to the bare minimum:

default
{
    touch_start(integer num){
        llSetTimerEvent(1);           // scan
    }

    timer()
    {
        list lstAgents = llGetAgentList(AGENT_LIST_PARCEL, []);
        integer len = llGetListLength(lstAgents);
        key agent;
        integer i;
        for(i; i<len; i++){

            agent = llList2Key(lstAgents, i);
            if(agent != llGetOwner()){
                llSay(0, (string)agent);     // that's the line that does it
            }
        }
        llSetTimerEvent(0);
    }
}

13 hours ago, Qie Niangao said:

There must be another script, in a object owned by you (or otherwise with land privileges) that's mistakenly listening on channel 0 for agent UUIDs to ban. The script need not be on your land, but it simply must have those permissions.

I understand what you are saying, Qie, but simply saying a nearby avatar's uuid doesn't have the same effect. Also, there has never been a script that I've written that listens for uuids, or that includes that particular text, or that can issue a Notification. A script that is not on the land can't add an avatar to this land's ban list, and every object in the parcel is owned by me.

I'm not wearing anything that could do it and I have worn the same HUD attachments for years. Even it's something I'm wearing, it would surely pick up on a nearby avatar's uuid that's said by an avatar in local chat, but nothing happens.

I'd like to test it on someone else's land that is owned by the avatar and not by a group.

The bottom line is that it doesn't matter to me. It's just something weird that has peaked my curiosity. llSay()ing the uuid was merely used to indicate that the programme reaches that point with the right uuids, having gone through the white list, group, and private list filters; i.e. that trespassers are getting there and others are not.

Edited by Phil Deakins
Link to comment
Share on other sites

I understand it as a simulator message, the simulator just does it's job after someone get's banned but stays on the parcel. Don't believe me? Add a stunt victim on your parcel (alt) to your not allowed list manually. Compare messages, they will be the same. Now Phil's mystery is how the heck we get from llSay(0, (string)agent) to someone getting added to said list. Something must do that. Question is WHAT???

Edited by Fionalein
  • Thanks 1
Link to comment
Share on other sites

1 hour ago, Phil Deakins said:

default
{
    touch_start(integer num){
        llSetTimerEvent(1);           // scan
    }

    timer()
    {
        list lstAgents = llGetAgentList(AGENT_LIST_PARCEL, []);
        integer len = llGetListLength(lstAgents);
        key agent;
        integer i;
        for(i; i<len; i++){

            agent = llList2Key(lstAgents, i);
            if(agent != llGetOwner()){
                llSay(0, (string)agent);     // that's the line that does it
            }
        }
        llSetTimerEvent(0);
    }
}

Ok, I rezzed a new, clean tetrahedron on my back yard, created a new script, and put that code as its only contents. Then I borrowed a friend's account and TP'd his avatar to my backyard. I then touched the tetrahedron. It does broadcast a chat message to all nearby entities, yes. Three entities received it: Myself (i'm the guy with the suit & hat in the images below), my friend (Eris, she's the gal with the horns and wings), and a Data Logger object in my house. But Eris didn't get banned or ejected, nor did she receive any message directly from "Second Life". She did receive the chat message with her own id, and a little "i" bubble which, when she clicks on it, gives the identity of the object that sent the message.

As you can see, broadcasting anything using llSay -- especially on channel 0! -- maximizes chance of external objects with scripts picking up the message and acting on it in unpredictable ways. For example, I never intended for object "Data Logger" to receive and react-to that message, but it did.

That's why in my own security orb (it's actually a hot seller in the SL marketplace these days: "Convoluted Sentience Security Orb"), I use "llDialog" instead of "llSay", and I send the message only to the avatar I'm addressing (not to The World), and I use a channel number that's unique to each copy of my security orb (not channel 0). See here:

      // Warn:
      llDialog
      (
         ava_key,
         "Sorry, " + ava_nam + ", but you've entered a private area, "
         + "and you must leave within " + (string)delay + " seconds "
         + "or you will be ejected from this parcel.",
         ["Close"],
         chn_wrn
      );

Whereas, with llSay and channel 0, unintended objects can receive and react-to the message. (See images below, showing both me and Eris receiving the message, and also showing my Data Logger responding to it, which was not intended.)

So, in short, what I think is happening is, some object with a script is replying to your message. It may be on your land and you don't even know it. (Some objects can be buried underground like landmines; I've seen it.) But instead of trying to find the object that's reacting, I suggest just making the transmission a lot more focused and harder to intercept.

 

Conv-Chat.png

Eris-Message.png

Eris-Object.png

Edited by LoneWolfiNTj
fixed a spelling error
Link to comment
Share on other sites

2 hours ago, Phil Deakins said:

I understand what you are saying, Qie, but simply saying a nearby avatar's uuid doesn't have the same effect. Also, there has never been a script that I've written that listens for uuids, or that includes that particular text, or that can issue a Notification. A script that is not on the land can't add an avatar to this land's ban list, and every object in the parcel is owned by me.

First, I maybe misunderstood about the message saying the target "can no longer be there and that it has 15 seconds to go" which I took to be a dialog (which unfortunately wouldn't give you right-clickable object name anyway, now that I check) or a message in chat or object IM (which would). The system notifications, on the other hand, wouldn't mention which object told the sim to ban or eject the target when it actually happens.

I'm not terribly surprised that simply saying the UUID doesn't work; this other mystery script I'm hypothesizing would be listening to channel 0 but would be doing some tests in the listener, and then do some rudimentary authentication of the message origin—is it an object set to a group, perhaps—and maybe being an actual avatar won't pass that check.

My theory, such as it is, has this scripted object that's intended to act as a centralized "enforcer" for perhaps several satellite, parcel-specific intrusion detectors that restrict llGetAgentList to AGENT_LIST_PARCEL. The individual detectors might be intended to belong to tenants who lack the ability to eject/ban other tenants from their own parcels, but that instead communicate to the "enforcer" that is deeded to the group (in order for llAddToLandBanList to work. (AFAIK, both Eject and Ban merely need to be run in the same region, not necessarily on the same parcel. [WRONG: See EDIT below.])

[ETA: This hypothetical object would need to be within 100m to get a channel 0 message, because llRegionSay() can't use that channel. As I mentioned earlier, I do not suggest it was designed to use channel 0; I think that's a configuration bug of some sort.]

[EDIT: Crap! Of course you're right that llAddToLandBanList only affects the land it's on, so the "enforcer" would need to go back and tell something on the parcel to do that banning. Hmm.]

Edited by Qie Niangao
  • Like 1
Link to comment
Share on other sites

14 minutes ago, LoneWolfiNTj said:

That's why in my own security orb [...], I use "llDialog" instead of "llSay", and I send the message only to the avatar I'm addressing (not to The World), and I use a channel number that's unique to each copy of my security orb (not channel 0).

You missed what I said about it. The llSay() is merely an indicator to me that the script has reached that point through the filters. It isn't anything to do with the system I'm writing other than that. Dialogs are a bit of an overkill for that purpose :)

Link to comment
Share on other sites

11 minutes ago, Qie Niangao said:

My theory, such as it is, has this scripted object that's intended to act as a centralized "enforcer" for perhaps several satellite, parcel-specific intrusion detectors that restrict llGetAgentList to AGENT_LIST_PARCEL. The individual detectors might be intended to belong to tenants who lack the ability to eject/ban other tenants from their own parcels, but that instead communicate to the "enforcer" that is deeded to the group (in order for llAddToLandBanList to work. (AFAIK, both Eject and Ban merely need to be run in the same region, not necessarily on the same parcel.)

Again, I understand what you're saying. The parcel that it's happening on isn't group-owned. It's owned by Phil Deakins. That's why I'd like to test it on someone else's parcel that is also not group-owned. Only I, and scripts owned by me, have the ability to remove avatars from the parcel. Someone else's 'enforcer' script couldn't do it.

Link to comment
Share on other sites

2 hours ago, Phil Deakins said:

"You are no longer allowed here and have 15 seconds to leave."

Ok, I put my friend Eris in my "About Land / Access / Banned" list for 1 hour, and she received 3 messages very similar to what you described: system dialog bubbles first giving 15-second warning, then announcing ejection, and a chat message from "Second Life" saying "You are no longer allowed here and have been ejected.". (See images below.) So I have to concur with Fionalein that it's the sim itself sending those messages.

But in your case, that means something added the avatar who got ejected to your ban list. Have you checked your ban list? Was it empty before the llSay() call? Was it non-empty after? If "yes" and "yes", then you have an interesting mystery on your hands. I don't think it's your script causing this issue; I think it's a script in some other object that's putting any avatar ids it hears on channel 0 in your parcel's ban list. I think it would have to be a script you wrote in an object you own on the same parcel, if I'm not mistaken. I suggest using "World / Area Search", set to "objects on this parcel only", then find and scrutinize every object, and see it you can find any old scripts that you've forgotten about that could be doing this.

The only other option I can see is, it's a malfunction (either a bug in the code, or more likely just a temporary glitch) in the sim you're in. Try asking Second Life to reset that sim, and tell them why; I've had them oblige when asked nicely; then see if the problem goes away.

asdf.png

dfgh.png

ghjk.png

Link to comment
Share on other sites

45 minutes ago, Phil Deakins said:

You missed what I said about it.

Nope, I read and understood everything.

46 minutes ago, Phil Deakins said:

The llSay() is merely an indicator to me that the script has reached that point through the filters.

Yes, so I gathered. But I question the wisdom of using a "test" that's so vulnerable to corruption from outside sources. I mean, sure, if you want to debug every script on your parcel, plus the source code of the sim you're in, all at once, yes... but if you just want to debug the script you're currently working on, I suggest isolating communications as much as possible. If you don't like llDialog(), llRegionSayTo() is another good option. Heck, even the documentation for llSay() says "To avoid making your object spam its neighborhood, use llInstantMessage, llOwnerSay or llRegionSayTo". Something like this, perhaps:

default
{
    touch_start(integer num){
        llSetTimerEvent(1);           // scan
    }

    timer()
    {
        list lstAgents = llGetAgentList(AGENT_LIST_PARCEL, []);
        integer len = llGetListLength(lstAgents);
        key agent;
        integer i;
        for ( i = 0 ; i < len ; ++i ) {
            agent = llList2Key(lstAgents, i);
            if(agent != llGetOwner()){
                llRegionSayTo(agent, -4826354, (string)agent);
            }
        }
        llSetTimerEvent(0);
    }
} 

Then see if the bug persists.

For that matter,  your original version has a nasty bug in it that I just noticed: the "i" never gets initialized. Try initializing i to 0 in the for loop and see if that makes any difference at all. Probably not, but it often pays to fix little issues like that, because the can sometimes have surprising effects.

Link to comment
Share on other sites

1 minute ago, Frionil Fang said:

LSL guarantees everything is initialized to "zero" values

I probably knew that at one time but I've forgotten. 🙂 I always do the initialization overtly, anyway, on the premise that source code is firstly for programmers themselves, and only secondly as something for computers to read. I like to be able to come back 5 years later and read a piece of code i wrote and say "Ya, I see what that does", rather than "What moron wrote this garbage??? Oh, wait, that was me." 🙂

  • Like 1
Link to comment
Share on other sites

12 minutes ago, LoneWolfiNTj said:
1 hour ago, Phil Deakins said:

The llSay() is merely an indicator to me that the script has reached that point through the filters.

Yes, so I gathered. But I question the wisdom of using a "test" that's so vulnerable to corruption from outside sources.

I totally agree, I use llSay(DEBUG_CHANNEL..) for such testing.

Link to comment
Share on other sites

13 minutes ago, LoneWolfiNTj said:

Ok, I put my friend Eris in my "About Land / Access / Banned" list for 1 hour, and she received 3 messages very similar to what you described: system dialog bubbles first giving 15-second warning, then announcing ejection, and a chat message from "Second Life" saying "You are no longer allowed here and have been ejected.". (See images below.) So I have to concur with Fionalein that it's the sim itself sending those messages.

But in your case, that means something added the avatar who got ejected to your ban list. Have you checked your ban list? Was it empty before the llSay() call? Was it non-empty after? If "yes" and "yes", then you have an interesting mystery on your hands. I don't think it's your script causing this issue; I think it's a script in some other object that's putting any avatar ids it hears on channel 0 in your parcel's ban list. I think it would have to be a script you wrote in an object you own on the same parcel, if I'm not mistaken. I suggest using "World / Area Search", set to "objects on this parcel only", then find and scrutinize every object, and see it you can find any old scripts that you've forgotten about that could be doing this.

The only other option I can see is, it's a malfunction (either a bug in the code, or more likely just a temporary glitch) in the sim you're in. Try asking Second Life to reset that sim, and tell them why; I've had them oblige when asked nicely; then see if the problem goes away.

asdf.png

dfgh.png

ghjk.png

I appreciate all the time youi've put into this.

Yes, the Land Ban List was empty every time I tested. It had to be to get the avatars back for further testing.

Your post confirms what I said a couple of times - that I really didn't write that text ever. You got identical text, including the exact number of seconds. I'm wondering if the SL system sends that Notification when someone manages to get onto land that they are banned from. It shouldn't happen but perhaps it's a sort of backstop in case it does.

In this case, the avatars weren't added by anything before each test. They were happily standing around without any problem. It's only when that script is run that they are immediately ejected and receive the messages. I suppose it's remotely possible that there's an object owned by me somewhere nearby, that has a script in it that does it when the text object is clicked, but it's hugely unlikely. Just in case, though, yesterday I set all the scripts in all but one of my objects that have anything to do with security to not running. The demo one that needs to run, doesn't remove anyone. It's just a demo. Even so, I remmed out its only llAddToLandBanList() line. I'm the only one who can remove avatars so, if anything of mine is doing it, it must be inside a wall or floor. I will look even though it's only a very remote possibility.

I do think that there's a better chance with asking LL to reboot the sim :)

 

  • Like 1
Link to comment
Share on other sites

21 minutes ago, Love Zhaoying said:

Interesting, my "reading comprehension" must be off (I tend to read the Forum fast, bad habit). 

I thought Phil said he saw the behavior on multiple llSay() channels, not just channel 0!

* kicks self then ouches *

Just channel 0.

  • Thanks 1
Link to comment
Share on other sites

2 minutes ago, Phil Deakins said:

In this case, the avatars weren't added by anything before each test. They were happily standing around without any problem. It's only when that script is run that they are immediately ejected and receive the messages. I suppose it's remotely possible that there's an object owned by me somewhere nearby, that has a script in it that does it when the text object is clicked, but it's hugely unlikely. Just in case, though, yesterday I set all the scripts in all but one of my objects that have anything to do with security to not running. The demo one that needs to run, doesn't remove anyone. It's just a demo. Even so, I remmed out its only llAddToLandBanList() line. I'm the only one who can remove avatars so, if anything of mine is doing it, it must be inside a wall or floor. I will look even though it's only a very remote possibility.

What about any HUDs you may be wearing? Did the behavior happen when "you" (your avatar with your specific HUDs) weren't present?

Link to comment
Share on other sites

6 minutes ago, Phil Deakins said:

the avatars weren't added by anything before each test

Have you verified that after the target avatar gets ejected, that avatar is now in your ban list? If yes, it's probably a script somewhere that's doing it. If no, that's an even bigger mystery.

Link to comment
Share on other sites

16 minutes ago, LoneWolfiNTj said:

Nope, I read and understood everything.

Yes, so I gathered. But I question the wisdom of using a "test" that's so vulnerable to corruption from outside sources. I mean, sure, if you want to debug every script on your parcel, plus the source code of the sim you're in, all at once, yes... but if you just want to debug the script you're currently working on, I suggest isolating communications as much as possible. If you don't like llDialog(), llRegionSayTo() is another good option. Heck, even the documentation for llSay() says "To avoid making your object spam its neighborhood, use llInstantMessage, llOwnerSay or llRegionSayTo". Something like this, perhaps:

default
{
    touch_start(integer num){
        llSetTimerEvent(1);           // scan
    }

    timer()
    {
        list lstAgents = llGetAgentList(AGENT_LIST_PARCEL, []);
        integer len = llGetListLength(lstAgents);
        key agent;
        integer i;
        for ( i = 0 ; i < len ; ++i ) {
            agent = llList2Key(lstAgents, i);
            if(agent != llGetOwner()){
                llRegionSayTo(agent, -4826354, (string)agent);
            }
        }
        llSetTimerEvent(0);
    }
} 

Then see if the bug persists.

For that matter,  your original version has a nasty bug in it that I just noticed: the "i" never gets initialized. Try initializing i to 0 in the for loop and see if that makes any difference at all. Probably not, but it often pays to fix little issues like that, because the can sometimes have surprising effects.

But Says only reach 20m. Does llSay() reach further? My intention is not to broadcast it, but to keep it very local. Until recently, I always used llOwnerSay() but putting markers in more than one script, I've been using both, so they show in different colours.

The evictions won't occur unless it's an llSay(). They shouldn't occur with llSay(), but they do. I don't need it. I'vve moved passed it in the script, but it's very interesting just the same :)

The nasty bug? :)  It works as I've done it. When i is initialised, it's 0, and for(i; ....) starts the loop at 0. It's not a bug. It's a common way of doing it.

Link to comment
Share on other sites

4 minutes ago, LoneWolfiNTj said:

Have you verified that after the target avatar gets ejected, that avatar is now in your ban list? If yes, it's probably a script somewhere that's doing it. If no, that's an even bigger mystery.

Yes. Every time. I always have to remove them from the list so they can come back for more :)

  • Like 1
Link to comment
Share on other sites

3 minutes ago, Phil Deakins said:

The only HUD attachements I have on, I've had on for years - my clothes too lol

I'm not sure what that proves! And this question?

11 minutes ago, Love Zhaoying said:

Did the behavior happen when "you" (your avatar with your specific HUDs) weren't present?

 

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 275 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...