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

Tutorial: Trinkgeld-Script bauen (Tipjar)

Mir wurde gerade eine erweiterte Version des Tip-Jar Scriptes zugespielt, incl Einstellungen über Notecard usw.

Code:
string benutzerName; 
string ueberschrift;
key benutzerSchluessel; 
integer einnahmen;
integer samegroup; 
integer besitzerAnteil; 
integer scannerReichweite;
string zeile2;
string zeile31;
string zeile32;
string anmeldung;
string abmeldung;
string falschegruppe;
string danke;
vector textfarbe;
key qryNotecard;
string notecard_name = "tjconfig";
integer notecard_line = 0;



init()

{

    // Make sure we actually have a notecard matching

    // the name. If we do, process it.

    if (llGetInventoryType(notecard_name) == INVENTORY_NOTECARD)

    {

        readNotecard();

       return;

    }

}

readNotecard()

{

    llOwnerSay("Lese Konfiguration. Bitte warten.");

    // Send a request for the first line (line 0). Any subsequent

    // lines will be requested when the dataserver event is

    // triggered.

    notecard_line = 0;

    qryNotecard = llGetNotecardLine(notecard_name, notecard_line) ;

}

checkLine(string line)

{

    // Ignore empty lines and comment lines.

    if((line != "") && (llGetSubString(line, 0, 1) != "//"))

    {

        // Extract the line details. Assume that valid

        // settings are in the format 'name=value', like

        // a Windows .INI file. Ignore any which are not.

        list Details = llParseString2List(line, ["="], []);

        string keyname = llList2String(Details, 0);
        
        if (keyname == "configueberschrift")
        {
            ueberschrift = llList2String(Details, 1);

            llOwnerSay(keyname +" = "+ ueberschrift);
        }
        
        if (keyname == "configscanner")
        {
            scannerReichweite = llList2Integer(Details, 1);
            llOwnerSay(keyname +" = "+ (string)scannerReichweite);
        }        
        
        if (keyname == "configanteil")
        {
            besitzerAnteil = llList2Integer(Details, 1);
            llOwnerSay(keyname +" = "+ (string)besitzerAnteil);            
        }
                
        if (keyname == "configgroup")
        {
            samegroup = llList2Integer(Details, 1);
            llOwnerSay(keyname +" = "+ (string)samegroup);            
        }

        if (keyname == "configzeile2")
        {
            zeile2 = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ zeile2);            
        }

        if (keyname == "configzeile31")
        {
            zeile31 = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ zeile31);            
        }

        if (keyname == "configzeile32")
        {
            zeile32 = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ zeile32);            
        }
        
        if (keyname == "configanmeldung")
        {
            anmeldung = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ anmeldung);            
        }
        
        if (keyname == "configabmeldung")
        {
            abmeldung = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ abmeldung);            
        }
        
        if (keyname == "configfalschegruppe")
        {
            falschegruppe = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ falschegruppe);            
        }                        
        
        if (keyname == "configdanke")
        {
            danke = llList2String(Details, 1);
            llOwnerSay(keyname +" = "+ danke);            
        }        
        
        if (keyname == "configtextfarbe")
        {
            string strtextfarbe = llList2String(Details, 1);
            
            textfarbe = (vector)llList2String([strtextfarbe], 0);
            
            llOwnerSay(keyname +" = "+ (string)textfarbe);            
        }                
        
        
    }

    // Get the next line.
    notecard_line = notecard_line + 1;
    qryNotecard = llGetNotecardLine(notecard_name, notecard_line) ;

}

// Events



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

   state_entry() 
   { 
      init();
   } 

    dataserver(key query, string data)

    {

        // Check whether this is a response to our notecard

        // query.

        if (query == qryNotecard)

        {

            if (data != EOF)

            {

                // Handle the returned notecard line.

                checkLine(data) ;

                return;

            }

            else

            {

                llOwnerSay("Konfiguration eingelesen.");

            }

        }

      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();
      init();
   } 

   state_entry() 
   { 
      llSetText(ueberschrift,textfarbe,1); 
   } 

//


    changed(integer change) { // something changed
        if (change & CHANGED_INVENTORY) { // and it was the inventory
                llOwnerSay("Script wird neu gestartet!"); // Reset Hinweis
                llResetScript();
                init();
            }
    }


        
//            
   touch_start(integer total_number) 
   { 
    if ((llSameGroup(llDetectedKey(0))) && (samegroup==1))
      {
         benutzerSchluessel = llDetectedKey(0); 
         benutzerName = llKey2Name(benutzerSchluessel); 
         einnahmen = 0; 
         llInstantMessage(llDetectedKey(0),anmeldung); 
         state aktiv; 
      }
    else if (samegroup==0)
      {
         benutzerSchluessel = llDetectedKey(0); 
         benutzerName = llKey2Name(benutzerSchluessel); 
         einnahmen = 0; 
         llInstantMessage(llDetectedKey(0),anmeldung); 
         state aktiv; 
      }
   else
     llInstantMessage(llDetectedKey(0),falschegruppe); 
     
   } 
} 

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

   state_entry() 
   { 
      llSetText(ueberschrift+"\n" + benutzerName + " " + zeile2+"\n" + zeile31 + " " +(string)einnahmen + " " + zeile32,textfarbe,1); 
      if (scannerReichweite > 0) 
         llSensorRepeat(benutzerName,NULL_KEY,AGENT,(float)scannerReichweite,PI,(float)60); 
   } 

//


    changed(integer change) { // something changed
        if (change & CHANGED_INVENTORY) { // and it was the inventory
                llOwnerSay("Script wird neu gestartet!"); // Reset Hinweis
                llResetScript();
                init();
            }
    }


        
//  


   sensor(integer total_number) 
   { 
      // ... 
   } 
    
   no_sensor() 
   { 
      llInstantMessage(benutzerSchluessel,abmeldung); 
      state inaktiv; 
   } 
    
   touch_start(integer total_number) 
   { 
      if ((llDetectedKey(0) == llGetOwner()) || (llDetectedKey(0) == benutzerSchluessel)) 
      { 
         llInstantMessage(benutzerSchluessel,abmeldung); 
         state inaktiv; 
      } 
   } 

   money(key giver, integer amount) 
   { 
      llSay(0,danke + " " + llKey2Name(giver) + "!"); 
      einnahmen += amount; 
      llSetText(ueberschrift+"\n" + benutzerName + " "+zeile2+"\n" + zeile31 + " " +(string)einnahmen + " " + zeile32,textfarbe,1); 
      integer prozentFuerMitarbeiter = 100 - besitzerAnteil; 
      integer geldFuerMitarbeiter = llCeil((float)amount * prozentFuerMitarbeiter / 100); 
      if (geldFuerMitarbeiter > 0) 
         llGiveMoney(benutzerSchluessel,geldFuerMitarbeiter); 
   } 
    
}

Und hier die Config-Notecard dazu, Name muß tjconfig lauten:
Code:
// Anteil der Einnahmen fuer den Owner in Prozent (10 = 10 Prozent für den Owner)
configanteil=10

// Abwesendheitssensorreichweite (z.B. 30 = 30 Meter Umkreis)

// 1-96 Meter, 0 schaltet den Sensor aus
configscanner=12

// Muss der Benutzer des Tipjars zu der Gruppe gehören (1 = ja /0 = nein)
configgroup=0

// Ueberschrift fuer den TipJar (Zeile 1)
configueberschrift=Trinkgelder

// Zeile 2 (Benutzername + Meldung)
configzeile2=ist angemeldet

// Zeile 3 (Meldung + Einnahmen + Meldung)
configzeile31=Bislang wurden
configzeile32=gespendet!

// Anmeldung an den Tipjar (Meldung an den Benutzer)
configanmeldung=Du wurdest angemeldet

// Abmeldung vom Tipjar (Meldung an den Benutzer)
configabmeldung=Du wurdest abgemeldet

//Dankmeldung an den edlen Spender
configdanke=Danke fuer das Trinkgeld,

// Meldung fuer falsche Gruppe
configfalschegruppe=Nur für Mitglieder der korrekten Gruppe!

// Textfarbe (SL-Typisch!!)
configtextfarbe=<1,1,1>

Das ganze stammt von einem irren Vogel von Germania Woods ;-)

Von eben diesem und mir natürlich auch, grüße an die SLinfo community.

MfG
Hannibal
 

BLUTFALKE

Neuer Nutzer
also das script funzt bei mir nicht genau wie das letzte vom Calyn hab ich was falsch gemacht oder ist in beiden irgendwo ein fehler? alle anderen davor haben geklappt nur die mit dem sensor nicht mehr...

kann mir mal jemand helfen?
 

Calyn Canning

Aktiver Nutzer
Hallo zusammen,

da ich des öfteren gefragt wurde, was hier dran nicht funktionierte... es ist das fiese ü im Wörtchen "für". Daher habe ich nun mal eine Variante ohne dieses Problem hier hereingestellt. Diese könnt ihr so wie sie hier steht benutzen.

Calyn

Code:
string username;
key userkey = NULL_KEY;

integer total;

integer commission = 10;

integer scanrange = 30;

displayHoverText() {
    if (userkey == NULL_KEY)
        llSetText("Trinkgelder\nKein Mitarbeiter angemeldet.", <1,1,1>, 1);
    else
        llSetText(username + "'s Trinkgelder\nBisher wurden " + (string)total + " L$ gespendet!", <1,1,1>, 1);
}

loginCurrentAvatar(key avatar) {
    userkey = avatar;
    username = llKey2Name(userkey);
    total = 0;
    llInstantMessage(userkey, "Du wurdest angemeldet!");
}

logoutCurrentUser() {
    llInstantMessage(userkey, "Du wurdest abgemeldet!");
    userkey = NULL_KEY;
    username = "";
}

activateScanner() {
    if (scanrange > 0)
        llSensorRepeat(username, NULL_KEY, AGENT, (float)scanrange,PI, (float)60);
}

payCurrentUser(float amount) {
    integer amountForUser = llCeil(amount * (100 - commission) / 100);
    if (amountForUser > 0)
        llGiveMoney(userkey, amountForUser);
}

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

    state_entry() {
        if ((commission > 0) && (commission <= 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() {
        displayHoverText();
    }

    touch_start(integer total_number) {
        if (llSameGroup(llDetectedKey(0))) {
            loginCurrentAvatar(llDetectedKey(0));
            state aktiv;
        } else {
            llInstantMessage(llDetectedKey(0), "Nur fuer Mitglieder der korrekten Gruppe!");
        }
    }

}

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

    state_entry() {
        displayHoverText();
        activateScanner();
    }

    sensor(integer total_number) {
        // do nothing
    }
    
    no_sensor() {
        logoutCurrentUser();
        state inaktiv;
    }
    
    touch_start(integer total_number) {
        if (llDetectedKey(0) == llGetOwner() || llDetectedKey(0) == userkey) {
            logoutCurrentUser();
            state inaktiv;
        }
    }

    money(key giver, integer amount) {
        llSay(0, "Danke fuer das Trinkgeld, " + llKey2Name(giver) + "!");
        total += amount;
        displayHoverText();
        payCurrentUser(amount);
    }

}
 

Aktive User in diesem Thread

Oben Unten