Difference between revisions of "LlRequestAgentData"

From Second Life Wiki
Jump to: navigation, search
m (Clarified caveat, RE: event not fired if ...)
(DATA_ONLINE Example added)
Line 21: Line 21:
 
{{Template:LSL_Constants/llRequestAgentData}}
 
{{Template:LSL_Constants/llRequestAgentData}}
 
{{!}}}
 
{{!}}}
|examples=<source lang="lsl2">key owner_key;
+
|examples=DATA_NAME<source lang="lsl2">key owner_key;
 
key owner_name_query;
 
key owner_name_query;
 
string owner_name;
 
string owner_name;
Line 41: Line 41:
 
     }
 
     }
 
}//Anylyn Hax 06:19, 23 July 2007 (PDT)</source>
 
}//Anylyn Hax 06:19, 23 July 2007 (PDT)</source>
 +
 +
DATA_ONLINE<source 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 on 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)
 +
        {
 +
            // data contains the string "0" or "1" for DATA_ONLINE
 +
            // i convert it to an integer and use the bolean as index
 +
           
 +
            //list status = [  0,      1,    2(0+2), 3(1+2)  ]
 +
            list status = ["OFFLINE","ONLINE",<1,0,0>,<0,1,0>];
 +
           
 +
            string text = llList2String(status,(integer)data);    // bolean = 0  or 1
 +
            vector color = llList2Vector(status,(integer)data+2); // bolean = 0+2 or 1+2
 +
           
 +
            llSetText(text, color, 1.0);
 +
        }
 +
    }
 +
   
 +
    on_rez(integer Dae)
 +
    {
 +
        llResetScript();
 +
    }
 +
}</source>
 
|helpers
 
|helpers
 
|also_functions={{LSL DefineRow||[[llGetAgentInfo]]|}}
 
|also_functions={{LSL DefineRow||[[llGetAgentInfo]]|}}

Revision as of 07:01, 30 December 2019

Summary

Function: key llRequestAgentData( key id, integer data );

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.

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   llRequestAgentData with DATA_ONLINE parameter has a delay of up to 10 minutes in reporting offline status

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 on 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) 
        {
            // data contains the string "0" or "1" for DATA_ONLINE
            // i convert it to an integer and use the bolean as index
 
            //list status = [  0,       1,     2(0+2), 3(1+2)  ]
            list status = ["OFFLINE","ONLINE",<1,0,0>,<0,1,0>];
 
            string text = llList2String(status,(integer)data);    // bolean = 0   or 1
            vector color = llList2Vector(status,(integer)data+2); // bolean = 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");

All Issues

~ Search JIRA for related Issues
   llRequestAgentKey() (llName2Key())
   llRequestAgentData with DATA_ONLINE parameter has a delay of up to 10 minutes in reporting offline status

Signature

function key llRequestAgentData( key id, integer data );