01-20-2005 09:28
I've made a few things with settings notecard... This seemed like a difficult thing at first, so I wanted to release this code for all to use.

CODE

// SampleSettingsReader.lsl
// Written by Konigmann Lippmann
// Thanks to Apotheus Silverman for his MultiItem Vendor Sample code.
// It seems like everything I write is based in one way or another on that.


// Default values
integer iShowHoverText = TRUE;
string sHoverTextValue = "Intializing...";
vector vColor = <1.0,0.0,0.0>;


// Globals
integer iNotecardIndex;
integer iNotecardCount;
integer iNoteCardLine;
key kCurrentDataRequest;
string sSettingsNotecard;


integer StringLeftICompare( string sLeftMatch, string sLongString )
{
integer iLength;

iLength = llStringLength( sLeftMatch ) - 1;
if( llToLower(llGetSubString( sLongString, 0, iLength ) ) == llToLower(sLeftMatch) )
return( TRUE );
return( FALSE );
}


string GetValue( string sString )
{
integer iStart;
string sValue = "";
string sbValue = "";

iStart = llSubStringIndex( sString, "=" ) + 1;
if( iStart )
{
sValue = llGetSubString( sString, iStart, llStringLength(sString) - 1 );
if( sValue )
{
sbValue = llToLower( sValue );
if( sbValue == "true" )
sValue = "1";
if( sbValue == "false" )
sValue = "0";
return( sValue );
}
}
return( NULL_KEY );
}


default
{
on_rez( integer param )
{
llResetScript();
}

state_entry()
{
integer iii;

llInstantMessage( llGetOwner(), "Loading Settings...");

llSetText( "initing...", <0,0.5,0>, 1.0 );

iNotecardCount = llGetInventoryNumber( INVENTORY_NOTECARD );
iNotecardIndex = 0;
if( iNotecardCount > iNotecardIndex )
{
sSettingsNotecard = llGetInventoryName( INVENTORY_NOTECARD, iNotecardIndex ); // This will read settings from the first notecard found.

iNoteCardLine = 0;
kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, iNoteCardLine );
iNotecardIndex++;
}
if( iNotecardIndex == 0 )
{
llWhisper( 0, "Using Default Values." );
state run_object;
}
}

dataserver( key kQuery, string sData )
{
list lSetting;

kCurrentDataRequest = ""; // Clear the request variable.
if( sData != EOF )
{


// you can string several of these tests for whatever values you may want.

if( StringLeftICompare( "ShowHoverText=", sData ) )
iShowHoverText = (integer)GetValue( sData );

else if( StringLeftICompare( "HoverTextValue=", sData ) )
sHoverTextValue = (string)GetValue( sData );

else if( StringLeftICompare( "Color=", sData ) )
vColor = (vector)GetValue( sData );



kCurrentDataRequest = llGetNotecardLine( sSettingsNotecard, ++iNoteCardLine );
}
else
{
iNotecardIndex++;
if( iNotecardIndex < llGetInventoryNumber( INVENTORY_NOTECARD ) )
{
sSettingsNotecard = llGetInventoryName( INVENTORY_NOTECARD, iNotecardIndex );

iNoteCardLine = 0;
llGetNotecardLine( sSettingsNotecard, iNoteCardLine );
}
else
{
state run_object;
}
}
}
}


state run_object
{
state_entry()
{
if( TRUE == iShowHoverText )
llSetText( sHoverTextValue, vColor, 1.0 );
else
llSetText( "", <0,0,0>, 0.0 );
}
}


Here is a sample settings notecard:

CODE

ShowHoverText=True
HoverTextValue=It has worked!
Color=<1.0,1.0,1.0>