Script follower utilisant llGetObjectDetails

Répondre
Partager Rechercher
Hello all !

Je post ici un exemple de follower script utilisant la fonction llGetObjectDetails (nécessite aucun sensor/sensorRepeat). llGetObjectDetails a une particularité attirante, elle n'a aucune limite de distance de detection à partir du moment ou la cible se trouve dans la sim ou une autre voisine.

Voici le code :

Code:
//Votre follower ne doit pas être physic
//Si vraiment vous voulez utiliser un objet physic pour ce follower tournez vous vers
// la fonction llMoveToTarget à la place de warpPos/llSetPos().
// Script crée par BlackShade Nightfire à titre d'exemple
 
warpPos( vector destpos )
{
 integer jumps = (integer)(llVecDist(destpos, llGetPos()) / 10.0) + 1; 
 
    if (jumps > 100 ) 
        jumps = 100;    
    list rules = [ PRIM_POSITION, destpos ]; 
    integer count = 1; 
    while ( ( count = count << 1 ) < jumps) 
        rules = (rules=[]) + rules + rules;   
    llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) ); 
}
initialisation()
{
    UUID = llGetOwner();    // mettre l'uuid de votre objet ou celui d'un avatar
    defautPos = llGetPos();     //definir la position de defaut du follower pour y revenir quand la cible est non-detectée
 
    llOwnerSay("Following target UUID : " + (string)UUID);
 
    llSetStatus(STATUS_PHANTOM, TRUE); //definir l'objet phantom afin d'éviter que l'avatar soit poussé continuellement par le follower
 
    llSetTimerEvent(refresh); //démarrage du timer
 
}
integer verifK(key u)
{
    //fonction permettant de vérifier si la cible est détectée ou non
 
        if(llKey2Name(u) != "") return TRUE;
        else return FALSE;
 
}
 
key UUID;
list details;  // list contenant les informations (position, rotation etc...)
vector defautPos;
vector ciblePosition;
rotation cibleRotation;
float refresh = 1.0;  // vitesse de rafraichissement du timer()
default
{
    on_rez(integer s)
    {
        llResetScript();   
    }
    state_entry()
    {
         initialisation();
    }
 
 
    timer()
    {
          if(verifK(UUID))
          {
                //cible trouvée dans la sim  
 
                  details = llGetObjectDetails(UUID, [OBJECT_POS, OBJECT_ROT]); // retournera la position et la rotation dans la liste
                  ciblePosition = llList2Vector(details, 0);
                  cibleRotation = llList2Rot(details, 1);
 
                    warpPos(ciblePosition);  //deplace le prim a la position retournée de la liste
                    llSetRot(cibleRotation);  //rotationne le prim a la rotation retournée de la liste
 
          } 
 
          else
          {
                //cible non trouvée , retour à la position initiale
 
                warpPos(defautPos);    
          }
    }
 
}
Citation :
Salut,

A quoi sert le follower exactement ? Localiser et suivre un avatar ?

Peux tu expliquer et détailler le script, merci.
Salut Anarion.

Damon mon script d'exemple que j'ai posté, ce follower suit un avatar ou un objet, peut importe la distance a laquelle il se trouve du moment qu'il soit dans la sim ou celle à coté.

Si la cible (objet ou avatar) n'est plus detectée, le follower retournera a sa position initiale.

En fait, je voulais montrer une alternative à llSensor et llSensorRepeat pour connaitre la position/rotation d'un objet ou d'un avatar.
Citation :
Woaaa c'est magique ce script ^^

Par contre pour faire un radar qui scan la sim complete avec tout ca...

Celui qui trouve je lui donneuhhh... un carambar!
lol.

llGetObjectDetails peut s'utiliser comme dérivé d'un sensor(Repeat) dans certaines conditions. Apres, pour scanner la sim complète comme tu dis, c'est bien les sensor/sensorRepeat qu'il faut utiliser .

En tout cas, si tu mets à jour les données de ta list de keys récuperées en utilisant des sensor, c'est moi qui te donne un carambar
Citation :
Publié par BlackShade Nightfire
Hello all !

Je post ici un exemple de follower script utilisant la fonction llGetObjectDetails (nécessite aucun sensor/sensorRepeat). llGetObjectDetails a une particularité attirante, elle n'a aucune limite de distance de detection à partir du moment ou la cible se trouve dans la sim ou une autre voisine.
Ton script est super interressant. A propos "de la sim voisine" , tu veux dire : "adjacente" ? Je m'explique : on a 3 sim les une collées aux autres en ligne sim1 sim2 sim3, si je comprend bien , la detection etant posée sur sim1 on peut detecter l'uuid de lobjet en sim2 et non pas en sim3 oui bien la detection se fera aussi en sim3 ?
Ma question : la fonction permet elle de detecter un UUID sur n'importe quelle sim si celle si fait partie d'un groupe de région contigüe ou bien seulement sur les regions adjacentes ?

Ceci dit je vais essayer cela , cest tres interressant , car meme le scanner AV de Thomas Conover ne detecte pas les AV hors de la sim. Et la fonction TP tracker vient detre limitée aux sims adjacentes par Linden Labs.
Ton script est génial ! Merci.

Sinon pour le changment de script on peut utiliser :

changed(integer change)
{
if(change & CHANGED_REGION)
{
//deplacement vers la sim (desole j'ai aucune sourcesous la main, sites SL interdits par le serveur au boulot)
}
}
Répondre

Connectés sur ce fil

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