Lecture d'une notecard de config |
![]() |
Technique - Scripts | |||
Écrit par ssm2017 | |||
Vendredi, 27 Février 2009 17:20 | |||
Comment Recuperer les parametres de config depuis une notecardOn 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. 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"); } }
|