Tout d abord , en remarque , l utilisateur , si ce n est pas le créateur de la prim contenant le base script , ne peut pas trop faire de mauvaises manips :
il n a pas accès par le menu de la boite de dialogue à l enregistrement des positions .
Donc , si il utilise la boite de dialogue et ensuite positionne à un mauvais endroit ,
il lu suffit de retoucher la prim contenant le base script , puis de faire "clean" et à nouveau "build".
Par défaut , la variable allowClean est à TRUE ; tu permets donc à l utilisateur de dérezzer et rerezzer
Si néanmoins , tu veux poursuivre à supprimer certaines options disponibles dans la boite de dialogue :
Dans le base script, tu as dans l evenement state_entry la définition d une liste .
Cette liste est déjà différente si tu es le créateur de la prim contenant le base script ou non
state_entry () {
//Determine the creator UUID
if(creatorUUID == "") creatorUUID = llGetCreator();
//Use which menu?
if (creatorUUID == llGetOwner() || fullOptions) {
//Display all options
optionlist = [optPos, optClean, optDone, optRecord, optReset, optBuild, optChannel];
title = optRecord + descRecord;
title += optReset + descReset;
title += optBuild + descBuild;
title += optPos + descPos;
title += optClean + descClean;
title += optDone + descDone;
title += optChannel + descChannel;
} else {
//Display limited options
if(allowClean) {
optionlist = [optBuild, optPos, optClean, optDone];
title = optBuild + descBuild;
title += optPos + descPos;
title += optClean + descClean;
title += optDone + descDone;
} else {
optionlist = [optBuild, optPos, optDone];
title = optBuild + descBuild;
title += optPos + descPos;
title += optDone + descDone;
}
}
//Record our position
vLastPos = llGetPos();
rLastRot = llGetRot();
llSetTimerEvent(fTimerRate);
}
Cette liste est ensuite utilisée pour afficher la boite de dialogue à l utilisateur dans l evenement touch_start
if ( creatorUUID == llGetOwner() || fullOptions) {
llDialog(agent,title + "Now on Channel " + (string)PRIMCHAN, optionlist, MENU_CHANNEL); //display channel number if authorized
} else {
llDialog(agent, title, optionlist, MENU_CHANNEL);
}
On peut modifier le base script pour que le menu de la boite de dialogue n affiche que tes options désirées.
Mais cela n empêcherait pas un utilisateur de communiquer avec les composants scripts en tapant sur le chat dans le channel de la boite de dialogue.
Ceci dit , cela me semblerait plus un comportement intentionnel qu une mauvaise manipulation de l utilisateur
Dans le cas où on ne se ne se contente que de changer la boite de dialogue , on
supprime lors de la définition de la liste optionlist à afficher à l utilisateur , le choix de la position . Par contre on ne change rien quand c est le créateur de l objet du base script .
Donc le state_entry ressemblerait à cela :
state_entry () {
//Determine the creator UUID
if(creatorUUID == "") creatorUUID = llGetCreator();
//Use which menu?
if (creatorUUID == llGetOwner() || fullOptions) {
//Display all options
optionlist = [optPos, optClean, optDone, optRecord, optReset, optBuild, optChannel];
title = optRecord + descRecord;
title += optReset + descReset;
title += optBuild + descBuild;
title += optPos + descPos;
title += optClean + descClean;
title += optDone + descDone;
title += optChannel + descChannel;
} else {
//Display limited options
if(allowClean) {
optionlist = [optBuild, optClean, optDone];
title = optBuild + descBuild;
title += optClean + descClean;
title += optDone + descDone;
} else {
optionlist = [optBuild, optDone];
title = optBuild + descBuild;
title += optDone + descDone;
}
}
//Record our position
vLastPos = llGetPos();
rLastRot = llGetRot();
llSetTimerEvent(fTimerRate);
}
bien sur , il faut s assurer que
fullOptions = FALSE
Note :
le buddy script est un peu vieillissant comme script ; les utilisateurs se lasseront très vite que tu n offres pas de nouveautés par rapport à un script de 2006 qui n a pas été mis à jour depuis 2008