Basic Notecard Reader
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Basic Notecard Reader
Introduction
Quite often i read in configuration settings from a notecard. I thought i should stick up the core part of my notecard reading script. It's not exactly rocket science but hoepfully it's useful.
The Script
<lsl> // ******************************************************************** // // Base Notecard reader // // by SimonT Quinnell // // NOTE. This treats lines starting with '#' in the notecard as a comment // // ********************************************************************
// ******************************************************************** // CONSTANTS // ********************************************************************
string NOTECARD = "notecard";
// ********************************************************************
// Variables
// ********************************************************************
// internals for reading notecards
string strNotecard;
integer intLine1;
key keyConfigQueryhandle;
key keyConfigUUID;
default
{
state_entry() { if (llGetInventoryType(NOTECARD) == INVENTORY_NONE) { llSay(DEBUG_CHANNEL, "The notecard '"+NOTECARD+"' is missing!"); state main; } else { keyConfigQueryhandle = llGetNotecardLine(NOTECARD, intLine1 = 0); keyConfigUUID = llGetInventoryKey(NOTECARD); } } dataserver(key keyQueryId, string strData) { if (keyQueryId == keyConfigQueryhandle) { if (strData != EOF) { string strToken; strData = llStringTrim(strData, STRING_TRIM_HEAD); // Trim Whitespace if (llGetSubString (strData, 0, 0) != "#") // is it a comment? { // OK .. now we do somthing in here with our notecard } keyConfigQueryhandle = llGetNotecardLine(strNotecard, ++intLine1); } else { // Finished reasding the notecard state main; } } }
}
state main
{
state_entry() { // } changed(integer intChange) { if (intChange & CHANGED_INVENTORY) { // If the notecard has changed, then reload the notecard if (keyConfigUUID != llGetInventoryKey(NOTECARD)) { state default; } }
}
}
//********************************************* //THIS IS THE SCRIPT CORRECTED BY BLADE GAELYTH //The original one doesn't run //*********************************************
string NOTECARD = "notecard" // internals for reading notecards //string strNotecard; (useless) integer intLine1; key keyConfigQueryhandle; key keyConfigUUID;
default {
state_entry() { if (llGetInventoryType(NOTECARD) == INVENTORY_NONE) { llSay(DEBUG_CHANNEL, "The notecard '"+NOTECARD+"' is missing!"); state main; } else { keyConfigQueryhandle = llGetNotecardLine(NOTECARD, intLine1 = 0); keyConfigUUID = llGetInventoryKey(NOTECARD); } } dataserver(key keyQueryId, string strData) { if (keyQueryId == keyConfigQueryhandle) { if (strData != EOF) { //string strToken; (useless) strData = llStringTrim(strData, STRING_TRIM_HEAD); // Trim Whitespace; (not mandatory; if you use a space as marker you must erase this line if (llGetSubString (strData, 0, 0) != "#") // is it a comment? { // OK .. now we do somthing in here with our notecard } //keyConfigQueryhandle = llGetNotecardLine(strNotecard, ++intLine1); (wrong line) keyConfigQueryhandle = llGetNotecardLine(NOTECARD, ++intLine1); } else { // Finished reasding the notecard state main; } } }
}
state main
{
state_entry() { // } changed(integer intChange) { if (intChange & CHANGED_INVENTORY) { // If the notecard has changed, then reload the notecard if (keyConfigUUID != llGetInventoryKey(NOTECARD)) { state default; } } }
} </lsl>