mercredi 6 février 2008

llEjectFromLand


La foction du jour, llEjectFromLand est assez explicite elle permet d'ejecter un avatar de son terrain.
En la combinant avec Sensor, nous avons fait notre petite alarme maison.
La fonction ne prends que un seul paramètre une Key qui est la personne qui doit etre éjecté.

default
{
    state_entry()
    {
        //verifie la présence d'avatar dans un rayon de 50m toute les 30 sec
        llSensorRepeat("",NULL_KEY,AGENT,50,TWO_PI,30);
    }


    sensor(integer total_number)
    {
        //l'evenement sensor fonctionne comme touch et fournie le nombre de personnes detectées
        integer i;
        //on boucle sur toutes les personnes detectés
        for(i=0;i<total_number;i++)
        {
            // si la personne detecté n'est pas le propriétaire on lui donne un avertissement
            if(llDetectedKey(0)!=llGetOwner())
            {
                // la fonction du jour
                llEjectFromLand(llDetectedKey(0));
            }
        }
    }
}

mardi 5 février 2008

llSensorRepeat


La fonction llSensorRepeat est strictement identique à la fonction sensor que nous avons vu hier, ca particularité:
Elle possède un paramètre supplémentaire qui est la régularité d'excution qui est fixé en seconde.
Ainsi vous pouvez detecter de manière répétitive une cible. Comme une porte de supermarché qui attends que quelqu'un s'approche pour s'ouvrir



default
{
    state_entry()
    {
         //la fonction du jour
        llSensorRepeat("",NULL_KEY,AGENT,50,TWO_PI,30);
    }


    sensor(integer total_number)
    {
        //l'evenement sensor fonctionne comme touch et fournie le nombre de personnes detectées
        int i;
        //on boucle sur toutes les personnes detectés
        for(i=0;i<total_number;i++)
        {
            // si la personne detecté n'est pas le propriétaire on lui donne un avertissement
            if(llDetectedKey(0)!=llGetOwner())
                llSay(PUBLIC_CHANNEL,"vous n'etes pas le proprietaire, partez");
        }
    }
}

lundi 4 février 2008

llSensor


La fonction llSensor est très puissante. Elle permet de detecter differentes choses dans une zone. Il faut parcontre l'utiliser avec mesure car elle génère du lag. Elle est très utilisé pour les alarmes qui est un peu le principe de notre script.
La fonction prends 5 paramètres:
Un string qui est le nom de la personne ou objet rechercher
Une key de la personne ou objet rechercher
Un integer qui est le type de chose recherché, object agent...
Un integer qui est la portée qui ne peut excéder 96m (ce qui est gigantesque, utiliser des distances trees courtes)
Et pour fini l'arc, il s'agit de l'angle exprimé en radiant dans notre cas il recherche dans une sphère

default
{
    touch_start(integer total_number)
    {
        //la fonction d jour
       llSensor("",NULL_KEY,AGENT,50,TWO_PI);
    }
    sensor(integer total_number)
    {
        //l'evenement sensor fonctionne comme touch et fournie le nombre de personnes detectées        
        int i;
        //on boucle sur toutes les personnes detectés        
        for(i=0;i<total_number;i++)        
        {
            // si la personne detecté n'est pas le propriétaire on lui donne un avertissement
            if(llDetectedKey(0)!=llGetOwner())
                llSay(PUBLIC_CHANNEL,"vous n'etes pas le proprietaire, partez");
        }
    }
}

mardi 29 janvier 2008

llPlaySound


Le lsl permet aussi de jouer du son, c'est ce que fais la fonction du jour, Nous allons essayer de rentrer dans une thématique musical.
 llPlaySound prend deux paramètres, un string qui est le nom du son et un float qui est le volume, le son varie de 0 à 1.
Notre programme permet de lire le premier son de l'inventaire quand on lance notre programme


default
{
    state_entry()
    {
        //recupère le premier son de l'iventaire
        string son=llGetInventoryName(INVENTORY_SOUND,0);

        //la fonction du jour
        llPlaySound(son,0.8);
    }

}

jeudi 24 janvier 2008

llListenControl


llListenControl permet d'activer ou de desactiver l'ecoute d'un channel, on avait déjà vu que ce système etait possible avec llRemoveListen.
Cette fonction présente un gros interet voir une nécéssité quand on ecoute le channel publique. Tout simple parcequ'il y a enorment de message qui passe sur ce channel donc beaucoup de travail pour le script.
Les listen sur le channel public font énormement laguer; Il faut bien comprendre qu'il ne sert à rien d'ecouter un channel pour rien.
Donc soit on le remove car on en a besoin qu'une fois soit control si c'est répétitif mais temporaire.
La fonction prends deux paramètres:
Un integer qui permet d'identifier le listen cette valeur nous est retourné par llListen
et un True/False pour arreter ou relancer l'ecoute

integer KeyListen;

default {
    state_entry()
    {
        // ecoute le channel public
        KeyListen = llListen(PUBLIC_CHANNEL, "", NULL_KEY, "");
    }

    touch_start(integer total_number)
    {
        // la fonction du jour
        llListenControl(KeyListen, TRUE);
    }
   
    listen(integer channel, string name, key id, string message)
    {
        if (message == "off")
            llListenControl(KeyListen, FALSE);
        else
        //affiche en float text le contenu du chat public
            llSetText(message,<1.0,1.0,1.0>,1.0);        
    }
}