llGetNumberOfNotecardLines

From Second Life Wiki
Revision as of 19:27, 9 January 2014 by Strife Onizuka (talk | contribs)
Jump to navigation Jump to search

Summary

Function: key llGetNumberOfNotecardLines( string name );

Requests the number of lines in notecard name via the dataserver event (cast dataserver value to integer)
Returns the handle (a key) for a dataserver event response.

• string name a notecard in the inventory of the prim this script is in or a UUID of a notecard

Caveats

  • This function causes the script to sleep for 0.1 seconds.
  • If name is missing from the prim's inventory and it is not a UUID or it is not a notecard then an error is shouted on DEBUG_CHANNEL.
  • If name is a UUID then there are no new asset permissions consequences for the object.
    • The resulting object develops no new usage restrictions that might have occurred if the asset had been placed in the prims inventory.
  • If name is a new empty notecard (never saved) then an error "Couldn't find notecard ~NAME~" (~NAME~ being the value of name) will be shouted on the DEBUG_CHANNEL. This is because until a notecard is saved for the first time, it does not exist as an asset only as an inventory placeholder.
  • If notecard contains embedded inventory items (such as textures and landmarks), invalid data will be returned.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl> // Ascertain the number of lines in a notecard in the prim's contents

string gNotecard = "Config"; // Name of notecard to be examined key gLineRequestID; // Identity of expected dataserver event integer gLineCounter; // The number of lines in the NC, as determined by this script

default {

   state_entry()
   {
       // Ask how many lines are in the notecard.
       // The answer will arrive via a dataserver event
       gLineRequestID = llGetNumberOfNotecardLines(gNotecard);
   }
   
   dataserver(key requested, string data)
   {
       if (requested == gLineRequestID)
       {
           llOwnerSay( "The notecard '" + gNotecard + "' contains " + data + " lines" );
           // cast the data string to an integer if you need to access the counter later
           gLineCounter = (integer) data;
       }        
   }

} </lsl> <lsl> // Check for a valid existant notecard, and read it into a list // On touch, say the total number of lines, number of lines containing data, and say each line // Omei Qunhua 7-Jan-2013

string gNotecard = "Config"; // Name of notecard to be examined key gLineRequestID; // Identity of expected line count dataserver event key gReadRequestID; // Identity of expected data read dataserver event integer gLineTotal; // The number of lines in the NC, as determined by this script integer gLineIndex; // Index for data read requests list gDataLines; // List containing all data lines from notecard, excluding blank and comment lines string gStatus; // Will contain EOF when notecard reading has finished

default {

   state_entry()
   {
       if (llGetInventoryKey(gNotecard) )         // Test if notecard exists and has been saved (returned key will be NULL_KEY otherwise)
           gLineRequestID = llGetNumberOfNotecardLines(gNotecard);       // Kick off a request for the total number of lines that the notecard contains
       else
           llOwnerSay("Notecard '" + gNotecard + "' does not exist or has no saved data");
   }
   changed(integer change)
   {
       if (change & CHANGED_INVENTORY)
           llResetScript();
   }
   dataserver(key requested, string data)
   {
       if (requested == gLineRequestID)
       {
           gLineTotal = (integer) data;           // Cast the data string to an integer to get the number of lines
           gReadRequestID = llGetNotecardLine(gNotecard, gLineIndex);      // Request a read of the first notecard line
           return;
       }
       if (requested != gReadRequestID)
           return;
       if ( (gStatus = data) == EOF)              // Save and test the current data (so that other code can tell when we've finished too)
           return;
       // A notecard line has been read. Kick off the process of fetching the next line, while we process this line
       gReadRequestID = llGetNotecardLine(gNotecard, ++gLineIndex);
       data = llStringTrim(data, STRING_TRIM);    // chop off any leading or trailing blanks
if (data == ""

See Also

Events

•  dataserver

Functions

•  llGetNotecardLine

Deep Notes

Search JIRA for related Issues

Signature

function key llGetNumberOfNotecardLines( string name );