NameTest
Jump to navigation
Jump to search
Library
<source lang="lsl2"> string previous_name; key previous_key;
key owner_key; // to filter out owner chat integer name_channel; integer name_listener = 0;
key requestor;
key name_key_query; key key_name_query;
integer pickChannel() {
return (integer)("0x"+llGetSubString((string)llGetKey(),-8,-1));
}
askForPreviousName(key agent, string prompt) {
name_listener = llListen(name_channel, "", "", ""); llTextBox( agent, prompt, name_channel );
}
string nameFilter(string possibleName) {
string candidate_name = ""; list name_list = llParseString2List( llStringTrim(possibleName, STRING_TRIM), [" ","."], [] );
integer number_of_words = llGetListLength(name_list); if (number_of_words == 0) { llRegionSayTo(requestor, 0, "No name found"); } else if (number_of_words > 2) { llRegionSayTo(requestor, 0, "That is too many words to be a name"); } else { candidate_name = llDumpList2String(name_list,"."); } return candidate_name;
}
default {
on_rez(integer unused) { llResetScript(); }
state_entry() { owner_key = llGetOwner(); name_channel = pickChannel();
vector ORANGE = <1 , 0.522, 0.106>; llSetText("Touch to translate a previous name", ORANGE, 1.0); }
touch_start(integer num_touches) { requestor = llDetectedKey(0); if (owner_key == requestor) { askForPreviousName(owner_key, "Enter an old name:"); } else { askForPreviousName(requestor, "Enter your previous name:"); } }
listen(integer channel, string name, key id, string message) { if (channel == name_channel) { previous_name = nameFilter(message); // will send any error message to the id if (llStringLength(previous_name) > 0) { state key_query; } } }
}
state key_query {
state_entry() { name_key_query = llRequestUserKey(previous_name); } dataserver(key queryid, string data) { if ( name_key_query == queryid ) { previous_key = (key)data; if (previous_key == NULL_KEY) { llRegionSayTo(requestor, 0, "'"+previous_name+"' is not a valid name"); state default; } else { state name_query; } } }
state_exit() { name_key_query = NULL_KEY; }
}
state name_query {
state_entry() { key_name_query = llRequestUsername(previous_key); } dataserver(key queryid, string data) { if ( key_name_query == queryid ) { if (data == previous_name) { llSay(0,"'"+previous_name+"' is the current name"); } else { llSay(0,"'"+data+"' was '"+previous_name+"'"); } state default; } }
state_exit() { key_name_query = NULL_KEY; previous_name = ""; previous_key = NULL_KEY; }
} </source>