Script : Problème de dialogue entre states

Répondre
Partager Rechercher
Chalut...

Encore un petit problème de script, cette fois si du côté des scripts.

Lorsque le owner clic sur mon DancePad, un dialogue s'ouvre, lui proposant d'éteindre le dancepad... Ici pas de problème, si la réponse est Turn Off, il passe sur le state off... Mais où sa se corse, c'est lorsque le owner clic sur le dancepad déjà off... J'ai le dialogue qui s'ouvre, lui proposant de renclencher le dancepad. dans le script, j'ai essayé 2 choses :

Appeller le state default
Code:
    listen(integer channel, string name, key id, string message) {
        if(message == "Turn On") {
            state default;
        }
    }
Resetter le script
Code:
    listen(integer channel, string name, key id, string message) {
        if(message == "Turn On") {
            llResetScript();
        }
    }
Mais ni l'un, ni l'autre ne fonctionne... Quelqu'un peut me dire pourquoi ?

Merci
Quand j'ai commencé, 'state default' ne faisait rien, fallait faire un état supplémentaire, et basculer dedans dès qu'on entrait dans default.

Mais à priori, c'est réglé, donc tes 2 bouts de scripts sont valides, le llResetScript() étant sauvage.

Donc, il ne reste que les effets de bords, des soucis d'écriture dans le script réel, puisque je parie que comme à ton habitude, tu as mis des bouts bien léché de code, et non ce qui fait ton script.

Donc, comme d'habitude, donne ton script complet, exactement ce que tu as dans ton script
Mdr tu me fais pensé à mon ancien prof de DotNet, il me parlait la même chose ^^... J'ai pas tout compris sur le fait que llResetScript() soit sauvage ou qu'il reste des effets de bords... Et non, je n'ai pas repiqué des boût de code que je passe j'ai bricolé ... Bref, voici le code :

Code:
string animation;
float secondes;
integer prixParSecondes;
integer montantDu = 0;
key avatarSit;
integer noAFK;
integer maxGains;
string reponse = "start";
integer channel;

default {
    state_entry() {
        channel = (integer)llFrand(2000000000);
        llMessageLinked(LINK_SET, 666, "", NULL_KEY);
        llSetSitText("Dance");
        llListen((integer)channel, "", NULL_KEY, "");
    }
    
    touch(integer num_detected) {
        if(llDetectedKey(0) == llGetOwner()) {
            llDialog(llGetOwner(),"What do you want to do ?",["Reset","Turn Off"],channel);
        }
    }

    listen(integer channel, string name, key id, string message) 
    {
            if(message == "Yes") {
                reponse = "ok";
            } else if(message == "No"){
                llUnSit(avatarSit);
            } else if(message == "Reset") {
                llResetScript();
            } else if(message == "Turn Off") {
                state off;
            }
    }

    changed(integer change) {
        if (change & CHANGED_LINK) {
            if (llAvatarOnSitTarget() != NULL_KEY) {
                avatarSit = llAvatarOnSitTarget();
                llSetText(llKey2Name(avatarSit)+" is dancing.\nCurrent earned "+(string)montantDu+"L$",<1,1,1>,1);
                animation = llGetInventoryName(INVENTORY_ANIMATION,0);
                llRequestPermissions(avatarSit, PERMISSION_TRIGGER_ANIMATION);
                montantDu = 0;
                llStopAnimation("sit");
                llStartAnimation(animation);
                llSetTimerEvent(secondes);
            }
            else {
                llStopAnimation(animation);
                llSetText("As2piK's DancePad.\n"+(string)prixParSecondes+"L$ each "+(string)((integer)(secondes/60))+" minutes",<1,1,1>,1);
                reponse = "start";
                llMessageLinked(LINK_SET, 999, (string)montantDu, avatarSit);
                montantDu = 0;
                llSetTimerEvent(0); 
            } 
        } 
    }
    
    link_message(integer sender_num, integer num, string str, key id) {
        if(num == 1001) {
            llSay(0,(string)num);
            secondes = (integer)str;
        } else if(num == 1002) {
            llSay(0,(string)num);
            prixParSecondes = (integer)str;
        } else if(num == 1003) {
            llSay(0,(string)num);
            noAFK = (integer)str;
        } else if(num == 1004) {
            llSay(0,(string)num);
            maxGains = (integer)str;
        } else if(num == 1010) {
            llResetScript();
        }
        llSetText("As2piK's DancePad.\n"+(string)prixParSecondes+"L$ each "+(string)((integer)(secondes/60))+" minutes",<1,1,1>,1);
    }

    timer() {
        if(noAFK && reponse == "stop") {
            llUnSit(avatarSit);
        } else {
            montantDu += prixParSecondes; 
            llSetText(llKey2Name(avatarSit)+" is dancing.\nCurrent earned "+(string)montantDu+"L$",<1,1,1>,1);
            if(maxGains != 0 && maxGains <= montantDu) {
                llUnSit(avatarSit);
            }
            if(noAFK) {
                reponse = "stop";
                list yesno = ["Yes","No"];
                list noyes = ["No", "Yes"];
                list rep;
                float yn = (integer)llFrand(2);
                if(yn == 0) {
                    llSay(0,(string)yn);
                    rep = yesno;
                } else {
                    llSay(0,(string)yn);
                    rep = noyes;
                }
                llDialog(avatarSit,"Do you want to stay on the DancePad ?",rep,channel);
            }
        }
    }

    run_time_permissions(integer parm) {
        if(parm == PERMISSION_TRIGGER_ANIMATION) {
            llStopAnimation("sit");
            llStartAnimation(animation); 
        } 
    }

    on_rez(integer start_param) {
        llResetScript(); 
    } 
}

state off {
    state_entry() {
        llSay(0,"off");
        llSetText("Off",<1,1,1>,1);
    }
    
    changed(integer change) {
        if (change & CHANGED_LINK) {
            if (llAvatarOnSitTarget() != NULL_KEY) {
                avatarSit = llAvatarOnSitTarget();
                animation = llGetInventoryName(INVENTORY_ANIMATION,0);
                llRequestPermissions(avatarSit, PERMISSION_TRIGGER_ANIMATION);
                montantDu = 0;
                llStopAnimation("sit");
                llStartAnimation(animation);
            }
            else {
                llStopAnimation(animation);
            } 
        } 
    }
    touch(integer num_detected) {
        if(llDetectedKey(0) == llGetOwner()) {
            llDialog(llGetOwner(),"What do you want to do ?",["Turn On","Stay at off"],channel);
        }
    }
    listen(integer channel, string name, key id, string message) {
        if(message == "Turn On") {
            llResetScript();
        }
    }
}
Merci
Répondre

Connectés sur ce fil

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