Basic Notecard Reader

From Second Life Wiki
Revision as of 17:34, 23 March 2016 by Eggbertx Resident (talk | contribs) (You guys need to fix your LSL source tags :/)
Jump to navigation Jump to search

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;
            }
        }
 
    }
}

See also