Basic Notecard Readers

Written by Kitsune

Two simple methods of reading from a notecard in the prim contents with one of these scripts.

 

 

Cyclically Sequential Lines ( V1 )

 

// V1 //
 
key iq;
 
integer line;
 
GetLine(integer i)
{
    iq = llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD, 0), i);
}
 
default
{
    dataserver(key q, string data)
    {
        if(q == iq)
        {
            ++line;
            if(data != EOF)
            {
                if(data != "")
                llSay(0, data);
                else
                GetLine(line);
            }
            else
            GetLine((line = 0));
        }
    }
    touch_start(integer nd)
    {
        if(llGetInventoryNumber(INVENTORY_NOTECARD))
        GetLine(line);
    }
}

 

 

Random Lines ( V1 )

 

// V1 //
 
key iq;
 
key qi;
 
integer line;
 
integer lines;
 
GetLine(integer i)
{
    iq = llGetNotecardLine(llGetInventoryName(INVENTORY_NOTECARD, 0), i);
}
 
default
{
    changed(integer change)
    {
        if(change & CHANGED_INVENTORY)
        llResetScript();
    }
    state_entry()
    {
        if(llGetInventoryNumber(INVENTORY_NOTECARD))
        qi = llGetNumberOfNotecardLines(llGetInventoryName(INVENTORY_NOTECARD, 0));
    }
    dataserver(key q, string data)
    {
        if(q == qi)
        lines = (((integer)data) - 1);
        else if(q == iq)
        {
            if(data != "")
            llSay(0, data);
            else
            GetLine((++line));
        }
    }
    touch_start(integer nd)
    {
        if(llGetInventoryNumber(INVENTORY_NOTECARD))
        GetLine((line = llRound(llFrand(((float)lines)))));
    }
}