////////////////////////////////////////////////////////// // WaS (c) grimore.org - 2011, License: GPLv3 with the// // exception of the Ord function created by Pedro // // Oval which carries an unknown license. // ////////////////////////////////////////////////////////// // Ord() function, written by Pedro Oval, 2010-05-28 // This function works by using llEscapeURL to find the corresponding UTF-8 // string then converts it to the Unicode code. In cases where llEscapeURL // doesn't help, a combination of llStringToBase64 and llBase64ToInteger // does the job instead. integer Ord(string chr) { if (chr == "") return 0; string hex = llEscapeURL(chr); if (llGetSubString(hex, 0, 0) != "%") { // Regular character - we can't take advantage of llEscapeURL in this case, // so we use llStringToBase64/llBase64ToInteger instead. return llBase64ToInteger("AAAA" + llStringToBase64(llGetSubString(chr, 0, 0))); } integer b = (integer)("0x" + llGetSubString(hex, 1, 2)); if (b < 194 || b > 244) return b; if (b < 224) return ((b & 0x1F) << 6) | (integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F; integer cp; if (b < 240) { cp = (b & 0x0F) << 12; cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 6; cp += (integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F; return cp; } cp = (b & 0x07) << 18; cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 12; cp += ((integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F) << 6; cp += (integer)("0x" + llGetSubString(hex, 10, 11)) & 0x3F; return cp; } key _owner = NULL_KEY; string letter = ""; integer comChannel = 0; default { state_entry() { _owner = llGetOwner(); comChannel = ((integer)("0x"+llGetSubString((string)llGetOwner(),-8,-1)) & 0x3FFFFFFF) ^ 0xBFFFFFFF; llListen(comChannel, "[K] Holo Panel", "", ""); } listen(integer channel, string name, key id, string message) { list pSet = llCSV2List(message); integer idx = llListFindList(pSet, (list)llGetObjectDesc()); if(~idx) letter = llList2String(pSet,idx+1); if(letter == "") letter = " "; llSetTexture("OpenSans_Regular_" + (string)Ord(letter), 3); } timer() { llWhisper(comChannel, "die," + llGetObjectDesc() + ",pos," + (string)llGetPos() + ",let," + letter); llDie(); } on_rez(integer param) { llSetTimerEvent(56.25); // alarm - see http://grimore.org/wiki/Wizardry_and_Steamworks/Randomness,_Entropy_and_Statistics llSetObjectDesc((string)param); _owner = llGetOwner(); } changed(integer change) { if(change & CHANGED_OWNER) _owner = llGetOwner(); } }