[Aide] Un script et une notecard

Répondre
Partager Rechercher
Bonsoir,
Aujourd'hui je me suis intéressée au script qui permette de charger une notecard de configuration, après mettre arraché les cheveux, je me suis tournée vers les forums et mon ami Google !
Et je suis tombé sur ça https://forums.jeuxonline.info/showthread.php?t=1019637 (ce serai bien de le "wikiser" ) et je me suis rendu compte que pour un débutant comme moi c'est pas si évident !
Mais c'est très intéressant de savoir l'utiliser car les possibilités sont énormes pour les utilisateurs (je pense aux huds d'animations que l'on peut personnaliser)!

C'est là que je veux en venir justement, j'ai torturé cet exemple :

Code PHP:

clé kQuery;
integer iLine 0;
défaut {
 
    
state_entry() {
        
llSay(0"Notecard lecture ...");
        
kQuery llGetNotecardLine(«Mon Notecard", ILine);   / / Lire dans «Mon Notecard" quand vous pouvez
    
}
 
    
dataserver(clé query_idstring données) {
 
        
si (== query_id kQuery) {    / / Nous étions appelés à travailler sur "Mon Notecard"?
            / / 
Ceci est une ligne de notre notecard
            si 
(data == EOF) {    
 
                
llSay(0"Pas de lignes de plus dans notecard, lisez" + (string)iLine «Lignes».);
 
            } 
autre {
 
                
llSay(0«Line» + (string)iLine ": " Données);   / / De données a la ligne actuelle à partir de ce notecard
 
                
/ / requête ligne suivante
                iLine 
+ +;   / / Nombre de lignes incrément
                kQuery 
llGetNotecardLine(«Mon Notecard", ILine);   / / Lire une autre ligne quand vous pouvez
 
            }
        }
    }

mais j'y suis arrivé à rien (j'ai donc remis l'original ici, le mien ne ressemblait plus à rien) !
Si quelqu'un pouvait me mettre sur une piste pour charger des animations dans un hud, je serai ravi, l'apprentissage passe par là aussi !
Ceci dit je vais continuer à étudier ces cas là qui sont intéressant !
Merci et bonne soirée !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Pas étonnant que ca marche pas, ca manque de rigueur et dans la traduction.

exemple de manque de rigueur iLine c'est pas ILine
exemples de traduction raté : clé au lieu de key, défaut au lieu de default, ...


bon, corrigeons :

Code PHP:

key kQuery;
integer iLine 0;
default {
    
state_entry() {
        
llSay(0"Notecard lecture ...");
        
kQuery llGetNotecardLine("Mon Notecard"iLine);   // Lire dans «Mon Notecard" quand vous pouvez
    
}
 
    
dataserver(key query_idstring donnees) {
        if (
query_id == kQuery) {    // Nous étions appelés à travailler sur "Mon Notecard"?
            // Ceci est une ligne de notre notecard
            
if (donnees == EOF) {    
 
                
llSay(0"Pas de lignes de plus dans notecard, " + (string)iLine " lignes lues".);
 
            } else {
 
                
llSay(0"Ligne " + (string)iLine ": " donnees);   // De données a la ligne actuelle à partir de ce notecard
 
                // requête ligne suivante
                
iLine++;   // Nombre de lignes incrément
                
kQuery llGetNotecardLine("Mon Notecard"iLine);   // Lire une autre ligne quand vous pouvez
 
            
}
        }
    }

Exercice pas facile, j'espère ne rien avoir oublier.

edit, legere correction. ca devrait marcher. Enfin, ca lira les données contenues dans une notecard nommée Mon Notecard (bizarre ce nom).
il reste bcp d'amélioration a faire dessus ...
Ah oui, j'ai copié l'original après la super traduction Google , ça m'a valu pas mal d'erreurs déjà !
Voici l'original sans traduction

Code PHP:

key kQuery;
integer iLine 0;
default {
 
    
state_entry() {
        
llSay(0"Reading notecard...");
        
kQuery llGetNotecardLine("My Notecard"iLine);   // read in "My Notecard" when you can
    
}
 
    
dataserver(key query_idstring data) {
 
        if (
query_id == kQuery) {    // were we called to work on "My Notecard"?
            // this is a line of our notecard
            
if (data == EOF) {    
 
                
llSay(0"No more lines in notecard, read " + (string)iLine " lines.");
 
            } else {
 
                
llSay(0"Line " + (string)iLine ": " data);   // data has the current line from this notecard
 
                //request next line
                
iLine++;   // increment line count
                
kQuery llGetNotecardLine("My Notecard"iLine);   // read another line when you can
 
            
}
        }
    }

Mais le soucis reste le même, ça me dit pas ou ajouter les lignes de code pour charger une animation et la jouer et intégrer également une boite à dialogue !

Je vais détailler mon projet pour mieux situer le problème :
Je possède mon hud et lorsque je clique sur la case "animation" j'ai une boite à dialogue qui s'ouvre avec un bouton numéroté "1" et un second ou il est écrit "load".
Je veux rajouté des animations donc je remplis la notecard en conséquence et je reclique sur la case "animation" et puis "load" et quand je reclique sur "animation" j'ai 3 boutons numéroté "1,2 et 3".

J'ai tripatouillé un peu ce script et c'est un peu le néant pour moi si quelqu'un peut m'aider je suis preneur !
Merci et bonne soirée !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
re,


Ta demande reste insufisament précise a mon sens de plus, il ne s'agit pas d'ajouter quelques lignes ...
Je ne vais donc pas ecrire tout le script, juste te donner les pistes de travail.

- la notion de clic est gérée par Touch start
- ensuite, pour jouer une animation, il faut demander la permission. même si elle sera automatiquement accordée puisque qu'on parle d'un objet porté. pour cela, lire llRequestPermissions , PERMISSION_TRIGGER_ANIMATION et Run time permissions
- comme tu parle de boite de dialog, il va falloir étudier : listen, de llDialog, voire de Timer si tu veux un truc propre...


Bon courage ...


XanorK
Bonjour,
En me relisant aujourd'hui, je me suis rendu compte que j'ai oublier de préciser des points importants. En effet, je ne pars pas de zéro, mon hud possède déjà des scripts et notamment une boîte à dialogue !

Dans mon hud, j'ai une touche qui permet de lancer l'animation (y en a qu'une pour le moment) qui est fonctionnelle ! J'aimerai que le prochain propriétaire puisse rajouter ses propres animations dedans d'où le chargement par notecard !

J'ai donc le script de la boite à dialogue, avec l'autorisation d'animation de l'avatar ! Il me reste plus qu'as trouver la formule pour rajouter des boutons inexistants lorsque la notecard est chargée pour que la personne puisse jouer son animation !

J'ai un peu réfléchi aujourd'hui et j'ai peut être une piste que je vais essayer de mettre en œuvre :
- Première étape, j'ai mon script de boîte à dialogue avec 2 boutons "load" et "1" et l'autorisation de jouer une animation.
-Seconde étape, au moment du clique sur "load" j'insère dans le script la commande de chargement de la notecard et j'incrémente des boutons suivant la demande (c'est ici mon point noir) !
-Derniére étape je referme le script avec le timer !

Je vais essayer ceci et vous tiendrai au courant...
Bonne soirée !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Re-bonsoir,
Bon je me suis attaqué à un trop gros morceau ? Je me suis éclaté le cerveau, d'abord avec le wiki ensuite dans les scripts et je n'ai pas la bonne solution mais petit débutant veut apprendre !

Donc j'ai écrit un script et première mauvaise nouvelle, il ne se compile pas !
Je vous le met ici et si un scripteur peut jeter un œil et m'expliquer me(s) erreur(s) ...

Code PHP:

key kQuery;
integer iLine 0;
key owner;
key user;
integer ecoute;
integer delai 60;
integer iOn;
integer canal;
list 
menu_principal= ["Load","1"];
list 
lKeys;

default
{
    
state_entry()
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);// Ici on demande l'autorisation d'animation
    
}
    
attach(key id)
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
run_time_permissions(integer perm)
    {
        if (
perm PERMISSION_TRIGGER_ANIMATION)
        {
           
state marche;
        }
    }
}
state marche
{
    
state_entry()
    {
        
canal = (integer)llFrand(10000000)-10000000
    }
    
touch_start(integer total_number)
    {
        
user llDetectedKey(0);
        
ecoute llListen(canal""user"");
        if (
user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Choisissez une option"menu_pincipalcanal); // Appel du menu "Load" et "1"
            
llSetTimerEvent(delai);
        }
    }

    
listen(integer channelstring namekey idstring message)
    {
        if (
message == "1"// Animation pré-chargé
        
{
            if(
iOn)
                {
                    
llStartAnimation("*Mis*PrivDance_1_Loop 3");
                }
                else
                {
                    
llStopAnimation("*Mis*PrivDance_1_Loop 3");
                }
                
iOn=!iOn;
            }
        }
    else if (
message == "Load"// Chargement notecard + erreur syntaxe ?
        
{
            
llSay(0"Reading notecard...");
        
kQuery llGetNotecardLine("My Notecard"iLine);  
    }
 
    
dataserver(key query_idstring data
    {
      if (
query_id == kQuery
      {    
            if (
data == EOF
            {    
 
                
llSay(0"No more lines in notecard, read " + (string)iLine " lines.");
 
            } 
            else 
            {
 
                
llSay(0"Line " + (string)iLine ": " data);   
                
iLine++;   
                
kQuery llGetNotecardLine("My Notecard"iLine);
            }
        }
    }
     list 
menu_principal= []  // C'est ici que plus rien ne va, j'ai essayé de me débrouiller mais pour un débutant c'est la jungle
     
lKeys = [];
        if( 
total_number 12 total_number 12;
        for( 
total_number ; ++i)
        {
            
SubNames += [llGetSubString((i),0,22)];
            
lKeys += [llDetectedKey(i)];
        }
        
llDialogkOwner"Liste animation ("+(string)llFloor(fDelai)+" sec)"SubNamescanal);
        
llSetTimerEvent(fDelai);
    } 
     }
    
listen(integer channelstring namekey idstring message)
    {
        if(
llListFindList(menu_principal, [message]) != -1// Dans le meilleur des cas cela aurait du être les animations chargés de la notecard !
        
{
            
integer ind llListFindListSubNames, [message]);
            
key ava llList2Key(lKeysind);
            {
            if(
iOn)
                {
                    
llStartAnimation("*Mis*PrivDance_1_Loop 3");
                }
                else
                {
                    
llStopAnimation("*Mis*PrivDance_1_Loop 3");
                }
                
iOn=!iOn;
            }
        }
    }

Ça n'a pas été facile, preuve en ai il ne fonctionne pas !
J'ai commenté le script pour que vous puissiez comprendre un peu son fonctionnement, enfin comment j'aimerai qu'il fonctionne !

Petit rappel ; Je clique sur le bouton, une boite à dialogue apparaît avec 2 bouton "Load" et "1", je charge une notecard et quand je relance la boite, il y a 4 ou plus de boutons (autant que d'animations chargés) dans la fameuse boite à dialogue.

Merci de votre aide et de vos explications !

Bonne soirée

Ps : pour mon essai, je n'ai pas touché au script de chargement de la notecard, je l'ai transposé tel quel !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonjour,


une rapide lecture de ton script montre une multitude d'erreurs.

- Déjà tu as des problèmes de déclaration de variables (total_number n'est pas déclarée, lKeys l'est 2 fois, ...)

- 2 events Listen dans le même state.

- Le pire reste la boucle for en toute fin du dataserver. Une horreur en terme de syntaxe (l'usage des llDetectedXXX ne peut pas se faire dans un dataserver mais uniquement dans les events d'interaction d'un objet avec l'environnement : touch, senseor, collision,...) , et d'une cohérence discutable (je ne vois pas a quoi elle est censée servir).

Je ne vois pas non plus l'intérêt de la notecard. y'en avait-il une dans le hud d'origine? Si oui, je serais curieux d'y jeter un oeil. Sinon, tu n'en a pas besoin.
J'opterais bien pour la 2eme solution moi


Bon courage,
XanorK

Bonsoir,
Citation :
Publié par XanorK
une rapide lecture de ton script montre une multitude d'erreurs.

- Déjà tu as des problèmes de déclaration de variables (total_number n'est pas déclarée, lKeys l'est 2 fois, ...)

- 2 events Listen dans le même state.

- Le pire reste la boucle for en toute fin du dataserver. Une horreur en terme de syntaxe (l'usage des llDetectedXXX ne peut pas se faire dans un dataserver mais uniquement dans les events d'interaction d'un objet avec l'environnement : touch, senseor, collision,...) , et d'une cohérence discutable (je ne vois pas a quoi elle est censée servir).
Oui il y a pas mal d'erreurs mais j'arrive pas à les corriger (j'ai viré un lllisten) mais je me perd dans la création de list qui n'existe pas ! Les boucles j'ai pas encore bien compris le fonctionnement...

Citation :
Publié par XanorK
Je ne vois pas non plus l'intérêt de la notecard. y'en avait-il une dans le hud d'origine? Si oui, je serais curieux d'y jeter un oeil. Sinon, tu n'en a pas besoin.
J'opterais bien pour la 2eme solution moi
Pourquoi un chargement par notecard ? D'une part pour apprendre et d'autres parts c'est le moyen que j'ai trouvé pour laisser le choix à l'utilisateur de choisir ses propres animations !

Citation :
Publié par XanorK
y'en avait-il une dans le hud d'origine? Si oui, je serais curieux d'y jeter un oeil.
Il n'y a pas de hud d'origine, je suis parti de zéro et j'ai tout créer (avec de l'aide, merci) je suis à la fin de mon projet et il me reste plus que ce script à intégrer !

Pour finir, je cherche juste de l'aide pour la construction de ce genre de script (création d'une liste via une notecard) et des explications à mes erreurs , je veux apprendre !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
ok,

je demande pas pas mieux que de d'aider. y'aurait quoi dans ta notecard? juste une liste d'anim les un en dessous les autres?

Edit : en attendant, voici comment je procède
remarque, attention le cas ou il y aurait plusieurs notecard n'est pas pris en compte. seule la première par ordre alphabétique serait lue.

Code PHP:

/// exemple de mise en variable list du contenu d'une notecard.

list lMaList;
key kReq;
integer iLine;
string sNote;

init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
sNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(sNoteiLine++);
}

default
{
    
state_entry()
    {
        
init();
    }
    
touch_start(integer total_number)
    {
        
vidage();
        if (
sNote != ""// y'a-t-il bien une carte a lire
            
lecture();
        else 
llSay(0"Merci de me donner une notecard à lire");
    }
    
dataserver(key idstring data)
    {
//passons au choses serieuses
        
if (id == kReq)    { // juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF) {// rappel : EOF pour End Of Line

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))    {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}
            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Le contenu de la carte est : \n" llDumpList2String(lMaList"\n"));
            }
        }
    }
    
on_rez(integer start_param)
    {
        
init();
    }
    
changed(integer c)
    {
        if (
CHANGED_INVENTORY)    init();
    }

Bonjour,

Ce script marche à merveille, je vais l'étudier et essayer de l'intégrer à mes autres scripts ! C'est comme ceci que j'arrive le mieux à apprendre ! L'empilement de script est pas évident même avec le wiki !

Merci pour ton aide Xanork
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonjour,

J'ai donc étudié le script et j'ai décider de ne pas foncé tête baissée pour arrivé au script final (avec pleins de fautes ), maintenant j'y vais par petites touches...

C'est mieux mais c'est pas encore ça...

Le script se compile mais ne rempli pas ces fonctions :

Code PHP:

key owner;
key user;
integer ecoute;
integer delai 60;
integer canal;
list 
menu_pincipal= ["Load","Anim1"];      
integer iOn TRUE;
list 
lMaList;
key kReq;
integer iLine;
string sNote;
string message;

init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
sNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(sNoteiLine++);
}

default
{
    
state_entry()
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
attach(key id)
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
run_time_permissions(integer perm)
    {
        if (
perm PERMISSION_TRIGGER_ANIMATION)
        {
           
state marche;
        }
    }
}
state marche
{
    
state_entry()
    {
        
canal = (integer)llFrand(10000000)-10000000
    }
    
touch_start(integer total_number)
    {
        
user llDetectedKey(0);
        
ecoute llListen(canal""user""); 
        if (
user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Choisissez une option"menu_pincipalcanal); 
            
llSetTimerEvent(delai);
        }
    }

    
listen(integer channelstring namekey idstring message)
    {
        if (
message == "Load")
        {
           {
        
vidage();
        if (
sNote != ""// y'a-t-il bien une carte a lire
            
lecture();
        else 
llSay(0"Merci de me donner une notecard à lire");
           }
        }  
    }
    
dataserver(key idstring data)
    {
//passons au choses serieuses
        
if (id == kReq)    
        { 
// juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF
            {
// rappel : EOF pour End Of Line

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))    
                {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}
        
    
            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Le contenu de la carte est : \n" llDumpList2String(lMaList"\n")); 
    }
}



        else if (
message == "Anim1")
        {
            if(
iOn)
                {
                    
llStartAnimation("*Mis*PrivDance_1_Loop 3");
                }
                else
                {
                    
llStopAnimation("*Mis*PrivDance_1_Loop 3");
                }
                
iOn=!iOn;
            }
        
        }
     
timer()
    {
        
llSetTimerEvent(0.0);
        
llListenRemove(ecoute);
    }
    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
    }
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

Le script se compile parfaitement, sur le terrain quand je clique sur l'objet, j'ai bien une boîte à dialogue qui apparaît avec les 2 options "Load" et "Anim1" mais quand je clique sur "Load" il me demande "Merci de me donner une notecard à lire" et sur "Anim1" il ne se passe rien !
J'ai bien mis une notecard et l'animation en question dans l'objet...

J'ai chercher mon erreur mais je sèche !

Merci de votre aide !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
J'ai pas trop suivi ton histoire mais en jetant un coup d'œil au script je pense que le bout de code :

Code PHP:

        else if (message == "Anim1")
        {
            if(
iOn)
            {
                
llStartAnimation("*Mis*PrivDance_1_Loop 3");
            }
            else
            {
                
llStopAnimation("*Mis*PrivDance_1_Loop 3");
            }
            
iOn=!iOn;
        } 
n'est pas à sa place dans l'événement "dataserver", il serait sans doute mieux dans l'événement "listen", sinon tu ne traites pas le choix "Anim1" de ton menu.
En plus de la remarque de best,

Citation :
Publié par Polo Slok
Code PHP:

        if (sNote != ""// y'a-t-il bien une carte a lire
            
lecture();
        else 
llSay(0"Merci de me donner une notecard à lire"); 
... quand je clique sur "Load" il me demande "Merci de me donner une notecard à lire"
si il te dit ca, c'est que tu n'a pas de notecard dans le contenu de l'objet.
Citation :
Publié par bestmomo
J'ai pas trop suivi ton histoire mais en jetant un coup d'œil au script je pense que le bout de code :

Code PHP:

        "" 

n'est pas à sa place dans l'événement "dataserver", il serait sans doute mieux dans l'événement "listen", sinon tu ne traites pas le choix "Anim1" de ton menu.
Est ce possible de placer le "dataserver" en toute fin de script et de ce fait de le séparer du début du script original ? Je vais tester ça !

Citation :
Publié par XanorK
En plus de la remarque de best,

Code PHP:

if (sNote != ""// y'a-t-il bien une carte a lire
            
lecture();
        else 
llSay(0"Merci de me donner une notecard à lire"); 
si il te dit ca, c'est que tu n'a pas de notecard dans le contenu de l'objet.
Justement c'est ici que ma compréhension s'arrête car j'ai bien mis une notecard dans l'object en question !

Citation :
Publié par Polo Slok
J'ai bien mis une notecard et l'animation en question dans l'objet...
https://forums.jeuxonline.info/%3Ca%20href=http://img651.imageshack.us/i/26012010212426.jpg/%20target=_blank%20rel=nofollow%3E[IMG]http://img651.imageshack.us/img651/1620/26012010212426.jpghttp://img651.imageshack.us/img651/1620/26012010212426.jpg
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonjour,


le problème de lecture viens de moi. J'ai mis la ligne de découverte du nom de la notecard (sNote = llGetInventoryName(INVENTORY_NOTECARD,0);
) dans la fonction init() -parfait- mais j'ai juste oublié d'appeler cette fonction.
C fait a présent.

le point soulever par bestmono est que tu mis la réponse au dialog dans le dataserver cf ci-dessous :

Code PHP:

key user;
integer ecoute;
integer delai 60;
integer canal;
list 
menu_pincipal= ["Load","Anim1"];
integer iOn TRUE;
list 
lMaList;
key kReq;
integer iLine;
string sNote;


init()    {
    
vidage();
    
//je trouve le nom de la 1ere (zeroième) notecard du contenu de l'objet
    
sNote llGetInventoryName(INVENTORY_NOTECARD,0);
    
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    
llOwnerSay("ready");
}
vidage()    {
    
iLine 0;
    
lMaList = [];
}

lecture()    {
    
kReq llGetNotecardLine(sNoteiLine++);
}

default
{
    
state_entry()
    {
        
init(); // oups, faut pas oublier l'init() /me se tappe sur la tete
    
}
    
attach(key id)
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
run_time_permissions(integer perm)
    {
        if (
perm PERMISSION_TRIGGER_ANIMATION)
        {
            
state marche;
        }
    }
    
changed(integer c)
    {
        if(
CHANGED_INVENTORY)    init(); // juste au cas ou tu mettrais la notecard apres la compilation du script
    
}
}
state marche
{
    
state_entry()
    {
        
canal = (integer)llFrand(10000000)-10000000;
    }
    
touch_start(integer total_number)
    {
        
user llDetectedKey(0);
        
ecoute llListen(canal""user"");
        if (
user == llGetOwner())
        {
            
llDialog(llDetectedKey(0), "Choisissez une option"menu_pincipalcanal);
            
llSetTimerEvent(delai);
        }
    }

    
listen(integer channelstring namekey idstring message)
    {
        if (
message == "Load")
        {
            
vidage();
            if (
sNote != ""// y'a-t-il bien une carte a lire
                
lecture();
            else 
llSay(0"Merci de me donner une notecard à lire");
        }
        
//////////////////// cette partie te permet d'ecouter les reponses de user au llDialog
        //////////////////// elle doit donc etre dans le listen, pas dans le dataserver (point souleve par best)
        
else if (message == "Anim1")
        {
            if(
iOn)
            {
                
llStartAnimation("*Mis*PrivDance_1_Loop 3");
            }
            else
            {
                
llStopAnimation("*Mis*PrivDance_1_Loop 3");
            }
            
iOn=!iOn;
        }
        
/////////////////////////////////////////////////////////////////
    
}
    
dataserver(key idstring data)
    {
//passons au choses serieuses
        
if (id == kReq)
        { 
// juste pour etre sur que dataserver répond bien a ma question et non a une autre
            
if (data != EOF)
            {
// rappel : EOF pour End Of Line

                
data llStringTrim(dataSTRING_TRIM); // efface les espaces parasites en début et fin de ligne
                
string initial llGetSubString(data0,0); // quel est le premier caractère

                
if ((initial != "") && (initial != "#"))
                {
                    
//initial != "" permet de pas mettre de lignes vide ds la list
                    // initial != "#" une ligne de la notecard commençant par # sera considérer comme commentaire
                    // et donc pas mémorisée. (facultatif)

                    
lMaList += [data]; // mémorisation dans la liste
                
}
                
lecture(); // ligne suivante
            
}


            else { 
// on est en EOF (toute la carte a été lue
                // reste plus qu'a utiliser la carte
                // ici par un simple llSay
                
llSay(0"Le contenu de la carte est : \n" llDumpList2String(lMaList"\n"));
            }
        }
    }
    
timer()
    {
        
llSetTimerEvent(0.0);
        
llListenRemove(ecoute);
    }
    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
        if (
chang CHANGED_INVENTORY// si on change le contenu de l'inventaire, on relit la notecard
        
{
            
vidage();
            
lecture();
        }
    }
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

Bonjour,

Et merci, tu as été plus rapide que moi, c'est ce que je voulais essayer cette après midi, on peut donc séparer le "dataserveur" ! Je vais m'attaquer à la dernière partie c'est à dire le chargement des animations via la "notecard" et la création de boutons en conséquences...

ça s'annonce corsée mais c'est en essayant qu'on apprend ...
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Re,

Je suis coincé si je puis dire, mes pauvres connaissances en script m'empêche d'aller plus loin !

A partir du script précédant j'aimerai pouvoir "chargé" de nouvelles animations, je dois rajouter un llDialog dans le "dataserveur" à la place du llSay ?

Si vous pouviez m'aiguiller sans me donner la solution complète, je vous remercie...

Bonne soirée !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Merci polo d'avoir occupé ma nuit d'insomnie.

Bien, maintenant que tu sais lire une notecard, je la supprime

En effet, comme je l'ai déjà dit plus haut, a mon sens, la notecard ne sert strictement a rien pour ce genre d'application.

Voici un script qui construit le llDialog en fonction du contenu de l'inventaire de l'objet.

Code PHP:

key kOwner;
integer iEcoute;
integer fDelai 60;
integer iCanal;
integer iNbAnim;
list 
lAnims;
string sNEXT ">>";
string sPREV "<<";
string STOP "STOP";
string  sTEXTE "Choisissez votre anim : ";
float fTIMEOUT 30.0;        // Délai pour réponse au menu
string sAnimPrecedente;
integer iIndexMenu;

init()    {
    
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    
kOwner llGetOwner();
    
llOwnerSay("ready");
}

FaireList()    {
    
integer i;
    
iNbAnim llGetInventoryNumber(INVENTORY_ANIMATION);
    
lAnims = [STOP];
    for(
i=0i<iNbAnim; ++i)    {
        
string nom_anim llGetInventoryName(INVENTORY_ANIMATIONi);
        if (
llStringLength(nom_anim)    < 24)
            
lAnims += [nom_anim];
        else 
llOwnerSay("l'anim \"" nom_anim "\"porte un nom trop long et ne sera pas prise en compte");
    }
}
navigation(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lAnims);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

// -- Gestion de l'index des boutons du menu --
// @ param [string] bouton de déplacement
GestIndexBoutons(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lAnims);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

//    -- Gestion menu --
Menu() {
    
llSetTimerEvent(fTIMEOUT);
    
iCanal = (integer)llFrand(-100000);
    
iEcoute llListen(iCanal""kOwner"");
    
// Liste globale des boutons
    
list lBoutons lAnims;
    
// Nombre total de boutons
    
integer n llGetListLength(lAnims);
    
// Si plusieurs pages
    
if(12) {
        
// Que 2 pages -> navigation simple
        
if(23) {
            
// Deuxième page
            
if(iIndexMenu)
                
lBoutons = [sPREV] + llList2List(lAnimsiIndexMenu, -1);
            
// Première page
            
else
                
lBoutons llList2List(lAnims01) + [sNEXT] + llList2List(lAnims210);}
        
// Plus de 2 pages -> navigation riche
        
else {
            list 
= [sPREVllList2String(lAnimsiIndexMenu), sNEXT];
            
// Première page ou page intermédiaire
            
if(iIndexMenu 10)
                
lBoutons llList2List(lAnimsiIndexMenu 1iIndexMenu 9);
            
// Dernière page
            
else {
                if(
iIndexMenu n)
                    
lBoutons llList2List(lAnimsiIndexMenu 1, -1);
                else 
lBoutons l;}
        }
    }
    
// Envoi du menu
    
llDialog(kOwnersTEXTElBoutonsiCanal);
}


cancelMenu()    {
    
llSetTimerEvent(0.0);
    
llListenRemove(iEcoute);
}
finMenu()    {
    
llOwnerSay("trop tard. Menu desactivé");
    
cancelMenu();
}
PlayAnim(string anim)    {
    if(
sAnimPrecedente != "")
        
llStopAnimation(sAnimPrecedente);
    
    
llOwnerSay(anim);
    if(
anim != STOP)    {
        
llStartAnimation(anim);
        
sAnimPrecedente anim;
    }
    else 
sAnimPrecedente "";
}

default
{
    
touch_start(integer total_number)
    {
        
Menu();
    }
    
listen(integer channelstring namekey idstring message)
    {
        if(~
llListFindList([sNEXTsPREV], [message]))    {
            
navigation(message);
        }
        else {
            
cancelMenu();
            
PlayAnim(message);
        }
    }
    
timer()
    {
        
finMenu();
    }
    
state_entry()
    {
        
init(); // oups, faut pas oublier l'init() /me se tappe sur la tete
        
FaireList();
    }
    
attach(key id)
    {
        if (
id != NULL_KEY)
            
init();
    }
    
run_time_permissions(integer perm)
    {
        if (!(
perm PERMISSION_TRIGGER_ANIMATION))
        {
            
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
        }
    }
    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
        if (
chang CHANGED_INVENTORY// si on change le contenu de l'inventaire, on relit la notecard
        
{
            
FaireList();
        }
    }

nb : les fonctions GestIndexBoutons et Menu sont librement adaptée de ce travail de bestmono.


XanorK
Bonsoir,

Et merci Xanork, impressionnant cette boîte à dialogue et cela permet d'éviter les complication de remplir une notecard avec les fautes de frappe que l'utilisateur peut faire par mégarde !

Reste plus qu'as comprendre son fonctionnement (merci pour les commentaires dans le script ça aide )

et puis à l'intégrer dans le hud final... et continuer mon apprentissage...

Bonne soirée !
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonsoir,

Je reviens avec un petit soucis et je me suis creusé car au départ c'était la cata mais je me suis repris pour éviter de refaire la même erreur et de poster un script rempli d'erreurs et d'incohérence !

Donc j'ai mon script du hud qui a toute les options utile et je veux rajouter le script pour les animations ! Donc je l'ai intégrer, le script se compile !

Ou cela se complique c'est que pour commander les options cela se fait par des boutons ---> explications : Hud H + 4 boutons A, B, C et D; dans H le script "final" et dans les boutons A, B, C et D un script de commande. C'est un link message qui permet de commander les différentes options présent dans H dans un script unique ! Clique sur A ---> Animation, sur B ---> 1 option et ainsi de suite ! (Pas facile à expliquer, j'espère que vous arrivez à suivre !)

Le soucis c'est que lorsque je clique sur le bouton A animation j'ai la petite icône d'erreur de script avec comme explication : "Could not find animation", il ne trouve pas d'animation or il y en a bien une dans l'inventaire de l'objet !

Le soucis vient plutôt du bouton même si celui ci communique bien avec le script "final" ! Il ne doit pas manquer grand chose mais j'ai eu beau creuser, je bloque !

Voici les scripts :

Le bouton A :

Code PHP:

default
{
    
touch_start(integer detected)
    {
        
llMessageLinked(LINK_ROOT,-1818,"","");
    }

et le script "final":

Code PHP:

key kOwner;
integer iEcoute;
integer fDelai 60;
integer iCanal;
integer iNbAnim;
list 
lAnims;
string sNEXT ">>";
string sPREV "<<";
string STOP "STOP";
string  sTEXTE "Choisissez votre anim : ";
float fTIMEOUT 30.0;        // Délai pour réponse au menu
string sAnimPrecedente;
integer iIndexMenu;
key Owner;key user;
integer vi;
integer oui;
integer on;
integer ok;
integer go;
integer ja;
integer ecoute;
integer delai 60;
integer canal// < plus de canal defini
list menu0= ["Banane","Blanc","Bleu","Jaune","Noir","Rouge","Rose","Vert","Violet","Retour"];
list 
menu2= ["1","2","3","4","5","6","Retour"];
list 
menu_pincipal= ["Couleurs","Billets"];      // /
list blanc= ["Antique","Ivoire","retour","Blank"];
list 
bleu= ["B.Clair","Turquoise","retour","Nuit"];
list 
jaune= ["J.Clair","Pop-Corn","retour","Citron"];
list 
rouge= ["Rouges","Cerise","retour","Indien"];
list 
rose= ["R.Clair","Broadway","retour","Mat"];
list 
vert= ["V.Clair","Olive","retour","Pin"];
list 
violet= ["Violette","Outremer","retour","Sombre"];
integer chang;
init()    {
    
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
   
kOwner llGetOwner();
    
llOwnerSay("ready");
}

FaireList()    {
    
integer i;
    
iNbAnim llGetInventoryNumber(INVENTORY_ANIMATION);
    
lAnims = [STOP];
    for(
i=0i<iNbAnim; ++i)    {
        
string nom_anim llGetInventoryName(INVENTORY_ANIMATIONi);
        if (
llStringLength(nom_anim)    < 24)
            
lAnims += [nom_anim];
        else 
llOwnerSay("l'anim \"" nom_anim "\"porte un nom trop long et ne sera pas prise en compte");
    }
}
navigation(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lAnims);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

// -- Gestion de l'index des boutons du menu --
// @ param [string] bouton de déplacement
GestIndexBoutons(string browse) {
    
// Nombre de boutons
    
integer n llGetListLength(lAnims);
    
// Navigation simple pour deux pages
    
if(23) {
        if(
iIndexMenuiIndexMenu 0;
        else 
iIndexMenu 11;}
    
// Navigation riche pour plus de deux pages
    
else {
        if(
browse == sNEXT) {
            
iIndexMenu += 10;
            if(
iIndexMenu >= niIndexMenu 0;}
        else {
            
iIndexMenu -= 10;
            if(
iIndexMenu 0iIndexMenu 10;}
    }
    
// Envoi du menu
    
Menu();
}

//    -- Gestion menu --
Menu() {
    
llSetTimerEvent(fTIMEOUT);
    
iCanal = (integer)llFrand(-100000);
    
iEcoute llListen(iCanal""kOwner"");
    
// Liste globale des boutons
    
list lBoutons lAnims;
    
// Nombre total de boutons
    
integer n llGetListLength(lAnims);
    
// Si plusieurs pages
    
if(12) {
        
// Que 2 pages -> navigation simple
        
if(23) {
            
// Deuxième page
            
if(iIndexMenu)
                
lBoutons = [sPREV] + llList2List(lAnimsiIndexMenu, -1);
            
// Première page
            
else
                
lBoutons llList2List(lAnims01) + [sNEXT] + llList2List(lAnims210);}
        
// Plus de 2 pages -> navigation riche
        
else {
            list 
= [sPREVllList2String(lAnimsiIndexMenu), sNEXT];
            
// Première page ou page intermédiaire
            
if(iIndexMenu 10)
                
lBoutons llList2List(lAnimsiIndexMenu 1iIndexMenu 9);
            
// Dernière page
            
else {
                if(
iIndexMenu n)
                    
lBoutons llList2List(lAnimsiIndexMenu 1, -1);
                else 
lBoutons l;}
        }
    }
    
// Envoi du menu
    
llDialog(kOwnersTEXTElBoutonsiCanal);
}


cancelMenu()    {
    
llSetTimerEvent(0.0);
    
llListenRemove(iEcoute);
}
finMenu()    {
    
llOwnerSay("trop tard. Menu desactivé");
    
cancelMenu();
}
PlayAnim(string anim)    {
    if(
sAnimPrecedente != "")
        
llStopAnimation(sAnimPrecedente);
    
    
llOwnerSay(anim);
    if(
anim != STOP)    {
        
llStartAnimation(anim);
        
sAnimPrecedente anim;
    }
    else 
sAnimPrecedente "";
}
default
{
    
state_entry()
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
attach(key id)
    {
        
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
    }
    
run_time_permissions(integer perm)
    {
        if (
perm PERMISSION_TRIGGER_ANIMATION)
        {
           
state marche;
        }
    }
}
state marche
{
    
state_entry()
    {
        
canal = (integer)llFrand(10000000)-10000000// canal dynamique pour éviter la communication entre un meme prim identique
    
}
    
link_message(integer sender_numberinteger numberstring messagekey id// on recupere le message et la clef UUID (voir la suite)
    
{
        if(
message=="menu"// condition sur le message entrant
        
{
            
user id;
            
ecoute llListen(canal""user""); // plus de NULL_KEY , on cible l'user. Limitation du lag au moment de l ecoute
            
if (user == llGetOwner())
            {
                
llDialog(user"Personnalisation de la Jarretiére"menu_pincipalcanal); // on precise les menus "menu_pincipal"
                
llSetTimerEvent(delai);
            }
        }
        else if(
number==-1818)
        {
                 if(~
llListFindList([sNEXTsPREV], [message]))    
                 {
                 
navigation(message);
                 }
        else 
        {
            
cancelMenu();
            
PlayAnim(message);
        }
    
    
        }
        else if(
number==-1919)
        {
            if (
llGetInventoryNumber(INVENTORY_NOTECARD) > 0)
            {
                
llGiveInventory(idllGetInventoryName(INVENTORY_NOTECARD0));
            }
        }
    }
    
listen(integer channelstring namekey idstring message)
    {
        if (
message == "Couleurs")
        {
            
llDialog(id"Choisissez une Couleur",menu0canal); // pas d'arret de l'ecoute et du timer , on en a encore besoin
        
}
        else if (
message == "Blanc")
        {
            
llDialog(id"Choisissez une Couleur",blanccanal); // idem
        
}
        else if (
message == "Bleu")
        {
            
llDialog(id"Choisissez une Couleur",bleucanal); // idem
        
}
        else if (
message == "Jaune")
        {
            
llDialog(id"Choisissez une Couleur",jaunecanal); // idem
        
}
        else if (
message == "Rouge")
        {
            
llDialog(id"Choisissez une Couleur",rougecanal); // idem
        
}
        else if (
message == "Rose")
        {
            
llDialog(id"Choisissez une Couleur",rosecanal); // idem
        
}
        else if (
message == "Vert")
        {
            
llDialog(id"Choisissez une Couleur",vertcanal); // idem
        
}
        else if (
message == "Violet")
        {
            
llDialog(id"Choisissez une Couleur",violetcanal); // idem
        
}
        else if (
message == "Billets")
        {
            
llDialog(id"Nombre de billets visibles",menu2canal); // idem
        
}
        else if (
message == "Retour")
        { 
        
llDialog(id,"Personnalisation de la jarretiére"menu_pincipalcanal); 
        }
        else if (
message == "retour")
        { 
        
llDialog(id,"Choisissez une couleur"menu0canal); 
        }
        else if (
message == "Banane")
        {
            
llSay(10,"Banane");
            
llSetTimerEvent(0.0);               
            
llListenRemove(ecoute);             // on arrete l'ecoute et le Timer apres avoir executer la Fonction.
        
}
        else if (
message == "Antique")
        {
            
llSay(10,"Antique");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Ivoire")
        {
            
llSay(10,"Ivoire");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Blank")
        {
            
llSay(10,"Blank");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
       else if (
message == "B.Clair")
        {
            
llSay(10,"B.Clair");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Turquoise")
        {
            
llSay(10,"Turquoise");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Nuit")
        {
            
llSay(10,"Nuit");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "J.Clair")
        {
            
llSay(10,"J.Clair");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Pop-Corn")
        {
            
llSay(10,"Pop-Corn");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Citron")
        {
            
llSay(10,"Citron");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Noir")
        {
            
llSay(10,"Noir");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Rouges")
        {
            
llSay(10,"Rouges");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Cerise")
        {
            
llSay(10,"Cerise");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Indien")
        {
            
llSay(10,"Indien");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "R.Clair")
        {
            
llSay(10,"R.Clair");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Broadway")
        {
            
llSay(10,"Broadway");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Mat")
        {
            
llSay(10,"Mat");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "V.Clair")
        {
            
llSay(10,"V.Clair");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Olive")
        {
            
llSay(10,"Olive");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Pin")
        {
            
llSay(10,"Pin");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Violette")
        {
            
llSay(10,"Violette");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Outremer")
        {
            
llSay(10,"Outremer");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "Sombre")
        {
            
llSay(10,"Sombre");
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "1")
        {
            if(
on)
            {
                
llSay(10,"1");
            }
            else
            {
                
llSay(10,"1");
            }
            
on=!on;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "2")
        {
            if(
ok)
            {
                
llSay(10,"2");
            }
            else
            {
                
llSay(10,"2");
            }
            
ok=!ok;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "3")
        {
            if(
go)
            {
                
llSay(10,"3");
            }
            else
            {
                
llSay(10,"3");
            }
            
go=!go;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "4")
        {
            if(
ja)
            {
                
llSay(10,"4");
            }
            else
            {
                
llSay(10,"4");
            }
            
ja=!ja;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "5")
        {
            if(
vi)
            {
                
llSay(10,"5");
            }
            else
            {
                
llSay(10,"5");
            }
            
vi=!vi;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        else if (
message == "6")
        {
            if(
oui)
            {
                
llSay(10,"6");
            }
            else
            {
                
llSay(10,"6");
            }
            
oui=!oui;
            
llSetTimerEvent(0.0);
            
llListenRemove(ecoute);             //idem
        
}
        
init(); // oups, faut pas oublier l'init() /me se tappe sur la tete
        
FaireList();
    }
    
    
changed(integer chang// lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
    
{
        if(
chang CHANGED_OWNER)
        {
            
llResetScript();
        }
        if (
chang CHANGED_INVENTORY// si on change le contenu de l'inventaire, on relit la notecard
        
{
            
FaireList();
        }
        
    }

    
timer()
    {
        
llSetTimerEvent(0.0);
        
llListenRemove(ecoute);
    }
    
    
    
on_rez(integer i// lors de la pose de l objet au sol , on reset pour modifier le canal dynamique
    
{
        
llResetScript();
    }

Voila si une personne peut jeter un oeil et me donner une solution, je l'en remercie car là je ne vois pas ou ça coince !

Bonne soirée...
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonsoir,

l'erreur est tout à fait logique au vu de se que tu as écris :

regarde, dans ton link_message, tu ecris :

Code PHP:

else if(number==-1818)
        {
            if(~
llListFindList([sNEXTsPREV], [message]))
            {
                
navigation(message);
            }
            else
            {
                
cancelMenu();
                
PlayAnim(message);
            }
        } 
or, le script de ton bouton A est :
Code PHP:

        llMessageLinked(LINK_ROOT,-1818,"",""); 

que ce passe-t-il en H qd on reçoit un message avec -1818 ?
Et bien on test, si le string message est dans la list [sNEXT, sPREV]. Ce qui n'est pas le cas.
On déclenche donc cancelMenu(); et surtout PlayAnim(message);

Et y'a koi dans la variable message ? Rien... ce qui équivaut à PlayAnim("") ... on demande a jouer une anim sans nom. Et comme, il n'y a pas d'anim sans nom dans l'inventaire de l'objet .... CQFD



Solution. Laisse le script tel que je l'ai écris dans dans le bouton A, mets tes anim dans le bouton A. ca devrait suffire a régler tous tes problèmes
je ne vois pas d'intérêt ici a repasser par le script principale de H

XanorK
Citation :
Publié par XanorK

Solution. Laisse le script tel que je l'ai écris dans dans le bouton A, mets tes anim dans le bouton A. ca devrait suffire a régler tous tes problèmes
je ne vois pas d'intérêt ici a repasser par le script principale de H

XanorK
Bonjour,

Solution intéressante mais malheureusement impossible car c'est un objet lié ! Le hud est muni d'une plaque principal (prim root) sur lequel viennent se greffer 4 boutons (prims enfants) !

Je suis donc obliger de passer par le script "final" pour que les futurs animations qui seront glissées dans le hud soient prises en compte !

Merci pour ton aide...
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Bonjour,

Gardons l'idée de scinder les 2 scripts. Ca fera moins usine a gaz.

Dans ta prim root, tu va mettre les anims et 2 scripts (ton script de gestion des couleurs et celui que j'ai écrit précédemment en remplaçant

Code PHP:

    touch_start(integer total_number)
    {
        
Menu();
    } 
par
Code PHP:

    link_message(integer sender_numberinteger numberstring messagekey id)
    {
        if (
number == -1818)    {
            
Menu();
        }
    } 
Bonsoir,

Merci, ça fait d'une pierre deux coups ! Effectivement ça aide dans la clarté des scripts ! Le link message n'est pas une chose aisée !

Bonne soirée...
__________________
Le fait que le monde soit peuplé de crétins permet à chacun de nous de ne pas se faire remarquer
http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gifKentoc'h mervel eget bezañ saotret http://yelims2.free.fr/Drapeaux/DrapeauBretagne.gif
Citation :
Publié par Polo Slok
Le link message n'est pas une chose aisée !

Oui, ça m'a pas mal dérouté au début moi aussi. Mais une fois que tu as compris comment ça marche, c TRES pratique. ça vaut vraiment la peine de s'y attarder.
Répondre

Connectés sur ce fil

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