Difference between revisions of "Read Note Card Configuration"
Jump to navigation
Jump to search
(New page: <lsl> integer line; string configurationFile = "Application.Config"; key readLineId; string AvatarName; string FavoriteColor; init() { // reset configuration values to default Ava...) |
|||
Line 1: | Line 1: | ||
Learn how to read configuration files with Linden Scripting Language (LSL) in Second Life (SL). After viewing this tutorial, you will be able to: | |||
* Create a script | |||
* Read each line of a note card | |||
* Skip over comments | |||
* Skip blank lines | |||
* Notify the owner of the lines with unknown settings | |||
o Unknown setting name | |||
o Missing delimiter (equal sign) | |||
* Notify the owner of missing configuration note card | |||
* Detect when the notecard has been changed | |||
* Offer case-insensitive settings | |||
* Trim white-space from name/value settings | |||
* Initialize with default values | |||
* Detect that the name of the configuration file is a notecard | |||
* Detect that you have reached the end of the file | |||
<lsl> | <lsl> | ||
integer line; | integer line; |
Revision as of 13:16, 3 May 2008
Learn how to read configuration files with Linden Scripting Language (LSL) in Second Life (SL). After viewing this tutorial, you will be able to:
* Create a script * Read each line of a note card * Skip over comments * Skip blank lines * Notify the owner of the lines with unknown settings o Unknown setting name o Missing delimiter (equal sign) * Notify the owner of missing configuration note card * Detect when the notecard has been changed * Offer case-insensitive settings * Trim white-space from name/value settings * Initialize with default values * Detect that the name of the configuration file is a notecard * Detect that you have reached the end of the file
<lsl>
integer line;
string configurationFile = "Application.Config";
key readLineId;
string AvatarName;
string FavoriteColor;
init() {
// reset configuration values to default AvatarName = "Unknown"; FavoriteColor = "None"; // make sure the file exists and is a notecard if(llGetInventoryType(configurationFile) != INVENTORY_NOTECARD) { // notify owner of missing file llOwnerSay("Missing inventory notecard: " + configurationFile); return; // don't do anything else } // initialize to start reading from first line line = 0; // read the first line readLineId = llGetNotecardLine(configurationFile, line++);
} processConfiguration(string data) {
// if we are at the end of the file if(data == EOF) { // notify the owner llOwnerSay("We are done reading the configuration"); // notify what was read llOwnerSay("The avatar name is: " + AvatarName); llOwnerSay("The favorite color is: " + FavoriteColor); // do not do anything else return; } // if we are not working with a blank line if(data != "") { // if the line does not begin with a comment if(llSubStringIndex(data, "#") != 0) { // find first equal sign integer i = llSubStringIndex(data, "="); // if line contains equal sign if(i != -1) { // get name of name/value pair string name = llGetSubString(data, 0, i - 1); // get value of name/value pair string value = llGetSubString(data, i + 1, -1); // trim name list temp = llParseString2List(name, [" "], []); name = llDumpList2String(temp, " "); // make name lowercase (case insensitive) name = llToLower(name); // trim value temp = llParseString2List(value, [" "], []); value = llDumpList2String(temp, " "); // name if(name == "name") AvatarName = value; // color else if(name == "favorite color") FavoriteColor = value; // unknown name else llOwnerSay("Unknown configuration value: " + name + " on line " + (string)line);
} else // line does not contain equal sign { llOwnerSay("Configuration could not be read on line " + (string)line); } } } // read the next line readLineId = llGetNotecardLine(configurationFile, line++);
} default {
state_entry() { init(); } on_rez(integer start_param) { init(); } changed(integer change) { if(change & CHANGED_INVENTORY) init(); else if(change & CHANGED_OWNER) init(); } dataserver(key request_id, string data) { if(request_id == readLineId) processConfiguration(data); }
} </lsl>