• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Kein Geld trotz llRequestPermissions(llGetOwner(),PERMISSION_DEBIT );

Hallo,

hab mich mal an einem camper versucht.
Beim rezzen erhalte ich so ein gelbes Fenster und da klicke ich gewähren.
So nun setze ich mich eine Minute und der Camper Gibt den Festegelegten Text aus und
stat des Geldes bekomme ich eine Fehlermeldung.

: Script trying to debit L$ from owner but PERMISSION_DEBIT permission not set!

Ich habe Das Gelbe Fenster doch mit Gewehren bestätigt, wie kommt dann diese Meldung zustande?

Weiß einer woran das liegt ?

Danke für ihre Aufmerksamkeit
 
schau mal im Script nach ob auch beides vorhanden ist.
abfrage im state und der event run_time_permissions

Code:
state_entry()
    {
        [COLOR=Red]llRequestPermissions( llGetOwner(), PERMISSION_DEBIT );[/COLOR]
    }
    [COLOR=Red]run_time_permissions(integer perms)[/COLOR]
    {
        [COLOR=Red]if (perms & PERMISSION_DEBIT)[/COLOR]
        {
             BLA BLA BLA
        }
    }
 
Ich habe hier ein Lucky Chair Script, mit dem man auch Geld geben kann.
Vielleicht kann man hier was für Deinen Camper herausholen und bei Dir einfügen.

Code:
integer noteLine = 0;
key noteQuery;
string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
integer luckyLetter=0;
string prizeString;
key av;
integer TIMER=600;
integer PRIZETYPE=0;    // 0=cash  1=gift
integer CASH=0;         // cash prize amount
integer VOLUME=0;       // 0=say 1=shout
list particles;
integer Handle;


talk(string message)
{
    if(VOLUME==0)
        llSay(0,message);
    else
        llShout(0,message);
}

newLuckyLetter()
{
        luckyLetter=llRound(llFrand(25.0));
        llMessageLinked(2,luckyLetter,"",NULL_KEY);    
        talk("Es wird ein neuer Glücksbuchstabe ausgesucht!");
        llSleep(1);
        
        if(PRIZETYPE==0)    // cash
        {
            prizeString=(string)CASH + "L$!";
        }else{              // gift
            // get a random object from the inventory
            integer size=llGetInventoryNumber(INVENTORY_ALL);
            integer index=0;
            integer object_ready=0;
            if(size==2) // must be only the script and notecard
            {
                prizeString="";    
            }
            else
            {
                while(!object_ready)    // make sure we dont select the script and notecard
                {
                    index=llRound(llFrand((float)(size - 1)));
                    if(llGetInventoryName(INVENTORY_ALL,index)!="Lucky Letter Chair" &&
                        llGetInventoryName(INVENTORY_ALL,index)!="settings")
                        object_ready=1;
                }    
                    
                prizeString = llGetInventoryName(INVENTORY_ALL,index);
            }
        }
        
        talk("Der nächste Lucky Letter Chair Preis ist " + prizeString);
        llSleep(1);
        talk("Wir suchen jetzt einen Namen, der mit dem Buchstaben >" + 
                    llGetSubString(letters,luckyLetter,luckyLetter) + "< anfängt!");
}

default
{
    state_entry()
    {
        llParticleSystem([]);
        llOwnerSay("Initializing settings, please wait...");

    particles = [ PSYS_PART_MAX_AGE,20.0,
            PSYS_PART_FLAGS,PSYS_PART_EMISSIVE_MASK | PSYS_PART_INTERP_COLOR_MASK | PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_BOUNCE_MASK ,
            PSYS_PART_START_COLOR, <1,1,0>,
            PSYS_PART_END_COLOR, <1,0,0>,
            PSYS_PART_START_SCALE,<0.05,0.05,0>,
            PSYS_PART_END_SCALE,<0.8,0.8,0.8>,
            PSYS_SRC_PATTERN, PSYS_SRC_PATTERN_EXPLODE,
            PSYS_SRC_BURST_RATE,0.1,
            PSYS_SRC_ACCEL, <0,0,0>,
            PSYS_SRC_BURST_PART_COUNT,12,
            PSYS_SRC_BURST_RADIUS,0.0,
            PSYS_SRC_BURST_SPEED_MIN,1.0,
            PSYS_SRC_BURST_SPEED_MAX,1.0,
            PSYS_SRC_INNERANGLE,0.3, 
            PSYS_SRC_OUTERANGLE,0.0,
            PSYS_SRC_OMEGA, <0,0,0>,
            PSYS_SRC_MAX_AGE,8.0,
            PSYS_SRC_TEXTURE, "",
            PSYS_PART_START_ALPHA, 1.0,
            PSYS_PART_END_ALPHA, 0.01
                ];        
        vector eul = <190,0,90>; 
        eul *= DEG_TO_RAD; 
        llSitTarget(<0.01,-0.2,-1.3>,llEuler2Rot(eul));
        av=NULL_KEY;
        // Load settings
        noteLine = 0;
        noteQuery = llGetNotecardLine("settings", 0);
        

    }

    run_time_permissions(integer perm) {
        if (perm & PERMISSION_DEBIT) {
            // We got permission to pay, start up
            state running;
        }
    }
            
    dataserver(key queryid, string data) {
        if (queryid == noteQuery) {
            if (data == EOF) {
                // No more settings

                llOwnerSay("Initialized, checking for payment permission....");
                if (llGetPermissions() & PERMISSION_DEBIT)
                    state running;
                else
                    llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
            } else {
                // New line of settings
                
                list parts = llParseString2List(data, [":"], []);
                string setting = llList2String(parts, 0);
                string value = llList2String(parts, 1);
                
                // No need to be picky about case
                setting = llToLower(setting);
                
                if (setting == "timer") TIMER = (integer)value;
                if (setting == "volume") VOLUME = (integer)value;
                if (setting == "prizetype") PRIZETYPE = (integer)value;
                if (setting == "cash") CASH = (integer)value;
                
                // Get next line of settings
                noteLine++;
                noteQuery = llGetNotecardLine("settings", noteLine);
            }
        }
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }
}

state running
{
    state_entry()
    {
        av=NULL_KEY;
        newLuckyLetter();
        llSetTimerEvent(TIMER*60);        
        llParticleSystem([]);
    }
    
    timer()
    {
        newLuckyLetter();
    }
    
    
    changed(integer change) {
        if (change & CHANGED_INVENTORY) {
            llResetScript();
        }
           
        if (change & CHANGED_LINK) {
            av = llAvatarOnSitTarget();
            if (av != NULL_KEY) {
                string name = llKey2Name(av);
                string letter = llGetSubString(llToUpper(name),0,0);    
                llSleep(2);
                talk("Hallo " + name);
                llSleep(1);
                talk("Dein Name fängt an mit einem >" + letter + "< an und wir suchen einen Name der mit einem >" + llGetSubString(letters,luckyLetter,luckyLetter) + "< anfängt!");
                llSleep(1);
                if(letter==llGetSubString(letters,luckyLetter,luckyLetter))
                {
                    state winner;    
                }else{
                    talk("Tut mit leid!");
                    llUnSit(av);
                    av=NULL_KEY;
                }
            }
        }
    }

    touch(integer count)
    {
        if(llDetectedKey(0)==llGetOwner())
        {
            Handle = llListen(9638,"",llGetOwner(),"");
            llDialog(llGetOwner(),"Do you wish to reset the Lucky Letter Chair?",["Reset"],9638);    
        }    
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if(id==llGetOwner() && message=="Reset")
        {
            llListenRemove(Handle);
            llResetScript();    
        }    
    }
    
    on_rez(integer param)
    {
        llResetScript();
    }

}

state winner
{
    state_entry()
    {
        if(av!=NULL_KEY)
        {
            talk("Wir haben einen Gewinner!");
            // do particles
            // deliver item or cash
            if(PRIZETYPE==0)    // cash
            {
                llParticleSystem(particles);
                llGiveMoney(av,CASH);        
            }else{
                llParticleSystem(particles);
                llGiveInventory(av,prizeString);   
            }
            llSleep(5);
            llParticleSystem([]);    
            llUnSit(av);
            av=NULL_KEY;
            llSleep(7);
        }
        state running;    
    }    

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

Notecard: settings

Code:
//
// timer - number of minutes between new letters
//
timer:1

//
// volume - say or shout the information from the chair
// 0=say  1=shout
volume:0

//
// prizetype - whether to give out gifts from the inventory or to give cash
// 0=cash  1=gift
prizetype:0

//
// cash - the amount to pay as prize if [prizetype] = 0  for cash prizes.
//
cash:1
 
Ralla, ist es ggf. möglich das in dem Camper nicht nur ein Script ist ?

Es wäre denkbar das das gelbe Fenster zwar kommt aber dennoch kein Geld raus gegeben werden kann, wenn das Script welches das llGiveMoney ausführen soll nicht das gleiche ist wie das welches vorher die PERMISSION_DEBIT vom Owner erhalten hat.

Und es kann natürlich immer nur Geld vom Konto des Objektbesitzers abgebucht werden ....
 
noch eine wichtige Vorraussetzung.

dein Konto sollte einen Positiven stand haben :mrgreen:

PS: wenn folgendes ind einem script fehlt, kannst du 100x die abfrage bestaetigen, der scheisst dir dennoch immer nen Pfund.
Code:
[COLOR=Red]run_time_permissions(integer perms)[/COLOR]
    {
        [COLOR=Red]if (perms & PERMISSION_DEBIT)[/COLOR]
        {
             BLA BLA BLA
        }
    }

Um es mal einfach auszudruecken, das script muss wissen ob es dauerhaft das recht hat geld von deinem Konto zu nemen.
 
Der gegenstand ist meiner und Geld habe ich wie heu(wen es mal so währe), Das script was die rechte abfragt ist das selbe welches das Geld herausgibt.
Ich habe das festgestellt das ich das recht verlieren nachdem ich das recht für die Animation aufrufe
 
versuchs mal so...
Code:
state_entry()
    {
        llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
Code:
changed(integer perm)
    {
        if(perm & CHANGED_LINK)
        {
            key agent = llAvatarOnSitTarget();
            if (agent != NULL_KEY ) 
            {
                llRequestPermissions(agent,PERMISSION_TRIGGER_ANIMATION);
Code:
run_time_permissions(integer perm)
    {
        if(perm & PERMISSION_DEBIT)
        {
            //nix
        }
        else if(perm & PERMISSION_TRIGGER_ANIMATION)
        {
            llStopAnimation("sit");
            llStartAnimation("deine ani);
            
        }
ich hoff ich hab nix vergessen.
 
Ich habe das festgestellt das ich das recht verlieren nachdem ich das recht für die Animation aufrufe

OK, das wird es sein. In den LSL - Wikis ist beschrieben, dass es pro Skript nur ein Set von Permissions geben kann, ein neuer Request überschreibt den alten:

Be aware that the effects of this call are not additive. This means that all desired permissions must be requested for any call because the new permissions (or lack thereof) will completely replace the old permissions.

Also pack die Ani mit ihrem llRequestPermission in ein anderes Skript, die beiden können ja über Linkmessages kommunizieren. Oder versuch die beiden richtig zu verknüpfen.
 
Hehe, danke.

Ich denke noch drüber nach, wie man einfach die beiden Permissions mit oder verknüpfen kann, aber die Ani soll sicher auch für andere Avatare laufen, während das mit dem Zahlen eher nicht so sein soll (und auch nicht kann).

Daher scheint mir die Zwei-Skript-Lösung die einfachere zu sein und wohl auch die pflegeleichtere für spätere Änderungen und Erweiterungen.
 
Geht nicht, beide zu verbinden. Geld auszahlen muss der Besitzer, animiert werden soll der Benutzer. In einem Skript nicht zu kombinieren. Man kann da nur einen Serverobjekt machen, der mit den Sesseln kommuniziert und für die Geldausgabe zuständig ist. Inwiefern das weniger Lag macht, weiß nicht.

Chat listener anstelle linked_message Event zu nutzen schein vom Aufwand her sehr ännlich zu sein.
 

Users who are viewing this thread

Zurück
Oben Unten