• 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.

Zahlen (Überweisen) per Script

argus Portal

Freund/in des Forums
Hallo

Ich habe bislang noch keine Tipjars etc. gescriptet und stoße hier auf eine Sache,
die meiner Meinung nach so nicht sein sollte. Oder ist das ein bekanntes Verhalten ?


Simples Beispielscript, das nur das wesentliche zur Frage enthält:

Code:
default
{
    state_entry()
    {
        llSetPayPrice(1,[1,2,5,PAY_HIDE]);
    }


    money(key id, integer l)
    {
        llGiveMoney(llGetOwner(), l);
    }

}


Klickt nun ein User mit rechter Maus und wählt "Zahlen" kann er
jede Vorgabe wählen und den Betrag absenden.

Es gibt zwar eine Scriptwarnung, das die Erlaubnis nicht erteilt wurde,
aber der Betrag wird dennoch überwiesen !
 
Das llGiveMoney muss da nur weg.
Du willst ja kein Geld wieder herausgeben

Sollte es ein Split-Tipjar werden, dann musst Du llRequestPermission mit Perm Debit abfragen und dann wenn ein OK gegeben wird am besten in einen anderen state wechseln, in dem das Script dann weiter läuft.
 
Danke für die Antwort. Mir geht es in der Hauptsache um den Mechanismus. Wie kann es sein,
das Überweisungen ohne Erlaubnis stattfinden.
 
Finden nicht statt.
Das Script kann ja nicht überweisen und gibt daher den Fehler aus.

Das Geld bekommst Du ja, weil Du der Eigentümer bist.
llGiveMoney(llGetOwner(),Betrag);
ist somit absolut unsinnig in einem Script, das mit Geld von Dir selbst arbeitet.


Also Einzahlung ist immer möglich und geht dann an den Eigentümer.
Auszahlung ist nicht möglich in Deinem Script, da noch keine Berechtigung gegeben wurde.
Auszahlen könnte es sonst an wen auch immer.
 
Zuletzt bearbeitet:
money() braucht keine Erlaubnis, da der Owner das Geld bekommt. Nur llGiveMoney() braucht eine Erlaubnis.

Da du llGiveMoney() in money() reingepackt hast, kam es dir so vor, dass llGiveMoney() ohne Erlaubnis funktionierte aber es funktionierte in Wirklichkeit nur money(), was keine Erlaubnis braucht und gleichzeitig erzeugte llGiveMoney() einen Fehler.

Schlimmer Satz, lach.
 
Zuletzt bearbeitet:
Danke :) Jetzt ist mir das Prinzip klar. Da ich mit dem Thema bislang noch nichts zu tun hatte, hatte ich einiges
experimentiert, weil ich dachte, JEDER Geldtransfer müsste irgendwie erlaubt werden.
 
Hier mal ein alter Tipjar von H. Hudson
Der ist frei zur Verfügung gestellt.
Irgendwo wurde der sogar mal in der alten Script-Wiki gepostet.
Code:
//Hannibal Hudson
//TipJar

//Frei zuer Verwendung fuer alle und jeden. :-)

//Anzeige der bisher gespendeten L$
//Anzeige der im aktuellen Monat gespendeten L$
//Anzeige der letzten Spende

//Das Script speichert die Gespendeten Betraege in der Objektbeschreibung, so das die Werte
//nur verloren gehen, wenn die Objektbeschreibung geloescht wird.

integer TagDesMonats()  //Tag des Monats ermitteln
{
    list Zeit = llParseString2List(llGetTimestamp(), ["-", "T"], []);
    return (integer)llList2Float(Zeit, 2);
}

integer GesamtGespendet;
integer MonatGespendet;
integer LetzteSpende;

string Name;

Hovertext()  //Hovertext aktualisieren
{
    string Text1 = "Archon´s TipJar\nBisher gespendet: ";
    string Text2 = "\ndiesen Monat gespendet: ";
    string Text3 = "\nletzte Spende: ";
    string Text4 = " von: ";

    llSetText(Text1 + (string)GesamtGespendet + " L$" +
        Text2 + (string)MonatGespendet + " L$" +
        Text3 + (string)LetzteSpende + " L$" +
        Text4 + Name,
        <1,1,1>, 1);
}

integer Tageswechsel = FALSE;

default
{
    on_rez(integer start_param)
    {
        llResetScript(); // Nach dem rezzen Script resetten
    }

    state_entry()
    {
        llSetTimerEvent(10.0);    //einmal pro Tag pruefen ob ein neuer Monat angefangen hat
        llSetPayPrice(PAY_DEFAULT, [50,100,500,1000]);   //FastPay Werte einstellen individuelle Eingabe ermoeglichen
        list Beschreibung = llCSV2List(llGetObjectDesc());   //Objektbeschreibung auslesen
        GesamtGespendet = llList2Integer(Beschreibung,0);   //Gesamtspende aus Objektbeschreibung uebernehmen
        MonatGespendet = llList2Integer(Beschreibung,1);   //Monatsspende aus Objektbeschreibung uebernehmen
        LetzteSpende = llList2Integer(Beschreibung,2);      //Letzte Spende aus Objektbeschreibung uebernehmen
        Hovertext();                  //Hovertext aktualisieren
    }

    timer()
    {
        if(TagDesMonats() <= 1 && Tageswechsel == FALSE) // Ist heute der erste des Monats?
        {
            MonatGespendet = 0;   // wenn ja, MonatGespendet auf 0 zuruecksetzen.
            llSetObjectDesc(llList2CSV([GesamtGespendet, MonatGespendet, LetzteSpende])); //Objektbeschreibung aktualisieren
            Hovertext();                  //Hovertext aktualisieren
            Tageswechsel = TRUE;
        }
        else if(TagDesMonats() > 1 && Tageswechsel == TRUE)
        {
            Tageswechsel == FALSE;
        }
        llSetTimerEvent(60.0 * 60.0);    //einmal pro Stunde pruefen ob ein neuer Monat angefangen hat
    }

    money(key giver, integer amount)
    {
        Name = llKey2Name(giver);   //Namen des Spenders fuer individualisierten Dank ermitteln
        GesamtGespendet += amount;         //Spende zum Gesamtbetrag hinzurechnen.
        MonatGespendet += amount;         //Spende zum Monatsspendenbetrag hinzurechnen.
        LetzteSpende = amount;            //Spende als Letzte Spende uebernehmen.
        llRegionSayTo(giver,0, "Vielen Dank fuer deine Spende " + Name + ".");   //Dank Nachricht an Spender
        llSetObjectDesc(llList2CSV([GesamtGespendet, MonatGespendet, LetzteSpende])); //Objektbeschreibung aktualisieren
        Hovertext();      //Hovertext aktualisieren
    }
}
 
Und hier jetzt ein Tipja mit Split-Funktion.
Dieser zahlt auch Geld aus.
z.B. für Clubs, bei denen sich Animateure bei Tipjars anmelden müssen.

Code:
string benutzerName;
key benutzerSchluessel;
integer einnahmen;
// Der Besitzeranteil wird in Prozent angegeben und muss zwischen 0 und 100 sein.
integer besitzerAnteil = 50;
// Die Reichweite des Scanners für den automatischen Logout
// 0 = ausgeschaltet
// 1 - 96 = Meter Reichweite
integer scannerReichweite = 10;

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

   state_entry()
   {
      if ((besitzerAnteil >= 0) && (besitzerAnteil <= 100))
         llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
   }

   run_time_permissions(integer permissions)
   {
      if (permissions & PERMISSION_DEBIT)
         state inaktiv;
   }
}

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

   state_entry()
   {
      llSetText("Trinkgelder\nDerzeit kein Mitarbeiter angemeldet.",<1,1,1>,1);
   }

   touch_start(integer total_number)
   {
      if (llSameGroup(llDetectedKey(0)))
      {
         benutzerSchluessel = llDetectedKey(0);
         benutzerName = llKey2Name(benutzerSchluessel);
         einnahmen = 0;
         llInstantMessage(llDetectedKey(0),"Du wurdest angemeldet!");
         state aktiv;
      }
      else
         llInstantMessage(llDetectedKey(0),"Nur für Mitglieder der korrekten Gruppe!");
   }
}

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

   state_entry()
   {
      llSetText("Trinkgelder\n" + benutzerName + " angemeldet.\n Bisher wurden " + (string)einnahmen + " gespendet!",<1,1,1>,1);
      if (scannerReichweite > 0)
         llSensorRepeat(benutzerName,NULL_KEY,AGENT,(float)scannerReichweite,PI,(float)60);
   }

   sensor(integer total_number)
   {
      // ...
   }
   
   no_sensor()
   {
      llInstantMessage(benutzerSchluessel,"Du wurdest abgemeldet!");
      state inaktiv;
   }
   
   touch_start(integer total_number)
   {
      if ((llDetectedKey(0) == llGetOwner()) || (llDetectedKey(0) == benutzerSchluessel))
      {
         llInstantMessage(benutzerSchluessel,"Du wurdest abgemeldet!");
         state inaktiv;
      }
   }

   money(key giver, integer amount)
   {
      llSay(0,"Danke für das Trinkgeld, " + llKey2Name(giver) + "!");
      einnahmen += amount;
      llSetText("Trinkgelder\n" + benutzerName + " angemeldet.\n Bisher wurden " + (string)einnahmen + " gespendet!",<1,1,1>,1);
      integer prozentFuerMitarbeiter = 100 - besitzerAnteil;
      integer geldFuerMitarbeiter = llCeil((float)amount * prozentFuerMitarbeiter / 100);
      if (geldFuerMitarbeiter > 0)
         llGiveMoney(benutzerSchluessel,geldFuerMitarbeiter);
   }
   
}
 

Users who are viewing this thread

Zurück
Oben Unten