LlGetNotecardLine/fr

From Second Life Wiki
< LlGetNotecardLine
Revision as of 09:19, 16 February 2008 by Gally Young (talk | contribs) (Localized to french)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Description

Fonction: Key llGetNotecardLine( string nom, integer ligne );

Demande une ligne de la note identifiée par son nom au serveur de données.

Renvoie un Key et génére un évènement de type dataserver .

• string nom un note de l'inventaire ou un UUID
• integer ligne N° de ligne dans une note (l’index commence à zéro).

ligne n'accepte pas les index négatifs.
Si ligne dépasse la fin de la note, alors dataserver renvoie EOF.

Avertissements

  • Cette fonction fait dormir le script pendant 0.1 secondes.
  • Si nom n'est pas dans l'inventaire de la prim et n'est pas un UUID ou n'est pas un note alors une erreur se produit sur le canal DEBUG_CHANNEL.
  • Si nom est une UUID il n'y a alors aucune conséquence sur les droits de l'objet.
    • L'objet final ne subit pas de nouvelle restriction d'utilisation qui aurait pu être appliquée si l'objet pointé par l'UUID avait été présent dans l'inventaire de la prim.
  • Si une note contient un objet d’inventaire (telle une texture ou un landmark), le serveur de données renverra la valeur EOF indépendament de la ligne demandée.
  • Si la ligne demandée fait plus de 255 bytes, le serveur de données ne renverra que les 255 premiers bytes de la ligne.
  • Si la note est vide, le serveur de données générera une erreur sur le DEBUG_CHANNEL selon laquelle la note n’existe pas car tant que note n’est pas sauvegardée, elle ne consiste qu’en un emplacement d’inventaire (llGetInventoryKey renverra NULL_KEY).

Exemples

key kQuery;
integer iLine = 0;
default {
    
    state_entry() {
        llSay(0, "Lecture de la note...");
        kQuery = llGetNotecardLine("Ma Note", iLine);   // Lit la note "Ma Note" (si  possible)
    }

    dataserver(key query_id, string data) {

        if (query_id == kQuery) {    // vérifie qu’il s’agit bien de la requête de lecture de la note.
            // Il s’agit bien d’une ligne de la note
            if (data == EOF) {    

                llSay(0, "Plus de lignes dans la note :  " + (string)iLine + " ligne(s) lue(s).");

            } else {

                // incrément du nombre de lignes
                llSay(0, "Ligne " + (string)iLine + ": " + data);   // data contient la ligne lue dans la note
                
                //Lance la lecture de la ligne suivante
                iLine++;
                kQuery = llGetNotecardLine("Ma Note", iLine);   // Lit une nouvelle ligne (si possible)

            }
        }
    }
}

Codes utiles

/////
//  Mulit-Lecteur de notes par Brangus Weir
//  Offert gracieusement et publié sur wiki.secondlife.com
//
//  Ce script lit 3 notes et enregistre les résultats dans 2 lists
//  Il peut être modifié à volonté. 
//

list gOneCard;    // List des lignes de la 1er note
list gTwoCard;    // List des lignes de la 2eme note
list gThreeCard;  // List des lignes de la 3eme note

string gsCardOneName = "Un";  //doit correspondre aux noms des 3 notes.
string gsCardTwoName = "Deux";
string gsCardThreeName = "Trois";

//Variables temporaires nécessaires pour les calculs
string g_sNoteCardName; // Nom de la note à lire.
list g_lTempLines;      // Le résultat renvoyé aprés intégration d’une donnée
integer g_iLine;        // Décompte du nombre de lignes d’une note
key g_kQuery;           // Clé de la note lue


initialize(string _action) {
    // Afin de correctement ordonner les événements de type dataserver, cette fontion lance la 
    // lecture de la 1ere note , la lecture s’achève avec le rappel de cette fonction avec _action == "fini".
    if (_action == "") {
        loadNoteCard(gsCardOneName);
    } else if (_action == "finish") {
        // Toutes les notes ont été lues et converties en lists,
        // des opérations sont à présent possibles pour en extraire des données 
        // Mais dans cet exemple, nous allons juste vérifier que les notes ont bien été lues.

        integer end = llGetListLength(gOneCard);  //Evaluez toujours cette valeur une fois.
                                                  //Ne réalisez pas ce calcul DANS l’appel de la  boucle 
                                                  //Diminue le lag, PENSEZ A OPTIMISER VOS PROGRAMMES !
        integer i = 0;
        for (; i< end; ++i)
            llSay(0, llList2String(gOneCard,i));
        end = llGetListLength(gTwoCard);
        for (i = 0; i< end; ++i)
            llSay(0, llList2String(gTwoCard,i));
        end = llGetListLength(gThreeCard);
        for (i = 0; i< end; ++i)
            llSay(0, llList2String(gThreeCard,i));
    }                
                              
}

loadNoteCard( string _notecard ) {
    g_lTempLines = []; //vide la zone temporaire
    g_sNoteCardName = _notecard;
    g_iLine = 0;
    g_kQuery = llGetNotecardLine(g_sNoteCardName, g_iLine);  
    
}

notecardFinished(string _notecard){
    // appelé en fin de lecture de chaque note. Le résultat est enregistré
    // et la lecture de la note suivante est lancée.
    if (_notecard == gsCardOneName) {
        gOneCard = g_lTempLines;
        loadNoteCard(gsCardTwoName);
    } else if (_notecard == gsCardTwoName) {
        gTwoCard = g_lTempLines;
        loadNoteCard(gsCardThreeName);
    } else if (_notecard == gsCardThreeName) {
        gThreeCard = g_lTempLines;
        initialize("fini");  // toutes les notes ont été lues, on retourne dans la fonction d’initialisation du début (avec l’argument 'fini')   
    }    
}

default
{
    state_entry()
    {
    }
    
    touch_start(integer _num_det){
        initialize("");     
     
    }
     
    dataserver(key _query_id, string _data) 
    {
        if (_query_id == g_kQuery) {
            // Il s’agit d’une ligne de notre note
            if (_data != EOF) {    
                // incrémente le décompte de lignes
                g_lTempLines += [_data];
                // demande la ligne suivante
                g_iLine++;
                g_kQuery = llGetNotecardLine(g_sNoteCardName, g_iLine);
            } else {
             // La note a été lue 
             // alerte de la fin de lecture :
             notecardFinished(g_sNoteCardName);   
            }
        }
    }
}

Voir également

Évènement

•  dataserver Evènement déclenché lors d’un appel au serveur de données.

Fonctions

•  llGetNumberOfNotecardLines Renvoie le nombre de lignes d’une note.
Vous cherchez encore des informations ? Peut-être cette page du LSLwiki pourra vous renseigner.