All pastes #2091870 Raw Edit

Stuff

public text v1 · immutable
#2091870 ·published 2011-10-20 13:57 UTC
rendered paste body
integer channelGESTURE=1;  // CANAL D'ECOUTE DE LA GESTURE
integer channelRLV;       // CANAL UTILISE POUR LE RLV
integer strip=FALSE;      // ETAT DU CLICK GAUCHE DE LA SOURIS FALSE=NON PRESSE TRUE =PRESSE

list request;            // Stockage des handle de listen rlv en cas de fort lag

default
{
    state_entry()
    {
           // Ouverture du canal d'ecoute de la gesture, on ne stocke pas le handle
           // vue que forcement l'on devra ecouter tout le temps
           llListen(channelGESTURE,"",NULL_KEY,"");
         // requete pour avoir l'autorisation de recevoir le click souris
              llRequestPermissions(llGetOwner(), PERMISSION_TAKE_CONTROLS);
        }

    touch_start(integer total_number)
    {
        llSay(0, "Touched.");
    }
    
    
    listen(integer channel, string name, key id, string msg)
    {
        
     // Si l'on est sur le canal de dialoge avec les gestures
      if (channelGESTURE == channel) {
             // Determiner un canal rlv en se basant sur le nombre de sec depuis 1970
             // avantage forcement positif 
             channelRLV=llGetUnixTime(); 
             // stocker dans une liste le canal, le message c'est a dire le rep sur lequel on travail puis le handle pour fermer le listen
             request=request+[channelRLV,msg,llListen(channelRLV,"",llGetOwner(),"")];
              // Lancer l'appel pour avoir l'inventaire
             llOwnerSay("@getinvworn:"+msg+"="+(string) channelRLV);
              //  on retourne chez papa maman en attendant la reponse
             return;
        }
        
        // rechercher si ce que l'on recoit est en rapport avec une de nos demandes
        // histoire de gerer les sims laggy
        integer i=llListFindList(request,[channel]);
        // Preparer une string pour recuperer le rep sur lequel on travail
        string reptraitement;
        // si -1 c'est que ce n'est pas un dialogue initié par nous et pourquoi que l'on ecoute d'abord ?
        if ( i== -1) return;
        
        // fermer le canal en extrayant le handle  suivant comme nous l'avons stockés
        llListenRemove(llList2Integer(request,i+2));
        // recupereration du rep sur lequel nous travaillons lors de l'appel de la gesture
        reptraitement=llList2String(request,i+1)+"/";
        // destruction de la pile des données puisque nous sommes pret à traiter
        request=llDeleteSubList(request,i,i+2);
        
        // transformons la reponse en liste 
        list temp=llParseString2List(msg,[",","|"],[]);
        
        // regardons si nous avons un dossier que nous portons integralement
        integer iweared=llListFindList(temp,["30"]);
        
        // Non ? Donc on s'en va. On pourrait aussi regarder ici si la touche est 
        // pressé et considere qu'en fait puisque nous portons rien c'est que nous volions porter
        // qqe chose mais je m'enfonce, laissons tomber
        if (iweared == -1) return;
        
        // Demandons à enelver tout ce que l'on portait dans le fameursx repertoire
         llOwnerSay("@detachall:"+reptraitement+llList2String(temp,iweared-1)+"=force");
         
         // Si le click souris est enfoncé en fait nous ne voulosn pas changer mais uniquement
         // nous deshabiller donc on arrete
        if (strip==FALSE) {
            // Ajoutons +1 pour passer au repoertoire suivant
           iweared=iweared+1; 
            // Verifions que nous n'etions pas sur le dernier. Si oui revenir au premier
           if (iweared >= llGetListLength(temp)) iweared=1;
           // Envoyer l'ordre de nous habiller avec le repertoire
           llOwnerSay("@attachallover:"+reptraitement+llList2String(temp,iweared)+"=force");
        }
        
        // ligne de debug
        llOwnerSay(llDumpList2String (temp,"****:") );
    }

    run_time_permissions(integer perm)
    {
        // validons la permission et indiquons ce que nous devons surveiller.
        integer controls =  CONTROL_LBUTTON ;
        if(perm & PERMISSION_TAKE_CONTROLS) llTakeControls(controls, TRUE, FALSE);
    }
    
    control(key id, integer held, integer change) {
        // stockons dans strip le fait que nous enfoncions ou non nla touche.
        integer pressed = held & change;
        integer down = held & ~change;
        integer released = ~held & change;
        integer inactive = ~held & ~change;

        if (pressed & CONTROL_LBUTTON) strip=TRUE;
        if (released & CONTROL_LBUTTON) strip=FALSE;
    }
}