CODE
// Pulled this script from the LSL Wiki and modified it for use with
// XyText as a notecard reader to set the text on the prim.
// April 6, 2007
// SampleSettingsReader.lsl
// Written by Konigmann Lippmann
// Thanks to Apotheus Silverman for his MultiItem Vendor...
// It seems like everything I write is based on it in one way or another.
// Default values
integer DISPLAY_STRING = 204000;
integer iShowHoverText = TRUE;
string sHoverTextValue = "Off";
// 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;
llMessageLinked(LINK_SET, DISPLAY_STRING, "Setup", "");
iNotecardCount = llGetInventoryNumber( INVENTORY_NOTECARD );
iNotecardIndex = 0;
if( iNotecardCount > iNotecardIndex )
{
sSettingsNotecard = llGetInventoryName( INVENTORY_NOTECARD, iNotecardIndex );
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 = "";
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 );
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;
}
}
}
}
// This is where your actual code would go
state run_object
{
state_entry()
{
if( TRUE == iShowHoverText )
llMessageLinked(LINK_SET, DISPLAY_STRING, sHoverTextValue, "");
else
llMessageLinked(LINK_SET, DISPLAY_STRING, "Off", "");
}
changed(integer change)
{
if(change == CHANGED_INVENTORY)
llResetScript();
}
}