top of page

 

Difficulté (de simple 1, à dur 5) :  3

 

Objet: réaliser un système qui mémorise l'autorisation d'animer et de remplacer l'ao pour un avatar sur une région donnée sans avoir à donner un objet à la personne.

 

 

Constitution :

Il est constitué de 2 parties et  3 scripts différents  (script a b et c). 

 

  1. Un serveur qui contiendra les scripts B et C ou plus précisement 1 script B et X scripts C.  La valeur de X dépendant du nombre de personne dont ont désire mémoriser l'autorisation d'animer ou de remplacer leur ao.

  2. Un declencheur, qui est un objet attaché à l'avatar ou en persistance qui sur un evenement (un touch par exemple) lancera l'appel au serveur pour jouer une animation ou mettre en place un ao. Ce sera le travail du script A

 

Synoptique de fonctionnement :

 

L'avatar touche le declencheur. Le declencheur contacte le serveur. Le serveur verifie si il connait déjà l'avatar

  • ​si non, il demande l'autorisation d'animer. L'autorisation est mémorisée, elle restera valable 4 jours. puis il informe le declencheur qu'il a l'autorisation.  Le declencheur renvoit au serveur l'animation a jouer ou l'ao a mettre en place.

  • si oui, le serveur indique au declencheur qu'il connait déjà l'avatar et qu'il est pret. Le declencheur renvoit au serveur l'animation à jouer ou l'ao à mettre en place.

 

 

 Le declencheur :

Créer un objet (un cube si vous voulez).  Recopier le script suivant :

 

 

 

 Le serveur :

Créer un objet (un cube si vous voulez). Recopier le script suivant :

Script B

 

// (c) naofan teardrop 2015 Sous licence GPL V2

 

integer nbanimator;  // Nombre total de programme d'animation dont je dispose

integer freeanimator;  // Nombre d'animateur disponible dont je dispose

 

// Affiche sur le serveur quelques informations de base

titler()

{

    string phrase="Animator The Shibuya Experiment.\nAnimator :"+(string) nbanimator+"/"+(string) freeanimator;

    llSetText( phrase,<0.0,1.0,0.0>,42);

}

 

// Determiner un entier a partir de donnée alphanumérique a partir d'une donnée aisement retrouvable par d'autres scripts

 

integer keytoint(string inkey)

{

    return (integer)("0x" + llGetSubString(llMD5String(inkey,0), 0, 7));   

}

 

 

default

{

    // Evenement d'entrée. Il est généré uniquement à la création du script. ou bien en cas de reset.

    state_entry()

    {

       // Ouvrir un canal d'ecoute. Comme nous ne savons pas quand il devra agir, il n'y a pas de timer. Il est en ecoute

       // permanente. Gourmand mais unique.

        llListen(keytoint(llGetRegionName() ),"",NULL_KEY,"");

       // Compter lenombre de script présent en moi pour savoir combien j'ai d'animateur. J'enleve 1 car je ne dois pas me compter dedans

       //  Puis mettre la variable du nombre d'naimateur a zero. Terminer par mettre à jour le titre au de moi.

        nbanimator=llGetInventoryNumber(INVENTORY_SCRIPT)-1;

        freeanimator=0;

        titler ();

       

       // Declencher un evenement dans 3 secodnes pour verifier si les animateurs présent connaissent ou non déjà quelqu'un et 

       // donc mettre à jour le nombre d'animateur disponible.

        llSetTimerEvent(3.0);

        titler ();

    }

 

    // Evenement d'entrée en persistance. Je viens de naitre dans ce monde, donc je me reinitialise. Brrrr /me bave blabllll tirage de langue. Je veux un biberon.

    on_rez (integer param)

    {

       

       llResetScript();

 

    }

 

    // Evenement d'ecoute. Nous avons ouvert un canal. Tout ce qui se dira dessus arrivera ici.

   

    listen (integer channel, string name, key id, string str)

    {

       // Transformer le texte que je viens de recevoir en plusieurs elements. Pour cela j'utilise la virgule pour separer chaque partie.

       // Cet evenement se produit quand quelqu'un a besoin d'une animation

         list temp=llCSV2List(str);

        // Structure d'un message

        // COMMANDE,QUI EST LE DEMANDEUR,OPTIONS

        // Exemple si l'avatar 3adc096e-fd6e-49ff-a794-0aa697afcb37 demande a avoir accés a l'AO pets la commande recut serait:

        //  AO-ON,3adc096e-fd6e-49ff-a794-0aa697afcb37,pets

        //  La premier commande que l'on recoit est toujorus ASK et ne contient que deux parametres. ASK et Le demandeur.

      

        if (llList2String(temp,0)=="STOPANIMATION")  llMessageLinked(LINK_THIS,0,llList2String(temp,0)+","+llList2String(temp,2),llList2String(temp,1) ); 

        if (llList2String(temp,0)=="ASK")  llMessageLinked(LINK_THIS,0,llList2String(temp,0)+","+llList2String(temp,2),llList2String(temp,1) ); 

        if (llList2String(temp,0)=="PLAY" || llList2String(temp,0)=="EMOTE" ) llMessageLinked(LINK_THIS,0,llList2String(temp,0)+","+llList2String(temp,2),llList2String(temp,1) ); 

        if (llList2String(temp,0)=="AO-ON" || llList2String(temp,0)=="AO-OFF" ) llMessageLinked(LINK_THIS,0,llList2String(temp,0)+","+llList2String(temp,2),llList2String(temp,1) );

                 

    }

    link_message (integer sender,integer num,string str,key id)

   {

       

       if (str=="REMOVEME") { freeanimator++;   titler (); return; }

 

       list temp=llCSV2List(str);

       

       if (llList2String(temp,0)=="ACCEPTED" || llList2String(temp,0)=="IHAVE" ) {

          if (llList2String(temp,0)!="IHAVE") { freeanimator++; titler(); }

           

           llRegionSayTo((key) llList2String(temp,1),keytoint( llList2String(temp,1) ),llList2String(temp,0));

       }

    

       if (llList2String(temp,0)=="REFUSED" ) {

           llRegionSayTo((key) llList2String(temp,1),keytoint( llList2String(temp,1) ),"REFUSED");

       }       

       

   

   }

    

    timer()

    {

        integer i;

        freeanimator=0;

        for (i=0; i < nbanimator; i++)  llMessageLinked(LINK_THIS,i,"VERIFICATION",llGetKey() );`

           llSetTimerEvent(3600.0);

    }

    

}

 

 

 

 

Def:

Ao : Animation Overrider. A pour fonction de jouer automatiquement certaines animations dans des circonstances d'habitudes (par exemple, marcher, se tenir debout, courrir, s'assoir par terre etc etc).

bottom of page