Config un script avec notecard

Répondre
Partager Rechercher
Est ce que vous connaissez la formule magique qui permet de configurer un script via une notecard ?

Je m'explique. J'ai un script qui envoi des mails..malheureusement pour rentrer l'adresse de l'expéditeur je dois ouvrir le script et renseigner la ligne correspondante (string MailAdress = "";. J'aimerai que ce soit un peu plus pratique (plus rapide surtout) et donc écrire le mail dans une notecard...

Je pense pas que ce soit complexe...peut être que si..enfin bref merci pour vos astuces
key reqKey;
integer curLine;
string noteName = "Configuration"; //Nom de ta notecard

//Partie a ajouter pour declancher la Lecture de la notecard ( par exemple dans le state_entry())

state_entry()
{
curLine = 0;
reqKey = llGetNotecardLine(noteName, curLine);
}

//un dataserver pour la lecture
dataserver(key queryId, string data)
{
if (queryId == reqKey)
{
if (data != EOF)
{
list parts = llParseString2List(data, ["="], []);
string feat = llList2String(parts,0);
if (feat == "MailAdress")
{
MailAdress = llList2String(parts,1);

}
curLine++;
reqKey = llGetNotecardLine(noteName, curLine);
}
llOwnerSay("Adresse enregistree : " + MailAdress);
}

//Pour aller plus vite je te conseil de placer un event changed pour eviter de devoir reset ton script a chaque fois que tu change ta notecard.

changed(integer change)
{
if (change & CHANGED_INVENTORY)
llResetScript();
}

Voila et ta notecard tu la redige tout simplement

MailAdress=....@....fr
Merciiiii je vais de suite tester la bête !
Moi depuis que je scripte c'est à dire depuis presque 1 an j'utilise des variantes de ce script que je tripatouille à toutes les sauces: il est vraiment très bien écrit: la notecard supporte des commentaires commençant par #, et vous mettez les données sous la forme token=donnée ; évidement il faut déclarer les token en variable globales en tête de script, avec éventuellement des données par défaut, et les mettre dans la série des if... else if de lecture là où c'est indiqué par le commentaire //insert your token parsers here . Le script est fourni avec comme exemple les données email_adress et channel.
Code:
string notecard_name = "configuration";  // name of notecard goes here

// internals
integer DEBUG = FALSE;
integer line;
key queryhandle;                   // to separate Dataserver requests
key notecarduuid;

init()
{
    queryhandle = llGetNotecardLine(notecard_name, line = 0);// request line
    notecarduuid = llGetInventoryKey(notecard_name);
}

// Config data loaded from notecard, with some sane defaults
integer channel = 1000;
string email_address = "revolution.perenti@skidzpartz.com";
default
{
    changed(integer change)         
    {
        // We want to reload channel notecard if it changed
        if (change & CHANGED_INVENTORY)
            if(notecarduuid != llGetInventoryKey(notecard_name))
                init();
    }

    state_entry()
    {
        init();
    }
    
    dataserver(key query_id, string data)
    {
        if (query_id == queryhandle)
        {
            if (data != EOF)
            {   // not at the end of the notecard
                // yay!  Parsing time
                
                // pesky whitespace
                data = llStringTrim(data, STRING_TRIM_HEAD);

                // is it a comment?
                if (llGetSubString (data, 0, 0) != "#")
                {
                    integer s = llSubStringIndex(data, "=");
                    if(~s)//does it have an "=" in it?
                    {
                        string token = llToLower(llStringTrim(llDeleteSubString(data, s, -1), STRING_TRIM));
                        data = llStringTrim(llDeleteSubString(data, 0, s), STRING_TRIM);

                        //Insert your token parsers here.
                        if (token == "email_address")
                            email_address = data;
                        else if (token == "channel")
                            channel = (integer)data;
                    }
                }

                queryhandle = llGetNotecardLine(notecard_name, ++line);
                if(DEBUG) llOwnerSay("Notecard Data: " + data);
            }
            else
            {
                if(DEBUG) llOwnerSay("Done Reading Notecard");
                state configuration ;
            }
        }
    }
}

state configuration
{
 
    state_entry()
    {
        llListen(channel, "", "", "");
        llShout(0, "Channel set to " + (string)channel);
        llShout(0, "Email set to " + (string)email_address);
    }   
}
si tu enléve le channel, je pense que cela répond exactement à ta demande : tu remplace le state configuration par le state default (qu'il faut donc renommer) de ton script actuel et roule jeunesse.
Oui, c'est mieux expliquer dans le wiki ,Sinon Elenia tu a oublier de mettre une démo pour la note carte.

Code:
# This is the configuration file
channel = 1000
email_address = phoenixcms@hotmail.co.uk
 
# end
Sinon les valeurs par défaut avec les valeurs de la notecard. Plus précisément après que chaque ligne est été validée elle sont tokenizés
C'est un petit peu usine à gaz tout ça, mais c'est le seul moyen quand tu as beaucoup de parametres.

Perso, quand j'ai besoin que le script n'utiliser qu'un seul petit parametre, simple à éditer et non-confidentiel, j'utilise la description de la prim que tu peux lire avec llGetObjectDesc.
Il suffit de séparer les paramètres par un caractère (ou une chaîne de caractères) séparateur , $ ou autre

La description ressemblerait à ceci :
< ..., position..>$< rotation...>

A la lecture, tu utilises llParseString2List pour obtenir une liste des tes paramètres.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés