un hud de teleportation

Répondre
Partager Rechercher
Bonjour tout le monde!

je souhaite faire un hud de teleportation avec menu , en fonction des landmarks ajouté sur la même sim , en bref je suis sur une sim mais avec un décor a plusieurs niveau et pour me déplacé plus rapidement j'ajoute mes landmarks que j'ai créé a différent endroit, la mon script récupère le nom de mes différents landmarks que j'ai nomé et me les propose en menu , une fois sélectionné sur ce menu j'ai une proposition de téléportation.

je suis a un début de script le menu fonctionne et me propose bien les différents landmark via le menu bleu ....mais comment rédigé la suite ? qui as un exemple ?

Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
 
 
Dialog(key id, list menu)
{
    
llListenRemove(listener);
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
}
 
default
{
    
on_rez(integer num)
    {
        
llResetScript();
    }
 
    
touch_start(integer total_number)
    {
        
integer i 0;
        
MENU1 = [];
        
MENU2 = [];
        
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
        if (
<= 12)
        {
            for (; 
c; ++i)
                
MENU1 += llGetInventoryName(INVENTORY_LANDMARKi);
        }
        else
        {        
            for (; 
11; ++i)
                
MENU1 += llGetInventoryName(INVENTORY_LANDMARKi);
            if(
22)
                
22;
            for (; 
c; ++i)
                
MENU2 += llGetInventoryName(INVENTORY_LANDMARKi); 
            
MENU1 += ">>";
            
MENU2 += "<<";                          
        }
        
Dialog(llDetectedKey(0), MENU1);
    }
 
    
listen(integer channelstring namekey idstring message
    {
        if (
channel == MENU_CHANNEL)
        {
            
llListenRemove(listener);  
            if (
message == ">>")
            {
                
Dialog(idMENU2);
            }
            else if (
message == "<<")
            {
                
Dialog(idMENU1);
            }        
            else                    
            {
                
llSay(0"comment faire ici ?");
            }      
        }
    }  

d'avance merci pour vos réponses.
Pour chaque menu, il faut que tu génères une deuxième liste en parallèle, contenant les coordonnées du vecteur destination correspondant.
Par précaution, il est bon de tronquer les noms de landmarks à 24 caractères, pour éviter un script error si les noms des boutons dépassent la limite de 24 caractères.
Code PHP:

list ldest1;
list 
ldest2;

    (...)
    
    
touch_start(integer total_number)
    {
     (...)
        else
        {        
            for (; 
11; ++i)
                    {
               
MENU1 += llGetSubString(llGetInventoryName(INVENTORY_LANDMARKi), 023);
                    
ldest1 += [ coordonness de destination à définir ]
                    }
            if(
22)
                
22;
            for (; 
c; ++i)
                    {
               
MENU2 += llGetSubString(llGetInventoryName(INVENTORY_LANDMARKi), 023);
                    
ldest2 += [ coordonness de destination à définir ]
                    }
            
MENU1 += ">>";
            
MENU2 += "<<";                          
        }
        
Dialog(llDetectedKey(0), MENU1);
    } 
Ensuite, quand on clique le nom d'un LM, on récupère les coordonnées stockées dans la liste correspondante, et on envoie le TP.
Code PHP:

    listen(integer channelstring namekey idstring message
    {
        if (
channel == MENU_CHANNEL)
        {
            
llListenRemove(listener);  
            if (
message == ">>")
            {
                
Dialog(idMENU2);
            }
            else if (
message == "<<")
            {
                
Dialog(idMENU1);
            }        
            else                    
            {
            
integer index llListFindList(MENU1, [message]);
                if (
index != -1
                    {
                    
vector vposition llList2Vector(ldest1,index);
                    
llTeleportAgent(llGetOwner(), ""vposition, <128.0,128.0,0.0> );
                    }
                else
                    {
                    
index llListFindList(MENU2, [message]);
                    if (
index != -1
                        {
                        
vector vposition llList2Vector(ldest1,index);
                        
llTeleportAgent(llGetOwner(), ""vposition, <128.0,128.0,0.0> );
                        }
                    }
            }      
        }
    } 
Je suis parti du principe que tu étais déjà sur la sim de destination. Sinon, il faudra remplacer le "" dans l'ordre de TP par les coordonnées globales de la sim.
Autre chose : pour pouvoir te téléporter, il faudra, au démarrage du script, demander l'autorisation de téléporter, par un llRequestPermissions
http://wiki.secondlife.com/wiki/LlTe...ntGlobalCoords
on peux téléporter directement avec le LM dans l'inventaire.
Code PHP:

            key avatar llDetectedKey(0);
            
string lm llGetInventoryName(INVENTORY_LANDMARK,0);
            if( 
lm!=""
                
llTeleportAgent(avatarlm, <0.00.00.0>, <0.00.00.0>); 
cela teleporte directement au coordonnées du landmark
__________________
Paris 1900
http://www.paris1900.net
déjà merci de vos réponses et informations ;-)

"on peux téléporter directement avec le LM dans l'inventaire."

voila justement le but de ce hud, avoir différents lm de la même sim ou l'on ce trouve deja et que tout le monde ajoute en fonction des besoins dans le prim du hud , le tout donc sans avoir a paramétré le script lui même ... de la j'ai une liste dans un menu bleu des lm que j'ai ajouté et si je clic sur un dans la liste il m'ouvre une proposition de tp ...

Simple sur le papier mais la ,j’avoue, que malgré vos infos ....pour la mise en forme , j'arrive a rien

Dernière modification par mappa story ; 16/05/2015 à 15h04.
Autant pour moi, c'est le troisième paramètre vector position qui m'a perturbé, il est en effet ignoré si on utilise un LM.
Du coup ça simplifie les choses. Il suffit de mémoriser le nom du LM dans la deuxième liste, en même temps que le nom tronqué dans le menu.

Attention tout de même au
Code PHP:

key avatar llDetectedKey(0);
(...)
llTeleportAgent(avatar... 
Ca marche uniquement si avatar est l'UUID du propriétaire. Ce qui ne devrait cependant pas poser de problème si l'objet est porté en HUD.

Voilà une version complète, avec gestion des listes, et aussi les permissions (indispensables).
Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
key kowner;
list 
ldest1;
list 
ldest2;

Dialog(key id, list menu)
{
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
     
llSetTimerEvent(60.0);
}

stop_menu()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(listener);
}

faire_liste()
{
    
integer i 0;
    
MENU1 = [];
    
MENU2 = [];
    
ldest1 = [];
    
ldest2 = [];
    
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
    if (
<= 12)
        {
        for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
        }
    else
        {        
        for (; 
11; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
      if(
2222;
      for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU2 += llGetSubString(LM023);
            
ldest2 += [LM];
            }
      
MENU1 += ">>";
      
MENU2 += "<<";                          
      }
}

teleport(integer index, list ldest)
{
    
llTeleportAgent(kownerllList2String(ldest,index), <0.0,0.0,0.0>, <128.0,128.0,0.0> );
}

default
{
    
state_entry()
    {
    
state permissions;
    }
}

state permissions
{
    
state_entry()
    {
    
kowner llGetOwner();
    
llRequestPermissions(kownerPERMISSION_TELEPORT);
    }

   
run_time_permissions(integer perm)
   {
   if (
perm PERMISSION_TELEPORT)  
        {
        
faire_liste();
        
state ready;
        }
   }
    
    
on_rez(integer n)
    {
    
state default;
    }
}

state ready
{
    
touch_start(integer total_number)
    {
    if (
llDetectedKey(0) == kownerDialog(kownerMENU1);
    }
    
    
listen(integer channelstring namekey idstring message
    {
    
stop_menu();
    if (
message == ">>")         Dialog(idMENU2);
    else if (
message == "<<")     Dialog(idMENU1);
    else
        {
        
integer index llListFindList(MENU1,[message]);
        if (
index != -1teleport(indexldest1);
        else
            {
            
index llListFindList(MENU2,[message]);
            if (
index != -1teleport(indexldest2);
            }
        }
    }
    
    
timer()
    {
    
stop_menu();
    }
    
    
changed(integer change)
    {
    if (
change CHANGED_INVENTORY)
        {
        
stop_menu();
        
faire_liste();
        }
    }

on peu chipoter ?
Code PHP:

   listener llListen(MENU_CHANNEL""NULL_KEY""); 



on peu limiter un chouillat le lag en écoutant que le proprio. pas la peine que le listen ecoute tout le monde


Code PHP:

   listener llListen(MENU_CHANNEL""llGetOwner(), ""); 

ok je chipote.
__________________
Paris 1900
http://www.paris1900.net
exellent merci a vous ...mais piou ... possible ou pas de contouné " llRequestPermissions(kowner, PERMISSION_TELEPORT);"? ou pas du tout? ...car autant sur second life tout fonctionne tres bien autant sur open sim ( justement la ou j'en ai besoin ...) j'ai un message d'erreur avec "PERMISSION_TELEPORT"....

https://forums.jeuxonline.info/attachment.php?attachmentid=246556&amp;stc=1&amp;d=1431790555
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : Image 2.png
Taille : 502x583
Poids : 68,6 Ko
ID : 246556  
boooah, j'aurais plutôt dit que tu es mesquin
Le fait que tu introduises une variable avatar, à laquelle tu affectes la valeur de l'UUID de celui qui touche l'objet, me semblait incongru, étant donné que ça ne marche que pour le propriétaire. Non seulement incongru, mais surtout ça pouvait donner l'idée à certains d'utiliser ce script non pas dans un hud, mais comme teleporter à usage public, dans un objet rezzé inworld.

L'objet de ma remarque était simplement d'avertir ceux qui seraient naturellement tentés de faire ça, que ça ne marchait pas.

La ligne de code que tu reprends, fait partie d'une fonction que j'ai reprise quasiment tel quel dans le script original de mappa. Si on veut chipoter, il y a bien d'autres remarques qu'on peut faire. Je ne me suis pas amusé à réécrire tout le script à ma sauce. Ce n'était pas le but.

Faut pas être susceptible comme ça.


(Edit, suite à la réponse que mappa a donnée pendant que j'écrivais)
Ah là, c'est un autre problème. Il fallait le dire tout de suite que c'était pour opensim, et non SL.
Le lsl de SL et celui d'opensim ont des différences non négligeables. Dans SL, ça fonctionne. Si tu veux l'utiliser sur opensim, il faut que tu regardes les spécificités du langage. Il est même possible que l'instruction llTeleportagent n'existe pas, purement et simplement.
Je ne peux pas te répondre là dessus.

Dernière modification par black cats ; 16/05/2015 à 17h47.
Citation :
Publié par mappa story
exellent merci a vous ...mais piou ... possible ou pas de contouné " llRequestPermissions(kowner, PERMISSION_TELEPORT);"? ou pas du tout? ...car autant sur second life tout fonctionne tres bien autant sur open sim ( justement la ou j'en ai besoin ...) j'ai un message d'erreur avec "PERMISSION_TELEPORT"....
oui un bug connu sur Opensim
integer PERMISSION_TELEPORT = 0x1000
remplace le PERMISSION_TELEPORT par 0x1000 :

Cf: http://opensimulator.org/mantis/view.php?id=6497
__________________
Paris 1900
http://www.paris1900.net
Citation :
Ah là, c'est un autre problème. Il fallait le dire tout de suite que c'était pour opensim, et non SL.
Le lsl de SL et celui d'opensim ont des différences non négligeables. Dans SL, ça fonctionne. Si tu veux l'utiliser sur opensim, il faut que tu regardes les spécificités du langage. Il est même possible que l'instruction llTeleportagent n'existe pas, purement et simplement.
Je ne peux pas te répondre là dessus.
Oui déjà sur sl le lsl ne me semblais pas simple ....mais sur open ..... ppfffff je suis souvent découragé , mais par contre j'ai vérifié l'instruction llTeleportagent existe ....donc j'ai espoir d'y arrivé^^
oui ;-) la en tout cas j'avance bon juste qu'il me tp toujours dans le même coin de la sim ... je vous tien au courant dés que je trouve la solution .... en tout cas merci pour la cogitation collective!
Cliquez ce bouton ou survolez le contenu pour afficher le spoiler
Autant pour moi, c'est le troisième paramètre vector position qui m'a perturbé, il est en effet ignoré si on utilise un LM.


je demandais justement ....il es vraiment ignoré ce paramètre ? non car j'ai testé pas mal de combinaison en écriture différente et .....je suis balancé comme un veille chaussette toujours dans le même coin ...

Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
key kowner;
list 
ldest1;
list 
ldest2;

Dialog(key id, list menu)
{
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
     
llSetTimerEvent(60.0);
}

stop_menu()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(listener);
}

faire_liste()
{
    
integer i 0;
    
MENU1 = [];
    
MENU2 = [];
    
ldest1 = [];
    
ldest2 = [];
    
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
    if (
<= 12)
        {
        for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
        }
    else
        {        
        for (; 
11; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
      if(
2222;
      for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU2 += llGetSubString(LM023);
            
ldest2 += [LM];
            }
      
MENU1 += ">>";
      
MENU2 += "<<";                          
      }
}

teleport(integer index, list ldest)
{
    
llTeleportAgent(kownerllList2String(ldest,index), <0.0,0.0,0.0>, <128.0,128.0,0.0> );
}

default
{
    
state_entry()
    {
    
state permissions;
    }
}

state permissions
{
    
state_entry()
    {
    
kowner llGetOwner();
    
integer PERMISSION_TELEPORT 0x1000;
    
llRequestPermissions(kownerPERMISSION_TELEPORT);
    }
    
   
run_time_permissions(integer perm)
   
   {
   
integer PERMISSION_TELEPORT 0x1000;
   if (
PERMISSION_TELEPORT perm)  
        {
        
faire_liste();
        
state ready;
        }
   }
    
    
on_rez(integer n)
    {
    
state default;
    }
}

state ready
{
    
touch_start(integer total_number)
    {
    if (
llDetectedKey(0) == kownerDialog(kownerMENU1);
    }
    
    
listen(integer channelstring namekey idstring message
    {
    
stop_menu();
    if (
message == ">>")         Dialog(idMENU2);
    else if (
message == "<<")     Dialog(idMENU1);
    else
        {
        
integer index llListFindList(MENU1,[message]);
        if (
index != -1teleport(indexldest1);
        else
            {
            
index llListFindList(MENU2,[message]);
            if (
index != -1teleport(indexldest2);
            }
        }
    }
    
    
timer()
    {
    
stop_menu();
    }
    
    
changed(integer change)
    {
    if (
change CHANGED_INVENTORY)
        {
        
stop_menu();
        
faire_liste();
        }
    }

je ne pense pas avoir raté quel que chose ....

j'ai testé aussi :
llTeleportAgent(kowner, llList2String(ldest,index), <0.0,0.0,0.0>, <0.0,0.0,0.0> );

aussi

llTeleportAgent(kowner, llList2String(ldest,index), "", "" );

et la j'ai mal au crane
Citation :
Publié par mappa story
j'ai testé aussi :
llTeleportAgent(kowner, llList2String(ldest,index), <0.0,0.0,0.0>, <0.0,0.0,0.0> );
le 3 eme parametres sont les Coordonnées Vector de la position sur la sim. apparement sur Opensim ce parametres ne serait pas ignoré.
sur SL les coordonnées sont fournis pas le LM, mais sur Open il ne prend en compte que le nom de la sim.

place des coordonnées pour tester <128,128,50> par exemple

le Quatrieme parametre est la direction de ton lookat.
__________________
Paris 1900
http://www.paris1900.net
je te le confirme, si j'ajoute les coordonnées pour tester <128,128,50>, il ne prend pas en compte les infos du lm mais uniquement les coordonnées , ce qui veu dire que pour ce qui es d'open sim ce que je demande la me semble impossible , je suis déçu

plan b , je vais faire la même chose mais avec des coordonnées a enregistré directement dans le script ....d'un coup bien moins pratique mais bon....

Merci a vous de votre aide en tout cas!
me revoilà ^^

je reviens vers vous car j'ai peut être après cogitation collective sur open sim trouvé une solution détourné mais je n'arrive pas a fusionné les deux idées

l'idée de black cats :

Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
key kowner;
list 
ldest1;
list 
ldest2;

Dialog(key id, list menu)
{
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
     
llSetTimerEvent(60.0);
}

stop_menu()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(listener);
}

faire_liste()
{
    
integer i 0;
    
MENU1 = [];
    
MENU2 = [];
    
ldest1 = [];
    
ldest2 = [];
    
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
    if (
<= 12)
        {
        for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
        }
    else
        {        
        for (; 
11; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
      if(
2222;
      for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU2 += llGetSubString(LM023);
            
ldest2 += [LM];
            }
      
MENU1 += ">>";
      
MENU2 += "<<";                          
      }
}

teleport(integer index, list ldest)
{
    
llTeleportAgent(kownerllList2String(ldest,index), <0.0,0.0,0.0>, <128.0,128.0,0.0> );
}

default
{
    
state_entry()
    {
    
state permissions;
    }
}

state permissions
{
    
state_entry()
    {
    
kowner llGetOwner();
    
llRequestPermissions(kownerPERMISSION_TELEPORT);
    }

   
run_time_permissions(integer perm)
   {
   if (
perm PERMISSION_TELEPORT)  
        {
        
faire_liste();
        
state ready;
        }
   }
    
    
on_rez(integer n)
    {
    
state default;
    }
}

state ready
{
    
touch_start(integer total_number)
    {
    if (
llDetectedKey(0) == kownerDialog(kownerMENU1);
    }
    
    
listen(integer channelstring namekey idstring message
    {
    
stop_menu();
    if (
message == ">>")         Dialog(idMENU2);
    else if (
message == "<<")     Dialog(idMENU1);
    else
        {
        
integer index llListFindList(MENU1,[message]);
        if (
index != -1teleport(indexldest1);
        else
            {
            
index llListFindList(MENU2,[message]);
            if (
index != -1teleport(indexldest2);
            }
        }
    }
    
    
timer()
    {
    
stop_menu();
    }
    
    
changed(integer change)
    {
    if (
change CHANGED_INVENTORY)
        {
        
stop_menu();
        
faire_liste();
        }
    }

mais voila sur open le calcul via une liste avec "llTeleportAgent" pose problème mais par contre avec "llMapDestination" le système fonctionne , il ouvre donc la carte de destination mais cela me semble un moindre mal si j'arrive a combiné les deux avec genre ce script :

Code PHP:

 string gStrLMN/*//-- String of Landmark Name --//*/
vector  gPosLoc/*//-- Position of Location --//*/
key     gKeySec/*//-- Key for Security checking dataserver calls --//*/

default{
    
state_entry(){
        
gStrLMN llGetInventoryName(INVENTORY_LANDMARK0);
        
gKeySec llRequestInventoryDatagStrLMN );
    }
    
    
changed(integer chg){
        if(
chg CHANGED_INVENTORYllResetScript();
    }
    
    
dataserverkey vKeySecstring vStrLoc ){
         
/*//-- verify we're getting our data, not another scripts --//*/
        
if (gKeySec == vKeySec){
             
/*//-- Store/Display New Target --//*/
            
gPosLoc = (vector)vStrLoc llGetRegionCorner();
            
llSetTextgStrLMN, <1.00.00.0>, 1.0 );
        }
    }

    
touch_start(integer total_number){
        
llMapDestinationllGetRegionName(), gPosLoc llGetRegionCorner(), ZERO_VECTOR );
    }

lui nous téléporte bien après la confirmation sur la carte la ou on le souhaite ,donc bon j'ai tenté une fusion des deux script mais ......je sais j'ai créé un truc imbuvable :

Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
key kowner;
list 
ldest1;
list 
ldest2;

 
string gStrLMN/*//-- String of Landmark Name --//*/
vector  gPosLoc/*//-- Position of Location --//*/
key     gKeySec/*//-- Key for Security checking dataserver calls --//*/


Dialog(key id, list menu)
{
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
     
llSetTimerEvent(60.0);
}

stop_menu()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(listener);
}

faire_liste()
{
    
integer i 0;
    
MENU1 = [];
    
MENU2 = [];
    
ldest1 = [];
    
ldest2 = [];
    
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
    if (
<= 12)
        {
        for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
        }
    else
        {        
        for (; 
11; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU1 += llGetSubString(LM023);
            
ldest1 += [LM];
            }
      if(
2222;
      for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
            
MENU2 += llGetSubString(LM023);
            
ldest2 += [LM];
            }
      
MENU1 += ">>";
      
MENU2 += "<<";                          
      }
}

teleport(integer index, list ldest)
{
    
// llMapDestination( string nom_sim, vector position,               vector direction );
     
llMapDestination""gPosLoc llGetRegionCorner(), ZERO_VECTOR );
     
    
// llTeleportAgent( key avatar, string landmark,           vector position, vector look_at ); 
   // llTeleportAgent(kowner      , llList2String(ldest,index), <0.0,0.0,0.0>,  <128.0,128.0,0.0> );
}

default
{
    
state_entry()
    {
        
gStrLMN llGetInventoryName(INVENTORY_LANDMARK0);
        
gKeySec llRequestInventoryDatagStrLMN );
    }
         
dataserverkey vKeySecstring vStrLoc ){
        
        if (
gKeySec == vKeySec){
            
            
gPosLoc = (vector)vStrLoc llGetRegionCorner();
    
state permissions;
    }
}
}
state permissions
{
    
state_entry()
    {
    
kowner llGetOwner();
   
  
   
        
faire_liste();
        
state ready;
        }
   

    
    
on_rez(integer n)
    {
    
state default;
    }
}

state ready
{
    
touch_start(integer total_number)
    {
    if (
llDetectedKey(0) == kownerDialog(kownerMENU1);
    }
    
    
listen(integer channelstring namekey idstring message
    {
    
stop_menu();
    if (
message == ">>")         Dialog(idMENU2);
    else if (
message == "<<")     Dialog(idMENU1);
    else
        {
        
integer index llListFindList(MENU1,[message]);
        if (
index != -1teleport(indexldest1);
        else
            {
            
index llListFindList(MENU2,[message]);
            if (
index != -1teleport(indexldest2);
            }
        }
    }
    
    
timer()
    {
    
stop_menu();
    }
    
    
changed(integer change)
    {
    if (
change CHANGED_INVENTORY)
        {
        
stop_menu();
        
llResetScript();
        
faire_liste();
        }
    }

alors je me demande comment reformulé la soupe .... car la j'ai bien l'ouverture du menu avec la sélection des landmark dans l'objet mais pas d'ouverture de la carte pour confirmer la téléportation en fonction du choix ....donc forcément pas de téléportation !

d’avance merci a vous .
Pour l'acquisition des coordonnées, un bouton pour mémoriser les coordonnées de là ou on se trouve serait en effet une solution propre.

Après, ça soulève de nouveaux problèmes.
Comment vont être nommés les boutons ? Les nommer automatiquement avec le nom de la sim ou de la parcelle ne serait pas la solution, puisque tes destinations se trouvent sur la même parcelle (ou au moins plusieurs des destinations).
Il faudrait alors ajouter la possibilité, dans le menu, de renommer des boutons. Et aussi la possibilité de supprimer sélectivement une destination.

Tout ça est tout à fait faisable. Mais j'ai cru comprendre qu'une de tes préoccupations était de garder une solution simple à scripter, et simple à utiliser (du point de vue de la gestion des destinations).

Dans la mesure ou c'est uniquement pour une utilisation personelle, il reste toujours la solution "bricolage à la Gaston" (faudra pas montrer les bouts de ficelle à qui que ce soit, sous peine de rougir du bricolage infâme )
Tu fais un LM. Tu le renommes en respectant une syntaxe du genre : ma terrasse 47/85/28

Le dernier terme, séparé du reste par un espace, sont les coordonnées sur la sim. Tu le relèves sur la barre du haut de ton viewer (ou par un script qui te le donne dans le chat).
Le reste sera le nom du bouton.

Tu rajoutes deux listes lpos1 et lpos2, pour stocker les vecteurs coordonnées.
Tu stockes alors dans des listes séparées :
1 - le nom du bouton : ma terrasse
2 - le nom du LM : ma terrasse 47/85/28
3 - les coordonnées : <47,85,28>

Et sans oublier de rajouter la ligne donnée par Netpat, pour le bug sur opensim :
integer PERMISSION_TELEPORT = 0x1000

Et tu modifies ta fonction teleport(integer index, list ldest, list lpos)
Si effectivement sur opensim, le deuxième paramètre n'est pas ignoré, ca devrait marcher

Code PHP:

list MENU1 = [];
list 
MENU2 = [];
integer listener;
integer MENU_CHANNEL 1000;
integer PERMISSION_TELEPORT 0x1000;
key kowner;
list 
ldest1;
list 
ldest2;
list 
lpos1;
list 
lpos2;

vector posdest;
string bouton;

Dialog(key id, list menu)
{
    
listener llListen(MENU_CHANNEL""NULL_KEY"");
    
llDialog(id"ho pinaise!"menuMENU_CHANNEL);
     
llSetTimerEvent(60.0);
}

stop_menu()
{
    
llSetTimerEvent(0.0);
    
llListenRemove(listener);
}

faire_dest(string LM)
{
    list 
tlist llParseString2List(LM, [" "],[]);
    list 
lpos llParseString2List(llList2String(tlist,-1), ["/"],[]);
    
posdest = <llList2Float(lpos,0),llList2Float(lpos,1),llList2Float(lpos,2)>;
    
bouton llGetSubString(llDumpList2String(llDeleteSubList(tlist,-1,-1)," "), 023);
}

faire_liste()
{
    
integer i 0;
    
MENU1 = [];
    
MENU2 = [];
    
ldest1 = [];
    
ldest2 = [];
     
lpos1 = [];
     
lpos2 = [];
    
integer c llGetInventoryNumber(INVENTORY_LANDMARK);
    if (
<= 12)
        {
        for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
                
faire_dest(LM);
            
MENU1 += bouton;
            
ldest1 += [LM];
                
lpos1 += [posdest];
            }
        }
    else
        {        
        for (; 
11; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
                
faire_dest(LM);
            
MENU1 += bouton;
            
ldest1 += [LM];
                
lpos1 += [posdest];
            }
      if(
2222;
      for (; 
c; ++i)
            {
            
string LM llGetInventoryName(INVENTORY_LANDMARKi);
                
faire_dest(LM);
            
MENU2 += bouton;
            
ldest2 += [LM];
                
lpos2 += [posdest];
            }
      
MENU1 += ">>";
      
MENU2 += "<<";                          
      }
}

teleport(integer index, list ldest, list lpos)
{
    
llTeleportAgent(kownerllList2String(ldest,index), llList2Vector(lpos,index), <128.0,128.0,0.0> );
}

default
{
    
state_entry()
    {
    
state permissions;
    }
}

state permissions
{
    
state_entry()
    {
    
kowner llGetOwner();
    
llRequestPermissions(kownerPERMISSION_TELEPORT);
    }

   
run_time_permissions(integer perm)
   {
   if (
perm PERMISSION_TELEPORT)  
        {
        
faire_liste();
        
state ready;
        }
   }
    
    
on_rez(integer n)
    {
    
state default;
    }
}

state ready
{
    
touch_start(integer total_number)
    {
    if (
llDetectedKey(0) == kownerDialog(kownerMENU1);
    }
    
    
listen(integer channelstring namekey idstring message
    {
    
stop_menu();
    if (
message == ">>")         Dialog(idMENU2);
    else if (
message == "<<")     Dialog(idMENU1);
    else
        {
        
integer index llListFindList(MENU1,[message]);
        if (
index != -1teleport(indexldest1lpos1);
        else
            {
            
index llListFindList(MENU2,[message]);
            if (
index != -1teleport(indexldest2lpos2);
            }
        }
    }
    
    
timer()
    {
    
stop_menu();
    }
    
    
changed(integer change)
    {
    if (
change CHANGED_INVENTORY)
        {
        
stop_menu();
        
faire_liste();
        }
    }

Dans Open Simulator (OpenSim) il n'est pas obligatoire de demander la permission pour effectuer une téléportation. Il en est de même pour jouer une animation, même si celle-ci est jouée sur un autre avatar que soi-même (je vous laissent imaginer la suite ...).

Dans le script ci-dessus, l'état "state permissions" est donc tout à fait facultatif.
NB : La demande de permission peut aussi être remplacée par un menu personnalisé "Oui / Non" si le souhait est d'avoir la confirmation de l'utilisateur.

Notez également l'existence de "osTeleportAgent" qui offre d'avantage de possibilité (http://opensimulator.org/wiki/OsTeleportAgent).

Pour l'utiliser, il faut autoriser l'utilisation des fonctions OS et autoriser la fonction "osTeleportAgent" dans OpenSimDefault.ini (ou OpenSim.ini) et modifier le "Threat Level" sur "Severe" (http://opensimulator.org/wiki/OSSL_Enabling_Functions).

Attention : en Modifiant le "Threat Level" vous autoriser aussi d'autres fonctions OS.
Renseignez-vous sur ces fonctions et paramétrez votre .ini en conséquence. (http://opensimulator.org/wiki/Category:OSSL_Functions).

Attention : Des changements récents dans OpenSim permettent d'avoir un fichier séparé pour configurer les fonctions OS. Ce fichier se nome "osslEnable.ini", il est situé dans "bin/config-include/" et est désactivé par defaut. Pour l'activer, décommenter la ligne Include-osslEnable = "config-include/osslEnable.ini". Editez le fichier et paramétrez selon vos besoins.

En voici copie (il y a peu d'info sur le web concernant cette nouveauté).
Code PHP:

Enable OSSL functions.
Including this file in a region's set of INI files, causes the OpenSimulator
;   specific functions to be enabled. 
; See http://opensimulator.org/wiki/OSSL for a description of OSSL functions and
;   refer to http://opensimulator.org/wiki/OSSL_Implemented for a list of functions.

; The below file lists all the functions and specifies who has permission to
;   execute the function. Some of the functions are for maintainance or can be
;   mis-used so the permission to execute a function can be limited. Ability to
;   execute a function is based on the owner of the prim holding the script.

[XEngine]
  ; Allow the use of os* functions (some are dangerous)
  AllowOSFunctions = true

  ; Allow the user of mod* functions.  This allows a script to pass messages
  ;   to a region module via the modSendCommand() function and is used by some
  ;   modules to extend the scripting language.
  AllowMODFunctions = true

  ; Allow the use of LightShare functions.
  ; The setting enable_windlight = true must also be enabled in the [LightShare] section.
  AllowLightshareFunctions = true

  ; Threat level to allow. One of None, VeryLow, Low, Moderate, High, VeryHigh, Severe.
  ; See http://opensimulator.org/wiki/Threat_level for more information on these levels.
  ; This is the default level and can be overridden with the Allow_ specifications.
  ; Blanket enabling the ossl functions is dangerous and we do not recommend setting higher
  ;   than '
Low' unless you have a high level of trust in all the users that can run scripts
  ;   in your simulator.  It is safer to explicitly allow certain types of user to run
  ;   higher threat level OSSL functions, as detailed later on.
  OSFunctionThreatLevel = VeryLow

  ; Each of the OSSL functions can be enabled or disabled individually.
  ; To disable, set the value to '
false'.
  ; To enable for everyone, set the value to '
true'.
  ; To enable for individuals or groups, set it to a comma separated list. This checks
  ;    against the owner of the object containing the script.
  ;    The comma separated entries in the list may be one of:
  ;           "ESTATE_MANAGER" -- enable for estate manager
  ;           "ESTATE_OWNER" -- enable for estate owner
  ;           "PARCEL_OWNER" -- enable for parcel owner
  ;           "PARCEL_GROUP_MEMBER" -- enable for any member of the parcel group
  ;           uuid -- enable for specified ID (may be avatar or group ID)

  ; The OSSL function name is prepended with "Allow_" and it checks against
  ;   the owners of the containing prim. There can also be entries beginning with
  ;   '
Creators_". The 'Creators_" parameters can only be a list of UUIDs and it is
  
;   checked against the creator of the script itself.

  ; 
Allowing ossl functions for anyone owning a parcel can be dangerous especially if
  ;    
a region is selling or otherwise giving away parcel ownershipBy default, parcel
  
;    ownership or group membership does not enable OSSL functionsUncomment the
  
;    appropriate line below to allow parcel ownership and groups to do restricted
  
;    OSSL functionsIt might be better to check the list below and edit the ones
  
;    to enable individually.
  
osslParcelO ""
  
osslParcelOG ""
  
osslParcelO "PARCEL_OWNER,"
  
osslParcelOG "PARCEL_GROUP_MEMBER,PARCEL_OWNER,"

  
There are a block of functions for creating and controlling NPCs.
  ; 
These can be mis-used so limit use to those you can trust.
  
osslNPC =                         ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
               
  
ThreatLevel  None
  Allow_osDrawEllipse 
=             true
  Allow_osDrawFilledPolygon 
=       true
  Allow_osDrawFilledRectangle 
=     true
  Allow_osDrawImage 
=               true
  Allow_osDrawLine 
=                true
  Allow_osDrawPolygon 
=             true
  Allow_osDrawRectangle 
=           true
  Allow_osDrawText 
=                true
  Allow_osGetAgents 
=               ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetAvatarList 
=           ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetCurrentSunHour 
=       true
  Allow_osGetHealth 
=               true
  Allow_osGetInventoryDesc  
=       true
  Allow_osGetMapTexture 
=           true
  Allow_osGetRegionSize 
=           true
  Allow_osGetRezzingObject 
=        true
  Allow_osGetSunParam 
=             true
  Allow_osGetTerrainHeight 
=        true
  Allow_osIsNpc 
=                   true
  Allow_osIsUUID 
=                  true
  Allow_osList2Double 
=             true
  Allow_osMax 
=                     true
  Allow_osMin 
=                     true
  Allow_osMovePen 
=                 true
  Allow_osNpcGetOwner 
=             ${XEngine|osslNPC}
  
Allow_osParseJSON =               true
  Allow_osParseJSONNew 
=            true
  Allow_osSetFontName 
=             true
  Allow_osSetFontSize 
=             true
  Allow_osSetPenCap 
=               true
  Allow_osSetPenColor 
=             true
  Allow_osSetPenSize 
=              true
  Allow_osSetSunParam 
=             ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osTeleportOwner 
=           ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osWindActiveModelPluginName 
true
  Allow_osCheckODE 
=                true    Here for completenessThis function cannot be turned off
  
  
ThreatLevel  Nuisance
  Allow_osSetEstateSunSettings 
=    ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetRegionSunSettings 
=    ESTATE_MANAGER,ESTATE_OWNER
  
  
ThreatLevel  VeryLow
  Allow_osEjectFromGroup 
=          ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceBreakAllLinks 
=      ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceBreakLink 
=          ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetDrawStringSize 
=       true
  Allow_osGetWindParam 
=            true
  Allow_osInviteToGroup 
=           ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osReplaceString 
=           true
  Allow_osSetDynamicTextureData 
=       ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetDynamicTextureDataBlend 
=  ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetDynamicTextureDataBlendFace 
= ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetDynamicTextureURL 
=        ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetDynamicTextureURLBlend 
=   ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetDynamicTextureURLBlendFace 
= ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetParcelMediaURL 
=       ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetParcelSIPAddress 
=     ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetPrimFloatOnWater 
=     true
  Allow_osSetWindParam 
=            ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osTerrainFlush 
=            ESTATE_MANAGER,ESTATE_OWNER
  Allow_osUnixTimeToTimestamp 
=     true
  
  
ThreatLevel  Low
  Allow_osAvatarName2Key 
=          ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osFormatString 
=            true
  Allow_osKey2Name 
=                ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osListenRegex 
=             true
  Allow_osLoadedCreationDate 
=      ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osLoadedCreationID 
=        ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osLoadedCreationTime 
=      ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osMessageObject 
=           ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osRegexIsMatch 
=            true
  
  
ThreatLevel  Moderate
  Allow_osDropAttachment 
=          ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osDropAttachmentAt 
=        ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetGridCustom 
=           ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetGridGatekeeperURI 
=    ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetGridHomeURI 
=          ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetGridLoginURI 
=         ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetGridName 
=             true
  Allow_osGetGridNick 
=             true
  Allow_osGetNumberOfAttachments 
=  ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetRegionStats 
=          ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetSimulatorMemory 
=      ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osMessageAttachments 
=      ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetSpeed 
=                ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  
  
High
  Allow_osCauseDamage 
=             ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osCauseHealing 
=            ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceAttachToAvatar 
=     ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceAttachToAvatarFromInventory 
= ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceCreateLink 
=         ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceDropAttachment 
=     ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osForceDropAttachmentAt 
=   ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetAgentIP 
=              ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetLinkPrimitiveParams 
=  ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetPhysicsEngineType 
=    true
  Allow_osGetPrimitiveParams 
=      ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetRegionMapTexture 
=     ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetScriptEngineName 
=     true
  Allow_osGetSimulatorVersion 
=     true
  Allow_osMakeNotecard 
=            ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osMatchString 
=             true
  Allow_osNpcCreate 
=               ${XEngine|osslNPC}
  
Allow_osNpcGetPos =               ${XEngine|osslNPC}
  
Allow_osNpcGetRot =               ${XEngine|osslNPC}
  
Allow_osNpcLoadAppearance =       ${XEngine|osslNPC}
  
Allow_osNpcMoveTo =               ${XEngine|osslNPC}
  
Allow_osNpcMoveToTarget =         ${XEngine|osslNPC}
  
Allow_osNpcPlayAnimation =        ${XEngine|osslNPC}
  
Allow_osNpcRemove =               ${XEngine|osslNPC}
  
Allow_osNpcSaveAppearance =       ${XEngine|osslNPC}
  
Allow_osNpcSay =                  ${XEngine|osslNPC}
  
Allow_osNpcSetRot =               ${XEngine|osslNPC}
  
Allow_osNpcShout =                ${XEngine|osslNPC}
  
Allow_osNpcSit =                  ${XEngine|osslNPC}
  
Allow_osNpcStand =                ${XEngine|osslNPC}
  
Allow_osNpcStopAnimation =        ${XEngine|osslNPC}
  
Allow_osNpcStopMoveToTarget =     ${XEngine|osslNPC}
  
Allow_osNpcTouch =                ${XEngine|osslNPC}
  
Allow_osNpcWhisper =              ${XEngine|osslNPC}
  
Allow_osOwnerSaveAppearance =     ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osParcelJoin 
=              ESTATE_MANAGER,ESTATE_OWNER
  Allow_osParcelSubdivide 
=         ESTATE_MANAGER,ESTATE_OWNER
  Allow_osRegionRestart 
=           ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetContentType 
=          ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetPrimitiveParams 
=      false
  Allow_osSetProjectionParams 
=     ${XEngine|osslParcelOG}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetRegionWaterHeight 
=    ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetStateEvents 
=          false   deprecated
  Allow_osSetTerrainHeight 
=        ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetTerrainTexture 
=       ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetTerrainTextureHeight 
ESTATE_MANAGER,ESTATE_OWNER
  
  
VeryHigh
  Allow_osAgentSaveAppearance 
=     ESTATE_MANAGER,ESTATE_OWNER
  
WarningThe next function allows scripts to force animations on avatars without the user giving permission.
  ;   
Enabling this can allow forced animations which can trigger traumatic episodes in vulnerable populations.
  ;   
Similar things can be said for several of the 'force' functionsEnable with care and control.
  ; 
Some of these were added as early functionality for NPCsThis has been replaced with the NPC functions.
  
Allow_osAvatarPlayAnimation =     false
  Allow_osAvatarStopAnimation 
=     false
  Allow_osForceDetachFromAvatar 
=   false
  Allow_osForceOtherSit 
=           false
  
The notecard functions can cause a lot of load on the region if over used
  Allow_osGetNotecard 
=             ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetNotecardLine 
=         ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osGetNumberOfNotecardLines 
= ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osRegionNotice 
=            ESTATE_MANAGER,ESTATE_OWNER
  Allow_osSetRot  
=                 false
  Allow_osSetParcelDetails 
=        ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  
  
Severe
  Allow_osConsoleCommand 
=          false
  Allow_osForceAttachToOtherAvatarFromInventory 
false
  Allow_osGrantScriptPermissions 
=  false
  Allow_osKickAvatar 
=              ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER
  Allow_osRevokeScriptPermissions 
false
  Allow_osTeleportAgent 
=           ${XEngine|osslParcelO}ESTATE_MANAGER,ESTATE_OWNER 
Si vous utilisez un simulateur inférieur à 0.8.1 vous pouvez aussi utiliser le fichier "osslEnable.ini" mais il vous faudra le modifier légèrement en supprimant tous les "${...}"

Voilà, si ça aide un peu ...

Dernière modification par djphil ; 29/06/2015 à 14h59. Motif: update OSSL activation
Répondre

Connectés sur ce fil

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