llGetAgentList

From Second Life Wiki
Revision as of 13:42, 20 March 2012 by Kelly Linden (talk | contribs)
Jump to navigation Jump to search
Emblem-important-yellow.png LSL Feature Request
The described function does not exist. This article is a feature request.

Summary

Function: list llGetAgentList( integer max_agents, integer flags );

Requests a list of agents currently in the region, limited by the flags parameter.

  • AGENT_LIST_PARCEL - returns only agents on the same parcel where the script is running.
  • AGENT_LIST_PARCEL_OWNER - returns only agents on any parcel in the region where the parcel owner is the same as the owner of the parcel under the scripted object.
  • AGENT_LIST_REGION - returns any/all agents in the region.
    Returns a list [key id0, key id1, ..., key idn] or [string error_msg] - returns avatar keys for all agents in the region limited to the area specified by flags
• integer max_agents Maximum number of agents to return in the list. Must be greater than 0 and less than 200.
• integer flags selection flags

Caveats

  • There is no guaranteed understandable order or randomness to the list returned.
  • If there are more agents than max_agents, the agents returned will not be random nor meaningfully ordered.
  • If no agents enter or leave the list returned will probably not change.
    • Example: in a region with 20 agents, llGetAgentList(5,AGENT_LIST_REGION) will return 5 arbitrary agents. It will probably return the same 5 as long as no one enters or leaves the region, but that is not guaranteed. It will not cycle through the agents in any way and the 5 agents returned are not random.
    • Example: llGetAgentList(1,AGENT_LIST_PARCEL) is NOT a good way to get 1 random resident on a parcel because the result is not random.
  • It is recommended to set max_agents as high as needed for the possible number of agents to process and low enough that a list with that many UUIDs would not cause a Stack-Heap Collision error.
  • Examples and shared code should use 100 for max_agents unless specifically required to be something else: this will ensure that the script will work in all current regions in Second Life.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl>//Displays up to 100 avatar key: name pairs detected in the entire region list gaAgents; integer giMaxAgentsToReturn = 100;

default {

   touch_start(integer total_number)
   {
       integer  i;
       integer  liCount;
       gaAgents = llGetAgentList(giMaxAgentsToReturn,AGENT_LIST_REGION);
       liCount = llGetListLength(gaAgents);
       if (liCount > 0)
           if (llGetListEntryType(gaAgents,0) == TYPE_STRING)
               llOwnerSay("Error: "+llList2String(gaAgents,0));
           else
               for (i=0; i < liCount; ++i)
                   llOwnerSay(llList2String(gaAgents,i)+": "+llKey2Name(llList2String(gaAgents,i)));
  }
}</lsl>

Deep Notes

Search JIRA for related Issues

Signature

//function list llGetAgentList( integer max_agents, integer flags );