LlGetObjectDetails

From Second Life Wiki
Jump to: navigation, search

Summary

Function: list llGetObjectDetails( key id, list params );

Returns a list of the details for id, specifically those requested in params.

• key id group, avatar or prim UUID that is in the same region or adjacent regions*
• list params OBJECT_* flags

An empty list if id is not found. OBJECT_UNKNOWN_DETAIL is returned when passed an invalid integer parameter.

Specification

Avatar detection range for SL Server 1.34
id Parameter

id holds the UUID of the avatar or prim this function is going to get the details of.

If id is not found in the region, adjacent regions are searched for avatars which match id. An avatar is only considered to have been found if it is inside the region, or within a 34 meter zone outside the region boundaries (see diagram). A single valid result may be returned after the avatar leaves this zone.

params Parameter

The params list is used to indicate the object attributes of interest. The order they are supplied in determines the order of the corresponding return values in the return list.

  • If params contains unsupported integer values, OBJECT_UNKNOWN_DETAIL is placed in the output list.
  • If params contains non-integer types, those values will be silently ignored.
Flags Description Length when typecast to a string Return Alternatives Local
OBJECT_NAME 1 Gets the prim's name.
If id is an avatar, the Legacy Name is returned.
max. 63 characters string name llGetObjectName
OBJECT_DESC 2 Gets the prim's description.
If id is an avatar, an empty string is returned.
max. 127 characters string desc llGetObjectDesc
OBJECT_POS 3 Gets the prim's position in region coordinates.
If id is an avatar outside the region (see above), this position is relative to the region the script is running in.
max. 37 characters vector pos llGetPos
OBJECT_ROT 4 Gets the prim's rotation. max. 48 characters rotation rot llGetRot
OBJECT_VELOCITY 5 Gets the object's velocity. 36 characters vector vel llGetVel
OBJECT_OWNER 6 Gets an object's owner key.
If id is an avatar, that avatar's key is returned (which is the same as id).
If id is group-owned, a NULL_KEY is returned.
36 characters key owner llGetOwner
OBJECT_GROUP 7 Gets the prim's group key.
If id is an avatar, a NULL_KEY is returned.[1]
36 characters key group Group
OBJECT_CREATOR 8 Gets the prim's creator key.
If id is an avatar, a NULL_KEY is returned.
36 characters key creator Creator llGetCreator
OBJECT_RUNNING_SCRIPT_COUNT 9 Gets the number of running scripts attached to the object or agent. max. 11 characters integer count llGetScriptState
OBJECT_TOTAL_SCRIPT_COUNT 10 Gets the number of scripts, both running and stopped, attached to the object or agent. max. 11 characters integer count llGetInventoryNumber
OBJECT_SCRIPT_MEMORY 11 Gets the total amount of script memory allocated to the object or agent, in bytes. max. 11 characters integer bytes
OBJECT_SCRIPT_TIME 12 Gets the total amount of average script CPU time used by the object or agent, in seconds. max. 15 characters float seconds Top Scripts
OBJECT_PRIM_EQUIVALENCE 13 Gets the prim equivalence of the object. max. 11 characters integer count Calculating land impact
OBJECT_SERVER_COST 14 Gets the server cost of the object. max. 15 characters float cost Server cost
OBJECT_STREAMING_COST 15 Gets the streaming (download) cost of the object. max. 15 characters float cost Streaming (download) cost
OBJECT_PHYSICS_COST 16 Gets the physics cost of the object. max. 15 characters float cost Physics cost
OBJECT_CHARACTER_TIME 17 Gets the average CPU time (in seconds) used by the object for navigation, if the object is a pathfinding character. Returns 0 for non-characters. max. 15 characters float seconds Pathfinding characters
OBJECT_ROOT 18 Gets the id of the root prim of the object requested.
If id is an avatar, returns the id of the root prim of the linkset the avatar is sitting on and linked to (or the avatar's own id if the avatar is not sitting on an object within the region).
36 characters key root llGetLinkKey
OBJECT_ATTACHED_POINT 19 Gets the attachment point to which the object is attached. max. 11 characters integer attach_point llGetAttached
OBJECT_PATHFINDING_TYPE 20 Gets the pathfinding setting of the object in the region. It returns an integer matching one of the OPT_* constants. max. 11 characters integer type Pathfinding types
OBJECT_PHYSICS 21 Gets the integer boolean detailing if physics is enabled or disabled on the object.
If id is an avatar or attachment, 0 is returned.
1 character integer boolean llGetStatus PRIM_PHYSICS
OBJECT_PHANTOM 22 Gets the integer boolean detailing if phantom is enabled or disabled on the object.
If id is an avatar or attachment, 0 is returned.
1 character integer boolean llGetStatus PRIM_PHANTOM
OBJECT_TEMP_ON_REZ 23 Gets the integer boolean detailing if temporary is enabled or disabled on the object. 1 character integer boolean PRIM_TEMP_ON_REZ
OBJECT_RENDER_WEIGHT 24 Gets the avatar's render weight.
If id is an object, 0 is returned. If id is an avatar whose render weight is unknown to the simulator, -1 is returned. The maximum render weight reported by the server is 500000.
max. 6 characters integer weight Avatar_Rendering_Cost
OBJECT_HOVER_HEIGHT 25 Gets the hover height of the avatar.
If id is not an avatar, 0.0 is returned. Normal values are in the range [-2.0, 2.0] with a default of 0.0. This value does not reflect the avatar shape's "Hover" slider, only the dynamic viewer setting.
max. 9 characters float height
OBJECT_BODY_SHAPE_TYPE 26 Gets a float which describes the sex setting of the avatar's currently worn shape.
If id is not an avatar, -1.0 is returned.
Normal operational values are in the range [0.0, 1.0].
  • 0.0 is standard female setting,
  • 1.0 is standard male setting.

Intermediate values with visible differences are possible with manually crafted shapes.

max. 9 characters float shape
OBJECT_LAST_OWNER_ID 27 Gets the UUID of the object's previous owner, if known. For group-owned objects, this is the avatar that deeded the object. 36 characters key last_owner
OBJECT_CLICK_ACTION 28 Gets the Click Action of the prim. max. 11 characters integer action
OBJECT_OMEGA 29 Gets the object's rotational velocity (radians per second). 36 characters vector omega llGetOmega
OBJECT_PRIM_COUNT 30 Gets the object's prim count max. 3 characters integer count llGetObjectPrimCount llGetNumberOfPrims
OBJECT_TOTAL_INVENTORY_COUNT 31 Gets the object's total number of inventory items. max. 10 characters integer count llGetInventoryNumber(INVENTORY_ALL)
OBJECT_REZZER_KEY 32 Gets the key of the object that rezzed this object be it an object or an avatar. 36 characters key rezzer
OBJECT_GROUP_TAG 33 Gets the avatar's group tag text.
If id is not an avatar, an empty string is returned.
max. 20 bytes string text
OBJECT_TEMP_ATTACHED 34 Gets the integer boolean detailing if the object is temporarily attached. 1 character integer boolean
OBJECT_ATTACHED_SLOTS_AVAILABLE 35 Gets the avatar's available attachment slot count.
If id is not an avatar, 0 is returned.
max. 2 characters integer boolean
OBJECT_CREATION_TIME 36 Gets the object's creation time. This time is established with raw material rezzing through the build menu and with mesh uploads.
This time is NOT established with inventory rezzes, scripted rezzes, object modifying, copying or transferring.
If id is an avatar, an empty string is returned.
max. 27 bytes string timestamp
OBJECT_SELECT_COUNT 37 Gets the total number of agents selecting any links in the object.
If id is an avatar, 0 is returned.
max. 3 characters integer boolean
OBJECT_SIT_COUNT 38 Gets the total number of agents sitting on any links in the object.
If id is an avatar, 0 is returned.
max. 3 characters integer boolean

Caveats

  • OBJECT_ROT will return an accurate facing for Avatars seated or in mouselook, but only a rough direction otherwise.
  • Adjacent regions are not searched for prims which match id.
  • Information for avatars that can no longer be found will still be available for a short period (about 45 seconds) but it is not updated.
  • Items in params that are not integers are silently ignored, OBJECT_UNKNOWN_DETAIL is not returned.
  • This function does not return information about items in inventory.
  • llTargetOmega will only effect the return of OBJECT_ROT if the object is physical. If the object is not physical then the original start rotation is returned, llTargetOmega is a client side effect.
  • OBJECT_SCRIPT_MEMORY reports the maximum memory that all scripts in an object could use, not the actual amount of real memory currently used. In particular, Mono scripts only report the default 64K or what they chose with llSetMemoryLimit, not the current dynamic allocation that is only accessible from within the script. For LSO scripts, the 16K is real usage in all cases. In practice, this makes the number reported a worst case scenario.
  • OBJECT_RUNNING_SCRIPT_COUNT includes crashed scripts in its count.
  • OBJECT_REZZER_KEY will return NULL_KEY for objects rezzed prior to server version 16.01.16.310114
  • Objects copied in-world between server versions 16.01.16.310114 & 16.10.14.320687 return the object's creator key for rezzer key.
  • Child prims linked before server version 17.11.11.510664 return the root prim's rezzer key.
  • Child prims delinked before server version 17.11.11.510664 return NULL_KEY for rezzer key.
  • When targeting an agent with OBJECT_REZZER_KEY while they are sitting on an object, the rezzer key of the object's root prim is returned.

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   [Won't Fix] OBJECT_RUNNING_SCRIPT_COUNT includes the crashed scripts in the count of running scripts.

Examples

default
{
    collision_start(integer num_detected)
    {
        key  id      = llDetectedKey(0);
        list details = llGetObjectDetails(id, ([OBJECT_NAME, OBJECT_DESC,
                            OBJECT_POS, OBJECT_ROT, OBJECT_VELOCITY,
                            OBJECT_OWNER, OBJECT_GROUP, OBJECT_CREATOR]));
 
        llWhisper(PUBLIC_CHANNEL, "UUID: " + (string)id
                    + "\nName: '"          + llList2String(details, 0)
                    + "'\nDescription: '"  + llList2String(details, 1)
                    + "'\nPosition: "      + llList2String(details, 2)
                    + "\nRotation: "       + llList2String(details, 3)
                    + "\nVelocity: "       + llList2String(details, 4)
                    + "\nOwner: "          + llList2String(details, 5)
                    + "\nGroup: "          + llList2String(details, 6)
                    + "\nCreator: "        + llList2String(details, 7));
    }
}
// group join inviter
// gets the name of the object's active group from the online group profile
 
key groupNameRequestId;
key groupKey;
string groupName;
 
init()
{
    // WARNING:
    // different prims can have different active groups!!!
 
    // get the key of the root prim's group
    groupKey = llList2Key(llGetObjectDetails(llGetLinkKey(LINK_ROOT), [OBJECT_GROUP]), 0);
 
    // request the name of the root prim's group
    groupNameRequestId = llHTTPRequest("http://world.secondlife.com/group/" + (string)groupKey, [], "");
}
 
default
{
    state_entry()
    {
        init();
    }
 
    touch_start(integer num_detected)
    {
        if (groupKey == NULL_KEY || groupName == "")
            return;
 
        key id = llDetectedKey(0);
        llInstantMessage(id,
            "Click the link to join the group '" + groupName + "'\n"
            + "secondlife:///app/group/" + (string)groupKey + "/about");
    }
 
    http_response(key request_id, integer status, list metadata, string body)
    {
        if (request_id != groupNameRequestId)
            return;
 
        list args = llParseString2List(body, ["title"], []);
        groupName = llList2String(llParseString2List(llList2String(args, 1), [">", "<", "/"], []), 0);
    }
}
// aim & shoot
default
{   state_entry()
    {   llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
    }
    control(key id, integer pressed, integer change) 
    {   if(change & pressed & CONTROL_ML_LBUTTON)
            llSensor("", "", AGENT|PASSIVE|ACTIVE, 96.0, PI/16.0);
    }
    run_time_permissions(integer perm)
    {   if(perm&PERMISSION_TAKE_CONTROLS)
            llTakeControls(CONTROL_ML_LBUTTON, TRUE, TRUE); 
    }
    sensor(integer n)
    {   key uuid=llDetectedKey(0);
        list a = llGetObjectDetails(uuid, ([
            OBJECT_NAME, OBJECT_DESC, OBJECT_POS, OBJECT_ROT,
            OBJECT_VELOCITY,OBJECT_OWNER, OBJECT_GROUP, OBJECT_CREATOR]));
        llOwnerSay("UUID: " + (string)uuid +
            "\nName: \"" + llList2String(a,0)+ "\"" +
            "\nDecription: \"" + llList2String(a,1) + "\"" +
            "\nPosition: " + llList2String(a,2) +
            "\nRotation: " + llList2String(a,3) +
            "\nVelocity: " + llList2String(a,4) +
            "\nOwner: " + llList2String(a,5) +
            "\nGroup: " + llList2String(a,6) +
            "\nCreator: " + llList2String(a,7)
        );
    }
}
// Object Script Time
default
{
    touch_start(integer num_detected)
    {
        llOwnerSay(llGetObjectName()+" Script Time: "+llList2String(llGetObjectDetails(llGetKey(), [OBJECT_SCRIPT_TIME]), 0));
    }
}

Useful Snippets

See Link/Get for some link related helper functions. Also see llGetLinkPrimitiveParams if you need to get the position and rotation of a linked prim.

integer isLindenTreeOrGrass(key id){
    //Check if it's an OPT_OTHER and not an attachment, which makes it a Linden tree or grass!
    list out = llGetObjectDetails(id, [OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT]);
    return (llList2Integer(out, 0) == OPT_OTHER) && !llList2Integer(out, 1);
}

See Also

Functions

•  llKey2Name
•  llGetPrimitiveParams
•  llSetLinkPrimitiveParams
•  llSetPrimitiveParams
•  llGetParcelDetails

Articles

•  Limits SL limits and constrictions
•  Detected
•  Prim Attribute Overloading

Deep Notes

History

• 2007 SL 1.18.3(2) Introduced
• 28-09-2007 SL 1.18.3.285.29 Released

All Issues

~ Search JIRA for related Issues
   OBJECT_DISPLAY_NAME and OBJECT_USERNAME to llGetObjectDetails()
   [Won't Fix] OBJECT_RUNNING_SCRIPT_COUNT includes the crashed scripts in the count of running scripts.

Footnotes

  1. ^ There are at least 3 JIRA's about OBJECT_GROUP and avatars, LL has refused all of them. Most recently on December 5th 2013 in BUG-4654.
  2. ^ The ranges in this article are written in Interval Notation.

Signature

function list llGetObjectDetails( key id, list params );