From Second Life Wiki
/fr
/LSL
GetNumberOfNotecardLines
llGetNumberOfNotecardLines
Description
Fonction: Key llGetNumberOfNotecardLines( string nom );
Demande le nombre de lignes dans la note identifiée par son nom via un évenement de type dataserver
Renvoie un Key qui sert de clé pour identifier la réponse du serveur de données via l’évènement
dataserver.
| • string
| nom
| –
| un note de l'inventaire
|
|
Inconvénients
- Cette fonction fait dormir le script pendant 0.1 secondes.
- Si nom n'est pas dans l'inventaire de la prim ou n'est pas un note alors une erreur se produit sur le canal DEBUG_CHANNEL.
- Si la note contient des objets (telles de textures ou des landmarks), une donnée invalide sera renvoyée.
Exemples
string NOTECARD_NAME = "config"; // nom de la note à lire
integer notecard_line = 0;
integer num_notecard_lines = 0;
key notecard_request = NULL_KEY;
list card_data; // les données dans la note
integer
check_card(string name) // Vérifie que le nom correspond bien à une note
{
integer i = llGetInventoryType(name);
return i == INVENTORY_NOTECARD;
}
default
{
state_entry()
{
state init;
}
}
state ready
{
touch_start(integer detected)
{
llOwnerSay("La note contient les données suivantes : ");
llOwnerSay(llDumpList2String(card_data, "\n"));
}
changed(integer change)
{
if (change & (CHANGED_INVENTORY)) // Si quelqu’un édite la note, le script est réinitialisé
{
llResetScript();
}
}
}
state init
{
state_entry()
{
if (!check_card(NOTECARD_NAME)) // Vérifie que la note existe
{
state error;
}
llSetText("initialising...", <1, 1, 1>, 0);
notecard_request = NULL_KEY;
notecard_line = 0;
num_notecard_lines = 0;
notecard_request = llGetNumberOfNotecardLines(NOTECARD_NAME); // Demande le nombre de lignes de la note
llSetTimerEvent(5.0); // Sans retour dans les 5sec, alors la carte peut être vide
}
timer() // si l’on sort du délai, cela peut signifier que quelque chose s’est mal passé et que la note était probablement vide
{
llSetTimerEvent(0.0);
state error;
}
dataserver(key query_id, string data)
{
if (query_id == notecard_request) // Vérifie qu’il s’agit bien d’une réponse à notre demande (contrôle non obligatoire)
{
llSetTimerEvent(0.0); // au moins une ligne, donc on ne s’inquiète plus.
if (data == EOF) // fin de la note, on repasse dans l’état ‘ready’
{
state ready;
}
else if (num_notecard_lines == 0) // première requête du nombre de lignes
{
num_notecard_lines = (integer)data;
notecard_request = llGetNotecardLine(NOTECARD_NAME, notecard_line); // renvoie à présent la première ligne
}
else
{
if (data != "" && llGetSubString(data, 0, 0) != "#") // ignore les lignes vides ou celles débutant par un "#"
{
card_data = (card_data = []) + card_data + data;
}
++notecard_line;
notecard_request = llGetNotecardLine(NOTECARD_NAME, notecard_line); // Demande la ligne suivante
}
}
// Mise à jour du texte flottant pendant l’opération
llSetText((string)(notecard_line) + " lignes lues sur " + (string)num_notecard_lines , <1, 1, 1>, 1);
}
state_exit()
{
llSetText("", <0, 0, 0>, 0);
}
}
state error
{
state_entry()
{
llOwnerSay("Erreur, vérifiez que la note [ " + NOTECARD_NAME + " ] existe et n’est pas vide");
}
changed(integer change)
{
if (change & CHANGED_INVENTORY)
{
llResetScript();
}
}
}
Voir également
Évènement
| •
| dataserver
| –
| Evènement déclenché par un appel au serveur de données
|
|
Fonctions
Vous cherchez encore des informations ? Peut-être
cette page du LSLwiki pourra vous renseigner.