User talk:Ugleh Ulrik
Hi, A few suggestions
Lists in LSL are among the most memory intensive types of data. Manipulation of lists even more memory intensive. When manipulating data that does not NEED to be typecast to a list it is far more efficient to use other methods. As with the below examples (these serve the same functions as those from your page without costing the earth).
Vector2List
<lsl>list Vector2List(vector v){
return [v.x, v.y, v.z]; // *Tips a wink to Strife*
}</lsl>
FirstName & LastName
The llKey2Name function does have a limited use. It will NOT return the name of an agent who is not now or has not very recently been on the same region as the script and will NOT return the name of an agent who is offline. The dataserver event (and its companion functions) can help make this function far more reliable.
<lsl>key name_q; // Used to referrence dataserver requests.
string FirstName(string name) // Deliver the name. {
return llDeleteSubString(name, llSubStringIndex(name, " "), -1);
} // Return name with all removed from the separating space to the end.
string LastName(string name) // Deliver the name. {
return llGetSubString(name, (llSubStringIndex(name, " ") + 1), -1);
} // Return name from the separating space to the end.
string FirstOrLastName(string name, integer FoL) // TRUE for first name, FALSE for last name. {
if(FoL) // If FoL == TRUE... return llDeleteSubString(name, llSubStringIndex(name, " "), -1); // Return first name. return llGetSubString(name, (llSubStringIndex(name, " ") + 1), -1); // If FoL != TRUE return last name.
}
default {
state_entry() { key owner = llGetOwner(); // We need a key...wherever it may come from. name_q = llRequestAgentData(owner, DATA_NAME); // Request the name that belongs to that key. } dataserver(key q, string data) // Triggered by a return of data requested. { if(q == name_q) // Check which request is being answered. { llOwnerSay("First name - " + FirstName(data)); // Say the data. llOwnerSay("Last name - " + LastName(data)); // Say the data. llOwnerSay("First name - " + FirstOrLastName(data, TRUE)); // Say the data. llOwnerSay("Last name - " + FirstOrLastName(data, FALSE)); // Say the data. } }
}</lsl>
TrimString
<lsl>string TrimStringToLength(string text, integer length) // Deliver text and desired length of output. {
if(length >= llStringLength(text)) // If text is shorter than or the same length as desired... return text; // Send text back. return (llGetSubString(text, 0, (length - 4)) + "..."); // Else, get string from text and add continuum dots.
}
default {
state_entry() { llOwnerSay(TrimStringToLength("I like toitles!! - http://www.youtube.com/watch?v=CMNry4PE93Y", 19)); }
}</lsl>