Notecard "SETTING"

Répondre
Partager Rechercher
Bonjour,


J'ai un petit script qui tourne bien mais je voudrais le rendre plus friendly user.

D'ou mon idée de note (situé dans le contenu de l'objet) qui contiendrait quelque-chose comme ça :

Code:
Votre UUID : xxxxxxxxxxxxxxxxxxx
valeur : 0.25
Comment lire ces info ds la note



D'avance Merci
llGetNotecardLine ->trop facile !!!
Merci Brice



une précision : data, peut contenir n'importe qu'elle type de donner string, integer, etc ??



[mode reflechi francky]
tu n'as qu'a faire un test en te reconnectant tout à l'heure
[/mode]
Voilà le script que j'utilise :
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);
    }   
}
Il est fourni avec comme exemple les données email_adress et channel, et un state configuration qui exploite les donnés; c'est bien sur à changer suivant vos besoins.

la notecard doit être de la forme :

nom_de_la donnée = donnée

les données peuvent être dans n'importe quel ordre, incompléte ou surnuméraires; il peut y avoir des commentaires (sur des lignes séparées commençant par #).

les nom_de_la_donnée doivent bien sur correpondre aux tokens programmés (en minuscules uniquement) dans les if et en tête du script dans les défault. Comme la souligner Lancelot, ne pas oublier de convertir le type suivant les besoins.

je le trouve assez complet, pratique et léger.
Rougit
Citation :
Publié par Magic Cat
en fait elle ne contient que du string
Quand tu récupères les données il ne faut pas oublié de les transformer
Bonsoir,

Désolée de deterrer ce poste mais je cherche depuis un certain temps comment convertir ce foutu string en integer

J'ai plusieurs objets sur la meme sim : des vendeurs et un "tirroir caisse". Les vendeurs informent le tirroir caisse du montant de chaque vente. Pour l'informer, ils envoi le montant de la vente, via llRegionSay sur un channel négatif dédié.
Avec llRegionSay, le vendeur envoi un "string"
Aucun souci pour entendre le llRegionSay et renvoyer le "string" à l'owner par exemple. Mon probleme c'est plutot : comment faire pour que ce "string" soit converti en integer par l'objet qui écoute le llRegionSay pour pouvoir utiliser le chiffre pour faire des calculs notament (le chiffre d'affaire total par exemple) ?

J'espère que je suis claire, et que vous pourrez m'aider.

Merci d'avance,
Bonjour, il suffit de refaire un typecasting inverse .....
Mais si les vendors et la caisse ne sont pas trop eloignés, je ferai plutot un messagelinked en liant les objets, ce qui permettrait de passer les prix direct en integer par le paramètre "num" et permet de passer un string en plus pour une eventuelle autre utilisation et sans listen...
Jeu-concours
Encore une p'tite question ...
Merci MentalOh mais le tirroir caisse est sous mon lit ... dans ma skybox, beaucoup trop loin des vendeurs pour etre "linké" ;-)

Merci Sandrine, c'est ce que je cherchais ! Mais je ne comprends pas comment utiliser cela avec le Listen : "ma_variable" est le string message ?

listen_handle = llListen((integer)comm_channel, "", "", "");
}
listen(integer canal, string name, key id, string message )
{
sales++;
llOwnerSay((string) message);
llOwnerSay("Vente n° : "+(string)sales);

Merci d'avance,
Ton script n a pas défini la variable "comm_channel".
C est quoi comm_channel ? un string ? un integer ? Quelle valeur a t elle ?

Peut être cet exemple t expliquera mieux

Code PHP:

integer listen_handle;
integer comm_channel = -5451277;
integer toggle;

integer sales 0;
integer sommeMontants 0;

default
{
    
state_entry()
    {
        
listen_handle llListen((integer)comm_channel"""""");
        
llListenControl(listen_handleFALSE);
        
llSetText("n ecoute pas , touchez moi pour ecouter", <0.0,0.0,0.0>,1.0);
    }
    
listen(integer canalstring namekey idstring message )
    {
        
sales++;
        
integer montantVente = (integer)message;
        
sommeMontants =  sommeMontants montantVente ;
        
llOwnerSay("Vente n° : "+(string)sales);
        
llOwnerSay("Total vendu : "+(string)sommeMontants);
    }
    
touch_end(integer total_number)
    {
        
toggle=!toggle;
         
llListenControl(listen_handletoggle);
        if(
toggle){
            
llSetText("ecoute, touchez moi pour ne plus ecouter", <1.0,0.0,0.0>,1.0);
        }
        else{
             
llSetText("n ecoute pas , touchez moi pour ecouter", <0.0,0.0,0.0>,1.0);
        }
 
    }



Dernière modification par redpurple ; 03/06/2012 à 23h25.
Merci pour cet exemple : je suis sure qu'avec cela je vais pouvoir m'en sortir.

Le comm_channel est défini plus haut (je n'ai mis ici qu'un extrait de mon script) : ca, ca fonctionne. mon probleme est plutot dans l'integration du string message comme un chiffre et nom comme un text.
Répondre

Connectés sur ce fil

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