Difference between revisions of "Basic Notecard Reader"

From Second Life Wiki
Jump to navigation Jump to search
Line 97: Line 97:
         }
         }


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

Revision as of 08:35, 14 March 2011

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>

See also