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