Basic Notecard Reader

From Second Life Wiki
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

string      NOTECARD = "notecard";
integer     intLine1;
key         keyConfigQueryhandle;
key         keyConfigUUID;

default
{
    state_entry()
    {
        if (llGetInventoryType(NOTECARD) == INVENTORY_NONE)
        {
            llSay(DEBUG_CHANNEL, "The notecard '"+NOTECARD+"'  is missing!");
            state main;
        }
        keyConfigQueryhandle = llGetNotecardLine(NOTECARD, intLine1);
        keyConfigUUID = llGetInventoryKey(NOTECARD);
    }

    dataserver(key keyQueryId, string strData)
    {
        if (keyQueryId == keyConfigQueryhandle)
        {
            if (strData == EOF)
                state main;

            keyConfigQueryhandle = llGetNotecardLine(NOTECARD, ++intLine1);

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

state main
{
    state_entry()
    {
        // rest of script execution here
    }
    changed(integer intChange)
    {
        if (intChange & CHANGED_INVENTORY)
        {   // If the notecard has changed, then reload the notecard
            if (keyConfigUUID != llGetInventoryKey(NOTECARD))
                llResetScript();
        }
    }
}

See also