PERMISSION_DEBIT permission not set!

Répondre
Partager Rechercher
Salut... Voilà mon problème :

J'ai créé un script de dancepad... J'ai réussi à tout créer, mais il me reste 1 problème : Ces p*tin de permission dont je ne comprend rien !!!

Voilà donc mon objet :

Code:
// VARIABLES GLOBALES

vector position=<0.0, 0.0, 0.5>;             //Position de l'avatar
rotation rotation_avatar= <0.0,0.0,0.0,0.0>; //Rotation de l'avatar
string texte_libre="Emprunt";                //Texte flottant quand libre
string texte_occupé="";                      //Texte flottant quand occupé
string couleur_texte="255,255,255";          //Couleur du texte
list rgb;                                    //Couleur RBG du texte
string animation;                            //nom de l'animation
integer listener;                            //Ecouteur
float nb_secondes = 3;                       //Nombre de seconde par tick
key avatar_id;                               //ID de l'avatar entrain de danser
integer montant=0;                           //Montant à payer à l'avatar

//FIN DES VARIABLES GLOBALES

initialise_step1() {
    llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);    
}

//Ecriture du texte
set_text(string texte)
{
       if (llStringLength(texte)>0)
        {
            rgb=llCSV2List(couleur_texte);
            llSetText(texte,<llList2Float(rgb,0)*0.003921568627450980392156862745098,llList2Float(rgb,1)*0.003921568627450980392156862745098,llList2Float(rgb,2)*0.003921568627450980392156862745098>,1.0);
            
        }    
        else
           llSetText("",<0,0,0>,0.0);     
}
default 
{
    touch(integer num_detected) {
        if(llDetectedKey(0) == llGetOwner()) {
            llSay(0,"Je suis le proprio");
            inititalise_step1();
        } else {
            llSay(0,llAvatarOnSitTarget());
            llSay(0,llGetOwner());
        }
        
    }
    state_entry() 
    {
        if (llStringLength(texte_occupé)>0) {
            set_text(texte_occupé);
        } else {
            set_text("");
        }
        llSay(0,"1");
        llSitTarget(position, rotation_avatar);
    }
        
    changed(integer change) 
    { 
        if (change & CHANGED_LINK) 
        {
            
            if (llAvatarOnSitTarget() != NULL_KEY) 
            { 
                llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TRIGGER_ANIMATION);
                avatar_id = llAvatarOnSitTarget();
            }
            else
            {
                if(montant > 0) {
                    inititalise_step1();
                    llSay(0,"As2piK vous doit "+(string)montant+" L$");
                    llGiveMoney("cb45ac11-2017-4da6-8f35-ad1ff6c815d4", (integer)montant);
                    
                }
                integer perm=llGetPermissions();
                if ((perm & PERMISSION_TRIGGER_ANIMATION) && llStringLength(animation)>0)       
                llStopAnimation(animation);
                llSetAlpha(1.0, ALL_SIDES);
                set_text(texte_libre);
                animation="";
                llSetTimerEvent(0);
                montant=0;
            }
        }
    }
    run_time_permissions(integer perm) {
        if(llGetOwner() == llAvatarOnSitTarget()) {
            llSetTimerEvent(nb_secondes);
        } else {
            llSay(0,"En Développement");
            montant=0;
        }
        llStopAnimation("sit");
        animation=llGetInventoryName(INVENTORY_ANIMATION,0);
        llStartAnimation(animation);
    }
    timer() {
        montant++;
        llSay(0,(string)montant);
    }
}
Et au final, il me dit que les permissions ne me permettent pas de verser de l'argent à quelqu'un...

Biensure, ceci est une ébauche, se n'est pas terminé, et il faut savoir que j'ai beaucoup repris de codes d'autres petites choses, comme d'un vendors qui permet le partage des gains ou autre, donc il est possible que certaines choses je ne puisse pas vous expliquer pourquoi j'ai fais comme ca, je me suis basé sur d'autres codes...

Merci
à priori y a pas mal d'erreurs :/

primo, la permission se demande à l'owner une fois à l'initialisation, pas à chaque fois que ton script constate que celui qui s'assied se lève.

tu donnes l'argent à la personne qui était assise, pas à toi (la key qui est dans llGiveMoney() c'est bien la tienne d'ailleurs? )

Quant à ce que fait ton code, vaut mieux partir de 0 sur des choses que tu comprends, que tenter de mélanger des bouts de codes dont tu ne comprends pas le fonctionnement.

Je serais toi, je commencerais par créer un script qui anime la personne qui s'assied dessus, et qui arrête de l'animer quand elle se lève.

J'ajouterais ensuite le timer et le compteur, le timer se lance quand on s'assied, et s'arrête quand on se lève.

Et enfin, j'ajouterais la gestion du débit de l'owner, la permission se demande à l'initialisation du script, et le payement de la personne assise quand celle-ci se lève

tu vois?
Merci master...

Alors pour le llGiveMoney, j'ai effectivement mis mon uuid, mais c'est pour pas que quelque vienne se poser pendant que je développer et se fasse des millions sur mon dos a cause d'une erreur de script ^^

Ensuite ben je vais essayer de faire se que tu me dis Merci beaucoup je vous tiens au courant
il ne s'utilise pas, il est appelé à chaque usage de llRequestPermissions()

Et dans ton cas, tu dois l'utiliser pour animer la personne assise, et pour te demander la permission de débit.

Et le llGiveMoney(), tu le mets en commentaire une fois que tu as testé que ça envoyait à la bonne personne
Bon alors comme a dit master, j'ai tout reprogrammé, et j'ai compris pas mal de trucs en plus Par contre, j'ai toujours cette erreur de permissions :

Code:
// VARIABLES DE SESSION

vector position=<0.0, 0.0, 0.5>;             //Position de l'avatar
rotation rotation_avatar= <0.0,0.0,0.0,0.0>; //Rotation de l'avatar
string texte_libre="Danse";                  //Texte flottant quand libre
string texte_occupé="";                      //Texte flottant quand occupé
string couleur_texte="255,255,255";          //Couleur du texte
list rgb;                                    //Couleur RBG du texte
string animation;                            //nom de l'animation
integer listener;                            //Ecouteur
float nb_secondes = 3;                       //Nombre de seconde par tick
integer nb_linden = 2;                       //Linden gagné tous les nb_secondes secondes
key avatar_id;                               //ID de l'avatar entrain de danser
integer montant=0;                           //Montant à payer à l'avatar

//FIN DES VARIABLES DE SESSION

default 
{
    touch(integer num_detected) {
        if(llDetectedKey(0) == llGetOwner()) {
            llSay(0,"touch, default");
        } else {
            llSay(0,llAvatarOnSitTarget());
            llSay(0,llGetOwner());
        }
        
    }
    state_entry() 
    {
        llSay(0,"state_entry, default");
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
    }
        
    changed(integer change) 
    {        
        if (change & CHANGED_LINK) 
        {
            llSay(0,"changed ok");
            if(llAvatarOnSitTarget() != NULL_KEY) {
                llRequestPermissions(llAvatarOnSitTarget(), PERMISSION_TRIGGER_ANIMATION);
                llStopAnimation("sit");
                animation = llGetInventoryName(INVENTORY_ANIMATION,0);
                llStartAnimation(animation);
                llSetTimerEvent(nb_secondes);
            } else {
                llStopAnimation(animation);
                llSetTimerEvent(0);
                llSay(0,"montant : "+(string)montant);
                llGiveMoney(llAvatarOnSitTarget(),montant);
                montant=0;
            }
        }
    }
    run_time_permissions(integer perm) {
        if(llGetOwner() == llAvatarOnSitTarget()) {
            llSay(0,"Proprio assis");
        } else {
            llSay(0,"Autre assis");
        }
    }
    timer() {
        montant += nb_linden;
        llSay(0,(string)montant);
    }
}
Faites pas attention aux différents messages écrits, c'est des repères pour moi...

Donc ici, lorsque j'initialise l'objet, j'ai effectivement un popup qui me demande si je suis d'accord qu'on me prenne de l'argent...

Lorsque quelqu'un s'asseye, le timer se mets bien en route, et le montant augmente...

Mais lorsque la personne se lève, j'ai toujours se message :
Citation :
Script trying to debit L$ from owner but PERMISSION_DEBIT permission not set!
lol les messages se sont croisé ^^

Oki j'ai compris pour le run_time, mais tu dis que je dois demander l'autorisation de débit la dedans, mais quand je le mets, il me le demande a chaque que le timer tick (en tant qu'owner)... J'ai mis le code comme ca :

Code:
    run_time_permissions(integer perm) {
        if(llGetOwner() == llAvatarOnSitTarget()) {
            llSay(0,"Proprio assis");
            llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
        } else {
            llSay(0,"Autre assis");
        }
    }
Sa doit sûrement pas être se que tu entends ^^
Message supprimé par son auteur.
Et il va se retrouver à devoir valider le retrait pour paiement à chaque fois que quelqu'un s'assied sur son prim?

Y compris quand il est pas là, sinon le client de la camp-chair il ne reçoit aucun payement, et bam, bonjour la réputation

surtout que la demande de débit se fait à l'owner uniquement, et l'animation à celui qui s'assied...
C'est vrai qu'il y a un problème là... La demande de permission de retrait se fais à l'owner, alors que la demande d'animation se fais au danseur... Je vais essayer, mais ca m'étonnerais que sa marche... Master,tu as une autre idée ?

PS: J'ai failli oublié... Merci beaucoup pour ton aide, et à toi aussi Kellsey ^^
Bon j'ai trouvé, un script ne peut contenir les permissions que pour un seul avatar, il ne peut donc contenir les permissions pour le payment et l'animation.

Solution:
Un script pour l'animation et le décompte du payement, un autre pour le payement, les 2 communicant par link_message().

Le script d'animation (j'ai repris mon script habituel de pose-ball, avec disparition de la ball):
Code:
// position de l'avatar par rapport a la prim ou est le code, les distances sont codees sur <x,y,z>.
// eviter de mettre <0.0, 0.0, 0.0>
vector pos = <0.0, 0.0, 0.5>;
// orientation de l'avatar par rapport aux axes du prim ou est le script, les angles sont donnes en degres autour des axes <x, y, z>.
vector var = <0.0, 0.0, 0.0>;
// le nom de l'animation dans l'inventaire du script.
string nom = "arabesque";
// le prix paye par seconde sur la chaise.
integer sitCost = 1;

// code du script: ON NE TOUCHE A RIEN.
key mkLoungingAgentKey = NULL_KEY;
key agent = NULL_KEY;
integer miPermissionsAcquired = FALSE;
integer pay = 0;
rotation rX;
rotation rY;
rotation rZ;
rotation r;

default {
    state_entry() {
        rX = llAxisAngle2Rot( <1,0,0>, var.x * DEG_TO_RAD);
        rY = llAxisAngle2Rot( <0,1,0>, var.y * DEG_TO_RAD);
        rZ = llAxisAngle2Rot( <0,0,1>, var.z * DEG_TO_RAD);
        r = rX * rY * rZ;
        llSitTarget(pos, r);
        llSetSitText( "Pose." ); }

    changed(integer change) {
        if (change & CHANGED_LINK) {
            agent = llAvatarOnSitTarget();
            if ( mkLoungingAgentKey == NULL_KEY && agent != NULL_KEY ) {
                mkLoungingAgentKey = agent;
                llRequestPermissions(mkLoungingAgentKey, PERMISSION_TRIGGER_ANIMATION);
                pay = 0;
                llSetTimerEvent(1.0); }
            else if ( mkLoungingAgentKey != NULL_KEY && agent == NULL_KEY) {
                if ( miPermissionsAcquired ) {
                    llSetLinkAlpha(LINK_SET,1.0, ALL_SIDES);
                    llStopAnimation(nom); }
                pay = pay * sitCost;
                llSay(0, "You gain : " + (string)pay);
                llMessageLinked(LINK_SET, 999, (string)pay, mkLoungingAgentKey); // on paye
                miPermissionsAcquired = FALSE;
                mkLoungingAgentKey = NULL_KEY;
                agent = NULL_KEY;
                llSetTimerEvent(0); } } }

    timer(){
        pay++; }

    run_time_permissions(integer parm) {
        if(parm == PERMISSION_TRIGGER_ANIMATION) {
            miPermissionsAcquired = TRUE;
            llSetLinkAlpha(LINK_SET,0.0, ALL_SIDES);
            llStopAnimation("sit");
            llStartAnimation(nom); } }

    on_rez(integer start_param) {
        llResetScript(); } }
Le script payement:
Code:
default {
    state_entry() {
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT); }

    link_message( integer sendNum, integer num, string str, key id ){
        if (sendNum = 999) {
            integer pay = (integer)str;
            llGiveMoney(id, pay); } }

    run_time_permissions(integer parm) {
        if(parm == PERMISSION_DEBIT) {
            llOwnerSay("Permission ok"); } }

    on_rez(integer start_param) {
        llResetScript(); } }
Répondre

Connectés sur ce fil

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