Difference between revisions of "Notecard Configuration Reader by Maddox Deluxe"
Line 2: | Line 2: | ||
|background=#cdd | |background=#cdd | ||
|bordercolor=#000 | |bordercolor=#000 | ||
|First make a note card called Settings and copy the data of this one into it. The 00000000-0000-0000-0000-000000000000 just means no floor drop. Error checking for Key Names and Values works now. Forgot to add one more error checking for empty notecard data, it has been done now. This script is | |First make a note card called Settings and copy the data of this one into it. The 00000000-0000-0000-0000-000000000000 just means no floor drop. Error checking for Key Names and Values works now. Forgot to add one more error checking for empty notecard data, it has been done now. This script is good to go :)| | ||
}} | }} | ||
<pre> | <pre> |
Revision as of 13:23, 24 April 2014
// our test notecard [Author Name] = Maddox Deluxe // Theme [1] [Menu Button Name] = Fantasy Tiger [BackDrop Texture UUID] = 8f304cf2-7120-24e2-d1f1-db6b31bd6f6c [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000 // Theme [2] [Menu Button Name] = Fantasy Car [BackDrop Texture UUID] = 517b2288-67ca-b14c-1de2-c5f5fdf5291f [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000 // Theme [3] [Menu Button Name] = Fantasy Tree [BackDrop Texture UUID] = f6321118-cc24-6230-78a5-a257a3e33378 [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000
[Author Name] = Maddox Deluxe [Menu Button Name] = Fantasy Tiger [BackDrop Texture UUID] = 8f304cf2-7120-24e2-d1f1-db6b31bd6f6c [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000 [Menu Button Name] = Fantasy Car [BackDrop Texture UUID] = 517b2288-67ca-b14c-1de2-c5f5fdf5291f [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000 [Menu Button Name] = Fantasy Tree [BackDrop Texture UUID] = f6321118-cc24-6230-78a5-a257a3e33378 [FloorDrop Texture UUID] = 00000000-0000-0000-0000-000000000000
<lsl> // Notecard Multi-line Entries Configuration Reader v1.2 by Maddox Deluxe // Key Names and values Error Checking // This script is free; you can redistribute it and/or modify it // Just read the comments on the script
key NotecardQueryId; // key name of the notecard key LineRequestID; // notecard line count integer LineTotal; // The number of lines in the notecard integer LineIndex; // index for data read requests
string Author_Name = ""; // variable for setting author name string Menu_Button_Name = ""; // variable for setting menu button name to the themes list string Back_Drop_UUID = ""; // variable for setting backdrop uuid key to the themes list string Floor_Drop_UUID = ""; // variable for setting floor drop uuid key to the themes list
string data; // notecard data string GetNoteName; // incoming notecard name
list Themes; // our list database for testing list KeyNames; // our list database for the key names: [Author Name]. [Menu Button Name], ect..
integer ThemesCount; // counts how many themes they are in the notecard configuration
key User; // user tracker key
// function by Maddox Deluxe // test to dump all 3 elements in the list that goes with each other DumpListFind(list db, string name) {
integer index = llListFindList(db, [name]); if (~index) { list Found = llList2List(db, index, index + 2); string BN = llList2String(Found,0); string BD = llList2String(Found,1); string FD = llList2String(Found,2); llOwnerSay("Dump testing for list database search.\nAuthor Name: "+(string)Author_Name+ "\nButton Name: "+(string)BN+ "\nBackdrop Texture: "+(string)BD+ "\nFloor drop Texture: "+(string)FD); llOwnerSay("List Dump Found Test: "+llDumpList2String(Found, ",")); // llMessageLinked(LINK_SET, 0,"SET BACKDROP TEXTURE",(string)BD); if(FD != "00000000-0000-0000-0000-000000000000") { // llMessageLinked(LINK_SET, 0,"SET FLOOR DROP TEXTURE",(string)FD); } }
} // function by Maddox Deluxe // looks for 3 elements and the search string is the first element of the set integer IsElement(list db, string search) {
integer index = llListFindList(db, [search]); if (~index) { list Found = llList2List(db, index, index + 2); string str = llList2String(Found,0); if (str == search) return TRUE; // was found } return FALSE; // was not found }
// function by Maddox Deluxe // checks the key names making sure they match what is setup in the notecard integer KeyNameCheck(string name) {
integer i; for (i=0;i<llGetListLength(KeyNames);++i) { string s = llList2String(KeyNames,i); if (s==name) return TRUE; } return FALSE;
} // Checks the uuid keys in the notecard, making sure they are real keys integer isKey(key check) {
if (llStringLength(check) != 36) return FALSE; // Hyphenation test: if ( (llGetSubString(check, 8, 8) != "-") || (llGetSubString(check, 13, 13) != "-") || (llGetSubString(check, 18, 18) != "-") || (llGetSubString(check, 23, 23) != "-")) return FALSE; // Remove dashes check = llDeleteSubString(llDeleteSubString(llDeleteSubString(llDeleteSubString((string)check, 8, 8), 12, 12), 16, 16), 20, 20); // Hex test integer i; for (i = 0; i < 32; i+=4) { string char = llGetSubString(check, i, i+3 ); if ((integer)("0x"+char) == 0 && char != "0000") return FALSE; } return TRUE; // Passed all tests
} // notecard initialization NoteCardInit(string GrabNoteCardName, key id) // key id could be use for dialog message or llInstantMessage {
if(llGetInventoryType(GrabNoteCardName) != INVENTORY_NOTECARD) { llInstantMessage(id,"Theme notecard was not found "+(string)GrabNoteCardName+"."); return; } LineRequestID = llGetNumberOfNotecardLines(GetNoteName); // total number of lines in the notecard Themes = []; // clear the themes list LineIndex = 0; // start reading from line 0 ThemesCount = 0; // start adding from 0 NotecardQueryId = llGetNotecardLine(GetNoteName, LineIndex); KeyNames = []; // clear the keynames list // setup our key names KeyNames = ["[author name]","[menu button name]","[backdrop texture uuid]","[floordrop texture uuid]"]; llInstantMessage(id,"Please stand by, reading themes configuration for " +GetNoteName);
}
ProcessThemes(string data, key id) // key id could be use for dialog message or llInstantMessage
{
list cmd;
string cmd_grab;
string value;
// if we are at the end of the file
if(data == EOF) { llInstantMessage(id,"Done reading themes configuration for "+GetNoteName+ "\n\nTotal Themes: "+(string)ThemesCount); // lets use the 2nd search string for this test, the search strings are the button names in the notecard configuration if(IsElement(Themes,"Fantasy Car")==TRUE) { DumpListFind(Themes,"Fantasy Car"); return; } else return; } if(data == "") { // error checking for empty notecard data llInstantMessage(id,"Themes Configuration Format Error. No DATA found!"); llResetScript(); } if(data != "") { // lets move on and read the next line NotecardQueryId = llGetNotecardLine(GetNoteName, ++LineIndex); // cut off any leading blanks // ignore blank or comment lines // if you change the comment line from // to #, make sure you change the 1 to 0 if (llGetSubString(data, 0, 1) != "//" && llStringTrim(data, STRING_TRIM) != "" ) { cmd = llParseString2List(data, ["="], []); cmd_grab = llStringTrim(llToLower(llList2String(cmd, 0)),STRING_TRIM); value = llStringTrim(llList2String(cmd, 1), STRING_TRIM); // we only need this at the start to check for key name errors :) if(KeyNameCheck(cmd_grab)==FALSE) { llInstantMessage(id,"Themes Configuration Format Error on line: " +(string)LineIndex+ "."); llResetScript(); } if(cmd_grab == "[author name]") { Author_Name = value; // error checking for Author Name if(value == "") { llInstantMessage(id,"Themes Configuration Error on line: " +(string)LineIndex+ ". Author Name can not be empty."); llResetScript(); } } else if(cmd_grab == "[menu button name]") { Menu_Button_Name = value; // error checking for Menu Button Name if(value == "") { llInstantMessage(id,"Themes Configuration Error on line: " +(string)LineIndex+ ". Menu Button Name can not be empty."); llResetScript(); } } else if(cmd_grab == "[backdrop texture uuid]") { Back_Drop_UUID = value; // error checking for BackDrop Texture UUID if(value == "" || (isKey(llToLower((string)value)) != TRUE)) { llInstantMessage(id,"Themes Configuration Error on line: " +(string)LineIndex+ ". (1) The Backdrop Texture UUID is empty. (2) The Backdrop UUID is not a key."); llResetScript(); } } else if(cmd_grab == "[floordrop texture uuid]") { Floor_Drop_UUID = value; // error checking for FloorDrop Texture UUID if(value == "" || (isKey(llToLower((string)value)) != TRUE)) { llInstantMessage(id,"Themes Configuration Error on line: " +(string)LineIndex+ ". (1) The Floor-drop Texture UUID is empty. (2) The Floor-drop UUID is not a key."); llResetScript(); } ThemesCount = ThemesCount +1; // add +1 to our themes count }
// add to our test list database Themes += [Menu_Button_Name,Back_Drop_UUID,Floor_Drop_UUID];
} } }
default {
link_message(integer sender_num, integer num, string str, key id) { if(str == "SetUserKey") { // sets up the user key that click the object User = (key)id; } if(str == "LoadThemes") { // loads up our test notecard GetNoteName = id; NoteCardInit((string)GetNoteName, User);
} }
// triggered when task receives asynchronous data
dataserver(key request_id, string data) { if(request_id == NotecardQueryId) {
// we start processing our notecard data
ProcessThemes(data, User); } }
} </lsl>
<lsl> // Our test script for loading the notecard // place this script with the main notecard one and then just click the object
// our test notecard name for reading string NotecardName = "Settings";
default {
state_entry() { } touch_start(integer total_number) { key User = llDetectedKey(0); // sets the user key // sending user key to the notecard reader script llMessageLinked(LINK_SET,0,"SetUserKey",User); // sending the note card name to the notecard reader script llMessageLinked(LINK_SET,0,"LoadThemes",(string)NotecardName); }
} </lsl>
Test Run Output --------------- Dump testing for list database search. Author Name: Maddox Deluxe Button Name: Fantasy Car Backdrop Texture: 8f304cf2-7120-24e2-d1f1-db6b31bd6f6c Floor drop Texture: 00000000-0000-0000-0000-000000000000 List Dump Found Test: Fantasy Car,8f304cf2-7120-24e2-d1f1-db6b31bd6f6c,00000000-0000-0000-0000-000000000000