Script parlant

Répondre
Partager Rechercher
Bonsoir à tous,

Je sais que pour un script qui parle il faut ceci :
Code PHP:

​default
{

    
touch_start(integer total_number)
    {
        
llSay(0"pouet pouet!");
    }


Mais j'aimerais un script qui puisse parler mais surtout donner un message différent à chaque fois qu'on clique sur l'objet de façon organisée :

1e clic : texte 1
2e clic : texte 2
3e clic : texte 3

Un 4e clic reviendrait au texte 1 et ainsi de suite.

Ca ne doit pas être bien compliqué, mais je n'arrive pas à le faire !

Merci par avance pour votre coup de main !
Code PHP:

string texte1 "salut";
string texte2 "ca roule";
string texte3 "ma poule";

integer compteur;

default
{
touch_start(integer n)
{
list 
tlist = [texte1,texte2,texte3];

string text llList2String(tlist,compteur);
llSay(0,text);
compteur = (compteur+1)%llGetListLength(tlist); 
}

Tu peux mettre plus de messages :
Code PHP:

string texte4 "un dernier pour la route"
Ne pas oublier alors de compléter la liste
Code PHP:

list tlist = [texte1,texte2,texte3,texte4]; 

J'en profite pour faire un petit coucou amical à tous les survivants, qui envers et contre tout, continuent à hanter le forum plus ou moins sporadiquement, entre deux cures contre les rhumatismes
Smile
Citation :
Publié par black cats
Code PHP:

string texte1 "salut";
string texte2 "ca roule";
string texte3 "ma poule";

integer compteur;

default
{
touch_start(integer n)
{
list 
tlist = [texte1,texte2,texte3];

string text llList2String(tlist,compteur);
llSay(0,text);
compteur = (compteur+1)%llGetListLength(tlist); 
}

Tu peux mettre plus de messages :
Code PHP:

string texte4 "un dernier pour la route"
Ne pas oublier alors de compléter la liste
Code PHP:

list tlist = [texte1,texte2,texte3,texte4]; 

J'en profite pour faire un petit coucou amical à tous les survivants, qui envers et contre tout, continuent à hanter le forum plus ou moins sporadiquement, entre deux cures contre les rhumatismes
Un million de mercis à toi ! C'est exactement ce que je voulais !
Coucou !

Je suis vraiment embêtante, mais est-il possible de modifier le script de façon à ce que seule une certaine personne (en plus de moi) puisse activer l'effet du clic ?

Merci beaucoup par avance !

Dernière modification par Nastia ; 30/05/2019 à 08h10.
Quelques changements dans le script initial et ajout d'une liste d'utilisateurs autorisés (via uuid).
NB: Si la variable "sayto" est sur TRUE, alors le script parle uniquement à la personne qui a cliqué.
Code:
list phrases = [
    "salut!",
    "ça roule ?",
    "ma poule :)"
];

list users = [
    "UUID_AUTORISE",
    "UUID_AUTORISE",
    "UUID_AUTORISE",
    ""
];

integer sayto = FALSE;
integer counter;
integer count;

default
{
    state_entry()
    {
        users += [llGetOwner()];
        count = llGetListLength(phrases);
    }
    
    touch_start(integer n)
    {
        key user = llDetectedKey(0);

        if (~llListFindList(users, [user]))
        {
            if (sayto) llRegionSayTo(user, PUBLIC_CHANNEL, llList2String(phrases, counter));
            else llSay(PUBLIC_CHANNEL, llList2String(phrases, counter));
            counter = (counter + 1) % count;
        }
    }
}

Dernière modification par djphil ; 30/05/2019 à 19h41.
Citation :
Publié par djphil
Quelques changements dans le script initial et ajout d'une liste d'utilisateurs autorisés (via uuid).
NB: Si la variable "sayto" est sur TRUE, alors le script parle uniquement à la personne qui a cliqué.
Code:
list phrases = [
    "salut!",
    "ça roule ?",
    "ma poule :)"
];

list users = [
    "UUID_AUTORISE",
    "UUID_AUTORISE",
    "UUID_AUTORISE",
    ""
];

integer sayto = FALSE;
integer counter;
integer count;

default
{
    state_entry()
    {
        users += [llGetOwner()];
        count = llGetListLength(phrases);
    }
    
    touch_start(integer n)
    {
        key user = llDetectedKey(0);

        if (~llListFindList(users, user))
        {
            if (sayto) llRegionSayTo(user, PUBLIC_CHANNEL, llList2String(phrases, counter));
            else llSay(PUBLIC_CHANNEL, llList2String(phrases, counter));
            counter = (counter + 1) % count;
        }
    }
}
Bonjour, et merci pour ta réponse.

Malheureusement, le script ne semble pas fonctionner (ou je n'ai pas compris comment il fonctionne) : j'ai remplacé les phrases "salut" etc. par mes phrases à moi et "UUID_AUTORISE" par l'URL (key) de l'avatar qui a les droits (parce que pour moi l'UUID ça se rapporte plutôt aux textures). Mais le script indique qu'il y a une erreur.

Edition : il y a sûrement une erreur, car si je copie/colle le script tel quel sur SL, j'ai un message d'erreur.

Dernière modification par Nastia ; 30/05/2019 à 15h52.
Ooops, effectivement sur SL il ne passe pas tel quel, il y a un erreur de typecast.

Elle se situe à la ligne if (~llListFindList(users, user))
qui est à remplacer par if (~llListFindList(users, [user]))
car nous comparons 2 listes et que SL est plus stricte que OS.

Pour info, les uuids sont utilisés pour de nombreuses choses sur SL comme sur OS, pas uniquement les textures ...
Par exemple, les sons, les objects, les animations, les notescards, les régions, les parcelles, les groupes, les avatars, etc etc etc ...
Citation :
Publié par djphil
Ooops, effectivement sur SL il ne passe pas tel quel, il y a un erreur de typecast.

Elle se situe à la ligne if (~llListFindList(users, user))
qui est à remplacer par if (~llListFindList(users, [user]))
car nous comparons 2 listes et que SL est plus stricte que OS.

Pour info, les uuids sont utilisés pour de nombreuses choses sur SL comme sur OS, pas uniquement les textures ...
Par exemple, les sons, les objects, les animations, les notescards, les régions, les parcelles, les groupes, les avatars, etc etc etc ...
Merci pour ta réponse. Comment mettre dans le script le nom de la personne autorisée à agir sur l'objet ?
Le nom de/des personne(s) autorisée(s) peut se mettre à plusieurs endroits.
Tout dépend de ce que tu veux en faire en fait ...
Dis m'en d'avantage et je te répondrai plus précisément.
L'avantage des uuids c'est qu'ils sont uniques.
Citation :
Publié par djphil
Le nom de/des personne(s) autorisée(s) peut se mettre à plusieurs endroits.
Tout dépend de ce que tu veux en faire en fait ...
Dis m'en d'avantage et je te répondrai plus précisément.
L'avantage des uuids c'est qu'ils sont uniques.
C'est très simple : je souhaite tout simplement que l'objet envoie son message dans le chat lorsque la personne autorisée ou moi (et personne d'autre) clique sur elle.

Je te remercie pour tes efforts.
Et bien le script le fait déjà ... mais sur base des uuids, pas des noms.
Si tu préfères utiliser les noms il faut modifier le script un chouilla.
Code:
list phrases = [
    "salut!",
    "ça roule ?",
    "ma poule :)"
];

list users = [
    "NOM_AUTORISE",
    "NOM_AUTORISE",
    "NOM_AUTORISE",
    ""
];

integer sayto = FALSE;
integer counter;
integer count;

default
{
    state_entry()
    {
        users += [llKey2Name(llGetOwner())];
        count = llGetListLength(phrases);
    }
    
    touch_start(integer n)
    {
        if (~llListFindList(users, [llDetectedName(0)]))
        {
            if (sayto) llRegionSayTo(llDetectedKey(0), PUBLIC_CHANNEL, llList2String(phrases, counter));
            else llSay(PUBLIC_CHANNEL, llList2String(phrases, counter));
            counter = (counter + 1) % count;
        }
    }
}
Citation :
Publié par djphil
Et bien le script le fait déjà ... mais sur base des uuids, pas des noms.
Si tu préfères utiliser les noms il faut modifier le script un chouilla.
Code:
list phrases = [
    "salut!",
    "ça roule ?",
    "ma poule :)"
];

list users = [
    "NOM_AUTORISE",
    "NOM_AUTORISE",
    "NOM_AUTORISE",
    ""
];

integer sayto = FALSE;
integer counter;
integer count;

default
{
    state_entry()
    {
        users += [llKey2Name(llGetOwner())];
        count = llGetListLength(phrases);
    }
    
    touch_start(integer n)
    {
        if (~llListFindList(users, [llDetectedName(0)]))
        {
            if (sayto) llRegionSayTo(llDetectedKey(0), PUBLIC_CHANNEL, llList2String(phrases, counter));
            else llSay(PUBLIC_CHANNEL, llList2String(phrases, counter));
            counter = (counter + 1) % count;
        }
    }
}
Merci. Il faudra juste que tu m'expliques comment récupérer l'UUID d'un avatar et où intégrer cette donnée dans le script.

PS : je serai absente ces prochains jours et ne pourrai répondre à la suite de ce post. :-)
Répondre

Connectés sur ce fil

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