LlGetNotecardLine/fr
LSL Portail Francophone | LSL Portail Anglophone | Fonctions | Évènements | Types | Operateurs | Constantes | Contrôle d'exécution | Bibliothèque | Tutoriels |
Description
Fonction: Key llGetNotecardLine( string nom, integer ligne );217 | N° de fonction |
0.1 | Delais |
10.0 | Energie |
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. |