Difference between revisions of "LlRequestAgentData"

From Second Life Wiki
Jump to navigation Jump to search
m (<lsl> tag to <source>)
m (Replaced <source> with <syntaxhighlight>)
 
(4 intermediate revisions by 2 users not shown)
Line 12: Line 12:
|spec
|spec
|caveats=*[[DATA_BORN]] is not UTC. It is Pacific Time based.
|caveats=*[[DATA_BORN]] is not UTC. It is Pacific Time based.
* It's worth restating: if the requested data does not exist - or if the key given is not for an agent - then [[dataserver]] will '''not''' be raised.
|constants={{{!}} {{Prettytable|style=margin-top:0;margin-right:0;}}
|constants={{{!}} {{Prettytable|style=margin-top:0;margin-right:0;}}
{{!}}- {{Hl2}}
{{!}}- {{Hl2}}
Line 20: Line 21:
{{Template:LSL_Constants/llRequestAgentData}}
{{Template:LSL_Constants/llRequestAgentData}}
{{!}}}
{{!}}}
|examples=<source lang="lsl2">key owner_key;
|examples='''DATA_NAME'''<syntaxhighlight lang="lsl2">key owner_key;
key owner_name_query;
key owner_name_query;
string owner_name;
string owner_name;
Line 39: Line 40:
         }
         }
     }
     }
}//Anylyn Hax 06:19, 23 July 2007 (PDT)</source>
}//Anylyn Hax 06:19, 23 July 2007 (PDT)</syntaxhighlight>
 
'''DATA_ONLINE'''<syntaxhighlight lang="lsl2">/*
    Server friendly online status example by Daemonika Nightfire.
   
    It is not a big load for the server to check every 2 minutes if there is an avatar in the region.
    But it is nonsense to trigger a dataserver event for online status when nobody is in the region.
    For this purpose, the script checks the number of avatars in the region on each pass.
*/
 
 
key owner;
float repeat = 120.0; // 60 - 120 sec. Recommended, faster than 60 seconds and LL will kick your XXX.
 
key status_request;
Status()
{
    integer agent_count = llGetRegionAgentCount();
    if(agent_count > 0) // skip the request if nobody is in the region
    {
        status_request = llRequestAgentData(owner, DATA_ONLINE);
    }
}
 
default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetTimerEvent(repeat);
        Status();
    }
 
    timer()
    {
        Status();
    }
   
    dataserver(key queryid, string data)
    {
        if(queryid == status_request)
        {
            // requested data contains the string "0" or "1" for DATA_ONLINE
            // i convert it to an integer and use the boolean as index
           
            //list index = [  0,      1,    2(0+2), 3(1+2)  ]
            list status = ["OFFLINE","ONLINE",<1,0,0>,<0,1,0>];
           
            string text = llList2String(status,(integer)data);    // boolean/index = 0  or 1
            vector color = llList2Vector(status,(integer)data+2); // boolean/index = 0+2 or 1+2
           
            llSetText(text, color, 1.0);
        }
    }
   
    on_rez(integer Dae)
    {
        llResetScript();
    }
}</syntaxhighlight>
|helpers
|helpers
|also_functions={{LSL DefineRow||[[llGetAgentInfo]]|}}
|also_functions={{LSL DefineRow||[[llGetAgentInfo]]|}}
Line 47: Line 107:
|notes
|notes
|deepnotes=
|deepnotes=
If you merely wish to show avatar name information in the viewer window, it may be more straightforward to avoid a DATA_NAME dataserver event and simply output: <source lang="lsl2">llSay(0, "secondlife:///app/agent/" + (string)id + "/about");</source>
If you merely wish to show avatar name information in the viewer window, it may be more straightforward to avoid a DATA_NAME dataserver event and simply output: <syntaxhighlight lang="lsl2">llSay(0, "secondlife:///app/agent/" + (string)id + "/about");</syntaxhighlight>
|deprecated
|deprecated
|cat1=Dataserver
|cat1=Dataserver

Latest revision as of 19:17, 13 October 2023

Summary

Function: key llRequestAgentData( key id, integer data );
0.1 Forced Delay
10.0 Energy

Requests data about agent id. When data is available the dataserver event will be raised
Returns the handle (a key) for the dataserver event when it is raised.

• key id avatar UUID
• integer data DATA_* flag

data Constant Type Description
DATA_ONLINE 1 (integerboolean If the requested agent is online
DATA_NAME 2 string The requested agent's legacy name
DATA_BORN 3 string The account creation/"born on" date as a string in an ISO 8601 format of YYYY-MM-DD.
DATA_RATING 4 llCSV2List() Deprecated: Returns [0, 0, 0, 0, 0, 0]
Used to return: [pos_behavior, neg_behavior, pos_appearance, neg_appearance, pos_building, neg_building]
DATA_PAYINFO 8 (integermask Flag Description
PAYMENT_INFO_ON_FILE 0x1 If payment info is on file.
PAYMENT_INFO_USED 0x2 If payment info has been used.

Caveats

  • This function causes the script to sleep for 0.1 seconds.
  • DATA_BORN is not UTC. It is Pacific Time based.
  • It's worth restating: if the requested data does not exist - or if the key given is not for an agent - then dataserver will not be raised.

Examples

DATA_NAME
key owner_key;
key owner_name_query;
string owner_name;

default
{
    state_entry()
    {
        owner_key = llGetOwner();
        owner_name_query = llRequestAgentData(owner_key, DATA_NAME);
    }
    dataserver(key queryid, string data)
    {
        if ( owner_name_query == queryid )
        {
            owner_name = data;
            llSay(0, "The owner of this script is called : " + owner_name );
        }
    }
}//Anylyn Hax 06:19, 23 July 2007 (PDT)
DATA_ONLINE
/*
    Server friendly online status example by Daemonika Nightfire.
    
    It is not a big load for the server to check every 2 minutes if there is an avatar in the region.
    But it is nonsense to trigger a dataserver event for online status when nobody is in the region.
    For this purpose, the script checks the number of avatars in the region on each pass.
*/


key owner;
float repeat = 120.0; // 60 - 120 sec. Recommended, faster than 60 seconds and LL will kick your XXX.

key status_request;
Status()
{
    integer agent_count = llGetRegionAgentCount();
    if(agent_count > 0) // skip the request if nobody is in the region
    {
        status_request = llRequestAgentData(owner, DATA_ONLINE);
    }
}

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetTimerEvent(repeat);
        Status();
    }

    timer()
    {
        Status();
    }
    
    dataserver(key queryid, string data)
    {
        if(queryid == status_request) 
        {
            // requested data contains the string "0" or "1" for DATA_ONLINE
            // i convert it to an integer and use the boolean as index
            
            //list index = [   0,       1,     2(0+2), 3(1+2)  ]
            list status = ["OFFLINE","ONLINE",<1,0,0>,<0,1,0>];
            
            string text = llList2String(status,(integer)data);    // boolean/index = 0   or 1
            vector color = llList2Vector(status,(integer)data+2); // boolean/index = 0+2 or 1+2
            
            llSetText(text, color, 1.0);
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}

See Also

Events

•  dataserver

Functions

•  llGetAgentInfo

Deep Notes

If you merely wish to show avatar name information in the viewer window, it may be more straightforward to avoid a DATA_NAME dataserver event and simply output:
llSay(0, "secondlife:///app/agent/" + (string)id + "/about");

Signature

function key llRequestAgentData( key id, integer data );