Difference between revisions of "LlGetObjectDesc"

From Second Life Wiki
Jump to navigation Jump to search
m
 
(25 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{LSL_Function
{{LSL_Function
|inject-2={{LSL_Function/prim-desc}}
|func_id=270|func_sleep=0.0|func_energy=10.0
|func_id=270|func_sleep=0.0|func_energy=10.0
|func=llGetObjectDesc
|func=llGetObjectDesc
|return_type=string
|return_type=string
|func_footnote
|func_footnote=To get the ''object's'' description (not the current prim's), use [[PRIM_DESC]] or [[OBJECT_DESC]].
|func_desc
|func_desc
|return_text=that is the description of the prim the script is attached to
|return_text=containing the description of the prim the script is attached to.
|spec
|spec
|caveats=*The prim description is limited to 127 bytes, any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.
|caveats=
{{LSL Tip|This function '''does not''' get the description of the object's rootprim, but the description of the prim containing the script. Please use [[llList2String]]([[llGetLinkPrimitiveParams]]([[LINK_ROOT]], [ [[PRIM_DESC]] ]), 0); instead.}}
|constants
|constants
|examples=<pre>
|examples=
{{{!}} class="sortable" width="100%" {{Prettytable}}
{{!}}- {{Hl2}}
! '''Get this prim's description'''
{{!}}-
{{!!}}<source lang="lsl2">
default
default
{
{
     state_entry()
     state_entry()
     {
     {
         llSay(PUBLIC_CHANNEL, llGetObjectDesc() );
    //  PUBLIC_CHANNEL has the integer value 0
         llSay(PUBLIC_CHANNEL, "This prim's description: " + llGetObjectDesc() );
     }
     }
}
}
</pre>
</source>
{{!}}}
 
{{{!}} class="sortable" width="100%" {{Prettytable}}
{{!}}- {{Hl2}}
! '''Get the root prim's description'''
{{!}}-
{{!!}}
<source lang="lsl2">
default
{
    state_entry()
    {
    //  PUBLIC_CHANNEL has the integer value 0
        llSay(PUBLIC_CHANNEL, "Rootprim's description: "
            + llList2String(llGetLinkPrimitiveParams(LINK_ROOT, [ PRIM_DESC ]), 0));
    }
}
</source>
{{!}}}
|helpers
|helpers
|also_functions=
|also_functions=
{{LSL DefineRow||{{LSLG|llSetObjectDesc}}|Sets the object description.}}
{{LSL DefineRow||[[llSetObjectDesc]]|Sets the prim description.}}
{{LSL DefineRow||{{LSLG|llGetObjectName}}|Gets the object name.}}
{{LSL DefineRow||[[llGetObjectName]]|Gets the prim name.}}
{{LSL DefineRow||{{LSLG|llSetObjectName}}|Sets the object name.}}
{{LSL DefineRow||[[llSetObjectName]]|Sets the prim name.}}
|also_tests
{{LSL DefineRow||[[llGetObjectDetails]]}}
|also_events
|also_events
|also_articles
|also_articles=
|notes=TEMPORARY EXTRA MEMORY STORAGE IN RUNNING SCRIPTS
{{LSL DefineRow||[[Prim Attribute Overloading]]}}
 
|notes
At the current time, you can hold up to 8034 characters in a prim's description while a script is running.
Once the script ends, whatever data is written into the description will be truncated to 127 - 255 characters.
While this is not stable for long-term data storage like it used to be, at the present time it can be a useful trick for dealing with larger amounts of data in a script.
 
The following scenario is one that demonstrates this effect:
 
Increment a string up to 7127 characters and then write that to the prim desc using llSetObjectDesc().
Clear the variable, desc_data = "",
Read the data back into a different variable, string tmp; tmp = llGetObjectDesc();
Show the length of tmp, it shows 7127,
 
Test this with a timer(has been proven up to 4 minutes at least, then clear tmp = "";
 
Read in the data again using a 3rd variable, string new; new = llGetObjectDesc(); then it shows the same length, 7127.
 
Now, comment out the code that writes the initial data, and just read the description data with llGetObjectDesc(), it only comes back 255 as the string length,
 
So it seems, as long as you write and read the data within the same occurrence of the script, its fine. But if you try and read the data back in a different script iteration, its limited to 255.
 
The assumption is that when a script is finished running, the state of the prim description and name are being updated, cutting it off at 127 to 255 characters.
--Geuis Dassin 6/16/07
 
<pre>
    touch_start(integer total_number)
    {
        llOwnerSay("start");
 
        //127 characters long, fills up viewable space
        desc_data = "DO NOT EDIT THIS. DO NOT CLICK HERE............................................................................................";
 
        //build the initial string, in this case the result will be 7127 characters long
        integer i=0;
        for(i=0;i<1500;i++){
   
            if(i % 100 == 0){
                //keep letting the user know the script is running.
                llOwnerSay((string)i); 
            }
            desc_data = (desc_data="") + desc_data + "aaaaa";
        }
 
        //show the length of the string before writing it
        llOwnerSay((string)llStringLength(desc_data));
 
        //##### COMMENT OUT THIS LINE DURING THE 2nd SCRIPT RUN TO PROVE THIS EXPERIMENT.
        //##### THE DATA RETURNED WILL BE TRUNCATED AFTER THIS SCRIPT ENDS
        //write the string to the prim description
        llSetObjectDesc(desc_data);
 
        //empty the first variable
        desc_data = "";
 
        //read the data we just wrote back into a new variable
        string temp;
        temp = (temp="") + temp + llGetObjectDesc();
 
        //show the length
        llOwnerSay((string)llStringLength(temp));
 
        //sleep for X number of seconds, to prove that it holds state while the script is running.
        llSleep(10);
        llOwnerSay("slept 10");
 
 
        //read it in again into a 3rd variable
        string new;
        new = (new="") + new + llGetObjectDesc();
 
        //show the string length again.
        llOwnerSay((string)llStringLength(new));
    }
</pre>
|cat1=Prim
|cat1=Prim
|cat2
|cat2=Description
|cat3
|cat3
|cat4
|cat4
}}
}}

Latest revision as of 01:18, 22 January 2015

Summary

Function: string llGetObjectDesc( );
0.0 Forced Delay
10.0 Energy

Returns a string containing the description of the prim the script is attached to.

To get the object's description (not the current prim's), use PRIM_DESC or OBJECT_DESC.

Caveats

  • The prim description is limited to 127 bytes; any string longer then that will be truncated. This truncation does not always happen when the attribute is set or read.
  • The pipe character '|' and the newline character '\n' are not legal in a prim's description. They will be replaced with '?'.[1]
  • Note that when people have "Hover Tips on All Objects" selected in the viewer's "View" menu, they'll see the object description pop-up for any object under their mouse pointer. For that reason, it is good practice to only set human-friendly information in the description, e.g. keys and such.
  • When an attached object is detached, changes made by script to the name and description (of the root prim) of the attachment will be lost. While the object is attached the name and description can be changed but it will not be reflected in inventory. This caveat does not apply to child prims.
    KBcaution.png Important: This function does not get the description of the object's rootprim, but the description of the prim containing the script. Please use llList2String(llGetLinkPrimitiveParams(LINK_ROOT, [ PRIM_DESC ]), 0); instead.

Examples

Get this prim's description
default
{
    state_entry()
    {
    //  PUBLIC_CHANNEL has the integer value 0
        llSay(PUBLIC_CHANNEL, "This prim's description: " + llGetObjectDesc() );
    }
}
Get the root prim's description
default
{
    state_entry()
    {
    //  PUBLIC_CHANNEL has the integer value 0
        llSay(PUBLIC_CHANNEL, "Rootprim's description: "
            + llList2String(llGetLinkPrimitiveParams(LINK_ROOT, [ PRIM_DESC ]), 0));
    }
}

See Also

Functions

•  llSetObjectDesc Sets the prim description.
•  llGetObjectName Gets the prim name.
•  llSetObjectName Sets the prim name.
•  llGetObjectDetails

Articles

•  Limits SL limits and constrictions
•  Prim Attribute Overloading

Deep Notes

Footnotes

  1. ^ The pipe character historically has been used to separate fields in the serialized version of inventory. The field is not multi-line so the newline character holds no meaning in this context.

Signature

function string llGetObjectDesc();