LlGetNotecardLine/fr

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


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

<lsl> 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)
           }
       }
   }

} </lsl>

Codes utiles

<lsl> ///// // 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);   
           }
       }
   }

} </lsl>

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.