Bonsoir,
J'avais laissé de côté ce script et je reviens dessus ! Je me heurte à 2 problèmes

!
1. Quand je clique sur le bouton pour avoir la boite a dialogue, l'animation par défaut qui se trouve dans le hud démarre aussitôt sans avoir besoin de cliquer sur le bouton de l'animation

!
2. Quand j'enlève l'animation par défaut du hud et que j'en rajoute d'autres, je clique sur le bouton j'ai ma boite a dialogue qui apparaît avec les boutons des animations par contre j'ai une erreur script qui me dit qu'il manque l'animation par défaut (alors que le bouton lui a disparut)

!
Voici le script :
key kOwner;
integer iEcoute;
integer fDelai = 60;
integer iCanal;
integer iNbAnim;
list lAnims;
string sNEXT = ">>";
string sPREV = "<<";
string STOP = "STOP";
string sTEXTE = "Choisissez votre anim : ";
float fTIMEOUT = 30.0; // Délai pour réponse au menu
string sAnimPrecedente;
integer iIndexMenu;
init() {
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
kOwner = llGetOwner();
llOwnerSay("ready");
}
FaireList() {
integer i;
iNbAnim = llGetInventoryNumber(INVENTORY_ANIMATION);
lAnims = [STOP];
for(i=0; i<iNbAnim; ++i) {
string nom_anim = llGetInventoryName(INVENTORY_ANIMATION, i);
if (llStringLength(nom_anim) < 24)
lAnims += [nom_anim];
else llOwnerSay("l'anim \"" + nom_anim + "\"porte un nom trop long et ne sera pas prise en compte");
}
}
navigation(string browse) {
// Nombre de boutons
integer n = llGetListLength(lAnims);
// Navigation simple pour deux pages
if(n < 23) {
if(iIndexMenu) iIndexMenu = 0;
else iIndexMenu = 11;}
// Navigation riche pour plus de deux pages
else {
if(browse == sNEXT) {
iIndexMenu += 10;
if(iIndexMenu >= n) iIndexMenu = 0;}
else {
iIndexMenu -= 10;
if(iIndexMenu < 0) iIndexMenu = n - n % 10;}
}
// Envoi du menu
Menu();
}
// -- Gestion de l'index des boutons du menu --
// @ param [string] bouton de déplacement
GestIndexBoutons(string browse) {
// Nombre de boutons
integer n = llGetListLength(lAnims);
// Navigation simple pour deux pages
if(n < 23) {
if(iIndexMenu) iIndexMenu = 0;
else iIndexMenu = 11;}
// Navigation riche pour plus de deux pages
else {
if(browse == sNEXT) {
iIndexMenu += 10;
if(iIndexMenu >= n) iIndexMenu = 0;}
else {
iIndexMenu -= 10;
if(iIndexMenu < 0) iIndexMenu = n - n % 10;}
}
// Envoi du menu
Menu();
}
// -- Gestion menu --
Menu() {
llSetTimerEvent(fTIMEOUT);
iCanal = (integer)llFrand(-100000);
iEcoute = llListen(iCanal, "", kOwner, "");
// Liste globale des boutons
list lBoutons = lAnims;
// Nombre total de boutons
integer n = llGetListLength(lAnims);
// Si plusieurs pages
if(n > 12) {
// Que 2 pages -> navigation simple
if(n < 23) {
// Deuxième page
if(iIndexMenu)
lBoutons = [sPREV] + llList2List(lAnims, iIndexMenu, -1);
// Première page
else
lBoutons = llList2List(lAnims, 0, 1) + [sNEXT] + llList2List(lAnims, 2, 10);}
// Plus de 2 pages -> navigation riche
else {
list l = [sPREV, llList2String(lAnims, iIndexMenu), sNEXT];
// Première page ou page intermédiaire
if(n - iIndexMenu > 10)
lBoutons = l + llList2List(lAnims, iIndexMenu + 1, iIndexMenu + 9);
// Dernière page
else {
if(iIndexMenu + 1 < n)
lBoutons = l + llList2List(lAnims, iIndexMenu + 1, -1);
else lBoutons = l;}
}
}
// Envoi du menu
llDialog(kOwner, sTEXTE, lBoutons, iCanal);
}
cancelMenu() {
llSetTimerEvent(0.0);
llListenRemove(iEcoute);
}
finMenu() {
llOwnerSay("trop tard. Menu desactivé");
cancelMenu();
}
PlayAnim(string anim) {
if(sAnimPrecedente != "")
llStopAnimation(sAnimPrecedente);
llOwnerSay(anim);
if(anim != STOP) {
llStartAnimation(anim);
sAnimPrecedente = anim;
}
else sAnimPrecedente = "";
}
default
{
link_message(integer sender_number, integer number, string message, key id)
{
if (number == -1818)
{
Menu();
}
}
listen(integer channel, string name, key id, string message)
{
if(~llListFindList([sNEXT, sPREV], [message]))
{
navigation(message);
}
else {
cancelMenu();
PlayAnim(message);
}
}
timer()
{
finMenu();
}
state_entry()
{
init(); // oups, faut pas oublier l'init() /me se tappe sur la tete
FaireList();
}
attach(key id)
{
if (id != NULL_KEY)
init();
}
run_time_permissions(integer perm)
{
if (!(perm & PERMISSION_TRIGGER_ANIMATION))
{
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}
}
changed(integer chang) // lors de la vente de l objet , on reset le script pour prendre en compte le nouveau Owner (l'ecoute)
{
if(chang & CHANGED_OWNER)
{
llResetScript();
}
if (chang & CHANGED_INVENTORY)
{
FaireList();
}
}
}
J'ai jeté un œil (de débutant) mais je ne trouve pas quoi modifié pourtant il doit y avoir un rapport avec les permissions

!
Merci