Difference between revisions of "Basic Notecard Reader"
Jump to navigation
Jump to search
m (You guys need to fix your LSL source tags :/) |
|||
Line 8: | Line 8: | ||
==The Script== | ==The Script== | ||
< | <source lang="lsl2"> | ||
// ******************************************************************** | // ******************************************************************** | ||
// | // | ||
Line 171: | Line 171: | ||
} | } | ||
} | } | ||
</ | </source> | ||
==See also== | ==See also== | ||
*[[ Script_Library | Script Library ]] | *[[ Script_Library | Script Library ]] |
Revision as of 16:34, 23 March 2016
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
// ********************************************************************
//
// 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;
}
}
}
}