<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.osgrid.org/index.php?action=history&amp;feed=atom&amp;title=LlGetNumberOfNotecardLines</id>
	<title>LlGetNumberOfNotecardLines - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.osgrid.org/index.php?action=history&amp;feed=atom&amp;title=LlGetNumberOfNotecardLines"/>
	<link rel="alternate" type="text/html" href="http://wiki.osgrid.org/index.php?title=LlGetNumberOfNotecardLines&amp;action=history"/>
	<updated>2026-10-25T11:08:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://wiki.osgrid.org/index.php?title=LlGetNumberOfNotecardLines&amp;diff=154&amp;oldid=prev</id>
		<title>Osgridadmin: Created page with &quot;==Function: key llGetNumberOfNotecardLines( string name );== Requests number of lines in notecard name via the dataserver event (cast dataserver value to integer)&lt;br&gt;&lt;br&gt; Retu...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.osgrid.org/index.php?title=LlGetNumberOfNotecardLines&amp;diff=154&amp;oldid=prev"/>
		<updated>2017-12-31T22:40:50Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Function: key llGetNumberOfNotecardLines( string name );== Requests number of lines in notecard name via the dataserver event (cast dataserver value to integer)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; Retu...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Function: key llGetNumberOfNotecardLines( string name );==&lt;br /&gt;
Requests number of lines in notecard name via the dataserver event (cast dataserver value to integer)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Returns a key that is the handle for a dataserver event response. &amp;lt;br&amp;gt;&lt;br /&gt;
• string 	name 	– 	a notecard in the prim&amp;#039;s inventory &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;	&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Caveats&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
• This function causes the script to sleep for 0.1 seconds.  &amp;lt;br&amp;gt;&lt;br /&gt;
• If name is missing from the prim&amp;#039;s inventory or it is not a notecard then an error is shouted on [[DEBUG_CHANNEL]]. &amp;lt;br&amp;gt;&lt;br /&gt;
• If notecard contains embedded inventory items (such as textures and landmarks), invalid data will be returned.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Examples&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt; &lt;br /&gt;
string NOTECARD_NAME = &amp;quot;config&amp;quot;; // name of the card we are going to read&lt;br /&gt;
integer notecard_line = 0;&lt;br /&gt;
integer num_notecard_lines = 0;&lt;br /&gt;
key notecard_request = NULL_KEY;&lt;br /&gt;
list card_data; // the data in the card&lt;br /&gt;
 &lt;br /&gt;
integer&lt;br /&gt;
check_card(string name) // check that that the named inventory item is a notecard&lt;br /&gt;
{&lt;br /&gt;
    integer i = llGetInventoryType(name);&lt;br /&gt;
    return i == INVENTORY_NOTECARD;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        state init;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state ready&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer detected)&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;the notecard contained the following data:&amp;quot;);&lt;br /&gt;
        llOwnerSay(llDumpList2String(card_data, &amp;quot;\n&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; (CHANGED_INVENTORY)) // if someone edits the card, reset the script&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state init&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        if (!check_card(NOTECARD_NAME)) // check the card exists&lt;br /&gt;
        {&lt;br /&gt;
            state error;&lt;br /&gt;
        }&lt;br /&gt;
        llSetText(&amp;quot;initialising...&amp;quot;, &amp;lt;1, 1, 1&amp;gt;, 0);&lt;br /&gt;
        notecard_request = NULL_KEY;&lt;br /&gt;
        notecard_line = 0;&lt;br /&gt;
        num_notecard_lines = 0;&lt;br /&gt;
        notecard_request = llGetNumberOfNotecardLines(NOTECARD_NAME); // ask for the number of lines in the card&lt;br /&gt;
        llSetTimerEvent(5.0); // if we don&amp;#039;t hear back in 5 secs, then the card might have been empty&lt;br /&gt;
    }&lt;br /&gt;
    timer() // if we time out, it meant something went wrong - the notecard was probably empty&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        state error;&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key query_id, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if (query_id == notecard_request) // make sure it&amp;#039;s an answer to a question we asked - this should be an unnecessary check&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0); // at least one line, so don&amp;#039;t worry any more&lt;br /&gt;
            if (data == EOF) // end of the notecard, change to ready state&lt;br /&gt;
            {&lt;br /&gt;
                state ready;&lt;br /&gt;
            }&lt;br /&gt;
            else if (num_notecard_lines == 0) // first request is for the number of lines&lt;br /&gt;
            {&lt;br /&gt;
                num_notecard_lines = (integer)data;&lt;br /&gt;
                notecard_request = llGetNotecardLine(NOTECARD_NAME, notecard_line); // now get the first line&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                if (data != &amp;quot;&amp;quot; &amp;amp;&amp;amp; llGetSubString(data, 0, 0) != &amp;quot;#&amp;quot;) // ignore empty lines, or lines beginning with &amp;quot;#&amp;quot;&lt;br /&gt;
                {&lt;br /&gt;
                    card_data = (card_data = []) + card_data + data;&lt;br /&gt;
                }&lt;br /&gt;
                ++notecard_line;&lt;br /&gt;
                notecard_request = llGetNotecardLine(NOTECARD_NAME, notecard_line); // ask for the next line&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // update the hover-text with the progress&lt;br /&gt;
        llSetText(&amp;quot;read &amp;quot; + (string)(notecard_line) + &amp;quot; of &amp;quot; + (string)num_notecard_lines + &amp;quot; lines&amp;quot;, &amp;lt;1, 1, 1&amp;gt;, 1);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    state_exit()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;, &amp;lt;0, 0, 0&amp;gt;, 0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state error&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay(&amp;quot;something went wrong; try checking that the notecard [ &amp;quot; + NOTECARD_NAME + &amp;quot; ] exists and contains data&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
See Also &amp;lt;br&amp;gt;&lt;br /&gt;
Events &amp;lt;br&amp;gt;&lt;br /&gt;
•  	[[dataserver]]  &amp;lt;br&amp;gt;			&lt;br /&gt;
Functions  &amp;lt;br&amp;gt;&lt;br /&gt;
•  	[[llGetNotecardLine]]  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Osgridadmin</name></author>
	</entry>
</feed>