Comment Recuperer les parametres de config depuis une notecard
On peut trouver une methode expliquee ici
Cependant, je l'ai jamais testee et je prefere ma methode qui est plus simple. Donc voici la methode que j'ai mis au point pour mon usage personnel. Bien sur, si il y a des ameliorations a faire, n'hesitez pas a me contacter
En gros, je lis les lignes une par une et je convertit le texte en tableau qui separe ce qui se trouve avant et apres le signe egal.
Ensuite, je teste la valeur et je mets a jour la variable.
Dans cet exemple, nous allons recuperer les valeurs de login pour un site ainsi q'une couleur et une variable qui autorise ou pas une chose.
Voici un exemple de notecard :
// entrez votre nom d'utilisateur
username = toto
// entrez votre mot de passe
password = titi
// choisissez une couleur pour le fond ( par exemple : <1,0,0>
color = <1,1,1>
// dites si on a le droit de faire ceci ou cela ( TRUE ou FALSE ou 1 ou 0 )
auth = TRUE
// ssm2017 Binder : ssm_notecard_config_reader
// @copyright Copyright (C) 2009 ssm2017 Binder (S.Massiaux). All rights reserved.
// @license GNU/GPL, http://www.gnu.org/licenses/gpl-2.0.html
// ssm_notecard_config_reader is free software. This version may have been modified pursuant to the
// GNU General Public License, and as distributed it includes or is derivative
// of works licensed under the GNU General Public License
// or other free or open source software licenses.
// =============== //
// phrases pour la traduction //
// =============== //
// commun
string _SCRIPT_WILL_STOP = "Le script va s'arreter";
// config notecard
string _START_READING_CONFIG_NOTECARD = "Debut de la lecture de la notecard de config";
string _CONFIG_NOTECARD_IS_MISSING = "Il manque la notecard de config";
string _CONFIG_NOTECARD_READ = "La notecard de config a ete lue";
string _CHECKING_VALUES = "Verification des valeurs";
string _URL_MISSING = "Il manque l'url";
string _USERNAME_MISSING = "Il manque le nom d'utilisateur";
string _PASSWORD_MISSING = "Il manque le mot de passe";
string _CHECK_FAILED = "La verification a echoue";
string _MINIMUM_VALUES = "Les valeurs minimales sont : url / username / password";
string _CONFIG_SET_TO = "La config a ete reglee sur";
// menu
string _CHOOSE_AN_OPTION = "Choisissez une option";
string _RESET = "Reset";
// *********************************************** //
// RIEN NE DEVRAIT ETRE CHANGE APRES CETTE LIGNE //
// *********************************************** //
// definition des variables qui seront dans la notecard
string url;
string username;
string password;
vector color;
string auth;
// variables pour le menu
integer menu_listener;
integer menu_channel;
key owner;
// lecture de la config
read_config(string data) {
// recuperation des valeurs avant et apres le signe egal
list parsed = llParseString2List( data, [ "=" ], [] );
// passage de la valeur a gauche du signe egal en minuscules, puis retrait des espaces avant et apres le texte
string param = llToLower(llStringTrim(llList2String( parsed, 0 ), STRING_TRIM));
// retrait des espaces avant et apres le texte pour la valeur se trouvant a droite du signe egal
string value = llStringTrim(llList2String( parsed, 1 ), STRING_TRIM);
// maintenant, on teste une par une les variables
if (param != "") {
if (param == "url") {
url = value;
}
else if (param == "username") {
username = value;
}
else if (param == "password") {
password = value;
}
else if (param == "color") {
// ici, on convertit la valeur au format vector
color = (vector)value;
}
else if (param == "auth") {
// ici, on convertit la valeur au format entier
auth = (integer)value;
}
// etc...
}
}
// ***************************************
// LECTURE DE LA NOTECARD DE CONFIG
// ***************************************
// variables qui vont nous servir
key config_notecard; // clef qui servira a reconnaitre la requete au dataserveur
string config_notecard_name = "config"; // on definit ici le nom de la notecard pour question pratique
integer i_line; // la variable qui dira sur quelle ligne on se trouve
default
{
on_rez(integer change)
{
// on resette le script si on rezze l'objet ( optionnel )
llResetScript();
}
state_entry()
{
// on definit quelques variables de base qui nous serviront plus tard
owner = llGetOwner(); // recuperation du owner de l'objet
menu_channel = llFloor(llFrand(100000.0)) + 1000; // generation aleatoire d'un canal pour le menu
i_line = 0; // initialisation du numero de ligne
// on verifie si la notecard de config existe
if ( llGetInventoryType(config_notecard_name) != INVENTORY_NONE )
{
// elle existe alors on lit la premiere ligne
config_notecard = llGetNotecardLine(config_notecard_name, i_line);
// et on en avertit le owner
llOwnerSay(_START_READING_CONFIG_NOTECARD);
}
else
{
// elle n'existe pas alors on avertit le owner
llOwnerSay(_CONFIG_NOTECARD_IS_MISSING);
}
}
touch_start(integer total_number)
{
// si le owner touche l'objet
if ( llDetectedKey(0) == owner )
{
// on genere un listener qui ecoutera le menu
menu_listener = llListen(menu_channel,"", owner,"");
// et on lui envoie le menu ( pas trop fort car ca fait mal )
llDialog(owner, _CHOOSE_AN_OPTION+ " : ", [_RESET], menu_channel);
}
}
listen(integer channel, string name, key id, string message)
{
// on verifie si c'est bien le menu qui parle ( optionnel )
if ( channel == menu_channel )
{
// bon, allez devinez ce qu'il se passe si on appuie sur le bouton reset
if ( message == _RESET )
{
llResetScript();
}
// on enleve le listener du menu pour reduire le lag
llListenRemove(menu_listener);
}
}
dataserver(key queryId, string data)
{
// on verifie si c'est bien la bonne requete
if ( queryId == config_notecard )
{
// si on est pas a la fin du fichier
if(data != EOF)
{
// si la ligne ne commence pas par // ( ca permet de pouvoir mettre des commentaires dans la notecard qui commencent par // )
if ( llGetSubString( data, 0, 1) != "//" )
{
// si la ligne n'est pas vide
if ( data != "" )
{
// on appelle la fonction de tout a l'heure qui verifie les valeurs ( voir plus haut )
read_config(data);
}
}
// on recommence en incrementant le compteur de ligne de 1
config_notecard = llGetNotecardLine(config_notecard_name,++i_line);
}
else // on est donc maintenant a la fin du fichier
{
// on informe le owner que la lecture de la notecard est terminee
llOwnerSay(_CONFIG_NOTECARD_READ+" ...");
// et qu'on commence a verifier les valeurs ( attention ca va faire mal )
llOwnerSay(_CHECKING_VALUES);
// on initialise une variable qui nous permettra de verifier si les valeurs ont bien ete validees
integer check = TRUE;
// c'est parti pour la premiere valeur
if (url == "")
{
// la valeur est vide alors on avertit le owner
llOwnerSay(_URL_MISSING);
// on dit a la variable que ca va pas
check = FALSE;
}
// et on continue pour toutes les autres variables
// par contre dans ce cas on verifie pas la couleur et la valeur de auth car pas utiles
// les valeurs par defaut d'un integer est 0 et la valeur d'un vector est <0,0,0>
// donc si la personne a pas rempli ces valeurs la couleur sera noire et l'autorisation sera sur 0
if (username == "")
{
llOwnerSay(_USERNAME_MISSING);
check = FALSE;
}
if (password == "")
{
llOwnerSay(_PASSWORD_MISSING);
check = FALSE;
}
// si il y a eu une erreur lors de la verification
if (!check)
{
// on avertit le owner
llOwnerSay(_CHECK_FAILED);
llOwnerSay(_MINIMUM_VALUES);
llOwnerSay(_SCRIPT_WILL_STOP);
// et on arrete le script
return;
}
else
{
// sinon, on lui donne la liste des valeurs
llOwnerSay(_CONFIG_SET_TO+" : \n"
+"Url : "+url+" \n"
+"Username : "+username+" \n"
+"Password : "+password);
// on change d'etat
state run;
}
}
}
}
}
// on change d'etat
state run
{
state_entry()
{
llOwnerSay("Voila, c'est fini");
}
}
|