LlGetNotecardLine/fr

From Second Life Wiki
< LlGetNotecardLine
Revision as of 20:52, 18 February 2008 by Void Singer (talk | contribs) (formatted example)
(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

<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.