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

Verbesserung für TipJar von SLinfo gesucht

Uli Jansma

Inworld Koordinator
Teammitglied
Hallo zusammen :)

Ich suche für SLinfo eine TipJar System. Worum geht es: Wir haben für SLinfo zurzeit mehrere TipJar’s in SL stehen. Sie zeigen die Gesamtsumme der Spenden, die bisherigen Spenden in diesem Monat und den letzten Spender mit seiner Spende an.

Allerdings kommunizieren die TipJar’s untereinander nicht. Daher stimmt die Gesamtsumme nie. Und es wäre logisch, wenn bei einer Spende, alle anderen TipJar’s sich automatisch updaten und bei allen die gleiche Information steht.

Wer wäre in der Lage, dies für uns zu programmieren?

LG,
Uli
 
also in der lage bin ich nicht das zu machen aber ich hätte eine idee wie man sowas machen könnte (ob es klappt und überhaupt geht (Keine ahung))

Man könnte doch das über eine mySQL laufen lassen, sprich wenn jemand ein Tip abgibt schreib das Script in eine Datenbank (natürlich über eine PHP weil das geht ja nicht sofort) einmal wie viel der gespendet hat, dann einmal den namen und dann noch wie viel insgesamt gespendet wurden.

Wenn jetzt z.b. jemand an tipjar 2 was zahlt geht das selbe wieder los.
Speichert und überschreibt in der Datenbank einmal den neuen Tipbetrag, den Namen und die NEUE Gesamtspende.

Und man müsste noch in das script was reinschreiben das es die daten hohlt aus der datenbank alle 30 sekunden. damit man halbwechs up-to-date ist!


Soooo jetzt gebe ich aber weiter an die, die wirklich Scripten können!
Das soll nur eine Idee sein wie man es machen könnte.

Liebe Grüße Aldi!

p.s. mich würde so was auch interessieren!
 
Wenn es nicht zu viele Objekte sind würde ich die Datenbank Idee lieber sein lassen (wegen der ständig nötigen Nachfragen) und lieber den TipJar wenn er aufgestellt wird einmal bei einem zentralen Serverobjekt registrieren, dieses Objekt bekommt dann von jedem Jar gemeldet wenn eine neue Spende da ist und meldet den neuen Stand an alle anderen Jars.
So erfolgt die Kommunikation dann immer nur wenn auch wirklich was los ist.
 
OK! Oder so!
Daran hab ich gar nicht gedacht! Naja! wenn man sowas noch NIE gemacht hat und auch nicht mal die Idee hat wie man so ein script schreibt dann kommt man(n) nicht drauf! :p :lol:
 
Nun, gebaut ist sowas recht schnell... ich könnte da mal was basteln, wenn die Nutzung des Systems nicht nur slinfo vorbehalten bleiben soll.
 
Nein, Criz, soll es nicht. Allerdings brauche ich es Full-Perm, da wir für das Updaten der Slinfo Startseite etwas hinzufügen müssen. Und dies ist nur für SLinfo gedacht, logischerweise ...

LG,
Uli
 
Vorschlag - da ich mal denke, das Criz wenig Lust hat das Script Full-Perm weiterzugeben - nutzt ein zweites Script (welches dann den Update-code enthält) und laßt beide Scripte miteinander kommunizieren. Wenn sie im selben Prim liegen reicht ja eine Priminterne Kommunikation mit verabredeten Parametern ;)
 
Wieso sollte ich dazu keine Lust haben? ^^
Nur weil ich mit CCtech und meinen Scripten in SL gutes Geld verdiene heisst das nicht, das ich auch solch ein geldgeiler Verkäufer bin... hehe... ;)

Nein, natürlich mache ich das für Euch Fullperm. Und gebe es dann als Freebie weiter.
 
Wenn es das fertige Script gibt, wäre ich über eine Version davon echt dankbar, da ich an einer ähnlichen Aufgabe verzweifelt bin und mit Hilfedieser Lösung dann bei der Lösung meines Problems ein gutes Stück weiter wäre.

Danke schon einmal,denn auch ich weis wie viel Zeit und Mühe in einem Script stecken können.

Greetz Archon
 
Hier ist das jetzige TipJar Script:

Code:
//Hannibal Hudson
//TipJar fuer SLinfo.de

//Frei zuer Verwendung fuer alle und jeden. :-)
//Wenn der TipJar nicht von Swapps Swenson eingesetzt wird, auf jeden Fall sorgfaeltig die
//Hinweise auf slinfo.de entfernen!!

//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 = "SLinfo.de TipJar\nBisher gespendet: ";
    string Text2 = "\ndiesen Monat gespendet: ";
    string Text3 = "\nletzte Spende: ";
    string Text4 = " von: ";
    string Text5 = "\nKlick fuer Info";

    llSetText(Text1 + (string)GesamtGespendet + " L$" +
        Text2 + (string)MonatGespendet + " L$" +
        Text3 + (string)LetzteSpende + " L$" +
        Text4 + Name +
        Text5,
        <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, [1,10,100,200]);   //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
    }

    touch_start(integer total_number)   //Eine kleine Info fuer anklicker
    {
        llSay(0, "Spenden-TipJar fuer den Betrieb der Community Webseite www.SLinfo.de");
        llSay(0, "sowie Unterstützung des Social Networks und der Projektgruppen");
        llSay(0, "Deine Spende erscheint namentlich auf der Startseite von SLinfo.de");
    }

    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.
        llSay(0, "Vielen Dank fuer deine Spende " + Name + ".");   //Dank Nachricht an Spender
        llHTTPRequest("hier steht ein link", [HTTP_METHOD, "POST"], "tipjar=" + (string)amount + "&ownerid=" + (string)giver);
        //llOwnerSay("Startseite aktualisiert!");
        llSetObjectDesc(llList2CSV([GesamtGespendet, MonatGespendet, LetzteSpende])); //Objektbeschreibung aktualisieren
        Hovertext();      //Hovertext aktualisieren
    }
}
 
Noctua Janus schrieb:
Wenn es nicht zu viele Objekte sind würde ich die Datenbank Idee lieber sein lassen (wegen der ständig nötigen Nachfragen) und lieber den TipJar wenn er aufgestellt wird einmal bei einem zentralen Serverobjekt registrieren, dieses Objekt bekommt dann von jedem Jar gemeldet wenn eine neue Spende da ist und meldet den neuen Stand an alle anderen Jars.
So erfolgt die Kommunikation dann immer nur wenn auch wirklich was los ist.

Hi

Problem bei der Lösung über einem zentralen Objekt ist, dass wenn 100 Tipjars eine Email bekommen sollen mit den aktuellen Daten, dann braucht es 20000 Sekunden zum versenden der Emails. Bei der lösung mit einem Channel per llRemoteDataReply dauert es zwar nur 300 Sek, aber dafür muss regelmässig der Channel aktuallisiert werden...

Hinzu kommt, wehe SL hat wieder einen Schluckauf und ändert die Key des zentralen Objekts, was leider mal vorkommen kann :(
 
moin,

für den Versand der e-mail reicht ein e-mail-Slave-Script in den Tip Jars.

Der Server benötigt evtl. 10 e-mail Slave´s; damit kann er alle 2 sek eine e-mail versenden.

Das der Grid Schluckauf bekommt und den Key ändert halte ich für ein geringes Risiko.
Ich habe seit dem 26.Dez.2007 einen Update-Server am laufen und er arbeitet seitdem Fehlerfrei mit demselben Key. Ein zweiter Server auf einer anderen Sim (als Redundanz) hat seither nur 12 mal anfragen erhalten. Meist wenn Linden Updates tankt. Auch dieser hat immer noch denselben Key.

gruss thinkangel
 
Uli Jansma schrieb:
Nein, Criz, soll es nicht. Allerdings brauche ich es Full-Perm, da wir für das Updaten der Slinfo Startseite etwas hinzufügen müssen. Und dies ist nur für SLinfo gedacht, logischerweise ...

LG,
Uli

Hallo Uli,

ich habe mich jetzt mal drangesetzt an den Tipjar, bzw. das Tipjar-System. Ist eigentlich recht simpel und schnell gebaut. Allerdings würde ich es gerne mit no mod weitergeben. Die Gründe tun hier nichts zur Sache.

Ich würde eine Art API, oder besser ausgedrückt, eine Art Schnittstelle einbauen.

Konfigurierbar ist der Server sowieso über eine inliegende Notecard. Dort kann man dann auch eine URL angeben, an die die Tipjar-Daten per POST geschickt werden. Diese "Schnittstelle" würde alle relevanten Daten in POST-Variablen übergeben und Euer Script hier im Forum müsste nur noch die entsprechenden POST-Variablen auf eure eigenen Variablen ummappen und könnte dann mit diesen Daten umgehen, wie bisher auch (ich nehme an, ihr habt etwas ähnliches schon).
Ganz simpel.

Das würde das ganze relativ flexibel halten. Als Ziel-Umgebung kann sowohl PHP, as auch Python, Perl oder sonstiges benutzt werden, was POST Anfragen entgegen nehmen kann. Da dieses Forum auf PHP basiert, sollte das absolut kein Problem sein.

Wäre toll, wenn Du mir ungefähr mitteilen würdest, welche Daten ihr von dem Tipjar haben wollt. Ich nehme an, das werden die üblichen Daten sein wie:

- Letzter Spendenbetrag
- Letzter Spender (Name und UUID)
- Region und Parcel des Client-Tipjars in den gespendet wurde
- Spenden-Betrag insgesamt

Solche Sachen wie: Spenden des aktuellen Monats, Spenden pro Tag, etc... könnten dann von Eurem PHP-Script über eine Datenbank generiert werden. Darum sollte sich der Tipjar-Server nicht kümmern müssen.

Ich denke ich bin morgen im Laufe des Tages damit fertig.

Melde mich dann wieder.
 
So... habe das System soweit fertig. Und es funktioniert prächtig. ;)

Hier mal die Doku, ich hoffe ihr könnt english. Vielleicht hat ja jemand Lust sie zu übersetzen.

Anhand der Doku sieht man recht genau, wie das System jetzt funktioniert.

Uli, oder wer auch immer da der Verantwortliche ist, sag mir Bescheid ob ihr das nun dann wollt, oder nicht.

Code:
CCtech Tipjar System (Client/Server Application)
===========================================

Written by Criz Collins, 18.01.2009

DOCUMENTATION (english)
==========================

What does the package contain?
You'll get a box which contains two things:
    -   CCtech Tipjar System (Server)  (modify/copy)
    -   DOCUMENTATION (you're just reading this)

What is this?
The CCtech Tipjar System is a client/server application for Second Life. First of
all, it consists of a server, which looks like a grungy cube. The server has to 
rezzed inworld. It then will tell you all important things you have to know.

What does it do?
You can have one Tipjar Server and hundreds of  client tipjars everywhere in 
Second Life. The server manages the client tipjars, counts the amount of
donations and sends all important data to a costumized URL (POST data).
The clients can be rezzed everywhere you want or you are allowed to. Everyone
can then pay their donations to the client tipjars. The client tipjars sends their
data back to the server.

Who needs this?
Well, there are many people out there, which may need this. Community owner
or admins who has inworld presentation of their communities, DJs  or big 
companies. 

Has it any limitations?
Well, sure. Like every application or script in Second Life it highly depends
on the actual performance of (the) Second Life (Grid/Servers). Because it sends
mails from the server to each client and from each client back to the server, it
sometimes takes some time, until the shown data is uptodate. So be patient
and don't be angry if it is not fast enough.

How would I use this stuff?
Okay here we go... As I said, first of all you need to rezz the server. After you've
rezzed the server, it will tell you that you should not take it back into your 
inventory, when it already has some clients to manage. This would cause that
the server loses all data.
The second thing, that it will tell you right after rezzing is, that you have to
click (touch) at the server to automatically rezz one client (mod/copy/trans).
The client will then automatically ask the server for his UUID and saves it in 
its description field. Now you have to take the client tipjar into your inventory.
From now on, you are ready to use the system.
Simply rezz the client everywhere you are allowed to and all the clients will
then directly communicate with your server.

What's about the configuration?
Oh yes, this is a good question, isn't it? Well, only the server needs to be 
configured. It holds a configuration notecard in its inventory, which is highly 
documented. There are many options related to the shown hovertext or the
donation prices for the pay-box. The receiver of the money has also to be
configured there, otherwise all money goes to me. *g*
There is also an option for the API url which has to be set to your own script
on your own webspace. This script has to accept POST-form data.
Well, as I said, the configuration notecard is highly commented. Take a deeper
look at that one.
By the way, the configuration can be changed at any time. this will not cause
the loss of all data. Every client will be updated with the new configuration
right after it sends own data to the server, when someone makes a donation 
to the client.

POST-data? Which POST variables will be sent and what does they mean?
Every time a client tipjar gets paid, the client tipjar will send the data about
the last donation to the server. When the server receives such data from a 
client tipjar, it generates a http-post-request to your script with the following 
variables:

$_POST
(
    [region] => The region the server is in
    [parcel] => The parcel the server is in
    [position] => the coordinates of the server within the region above
    [uuid] => the UUID or object-key of the server
    [ownerkey] =>  The UUID or avatar-key of the owner of the server
    [ownername] => The avatar-name of the owner of the server
    [numclients] => The number of client tipjars actually managed by the server
    [sum] => The complete sum of all donations
    [lastuser] => The avatar-name of the last donator
    [lastamount] => The amount of the last donation
    [csum] => The sum of all donations at this client tipjar
    [cownername] => The avatar-name of the owner of the client tipjar (yes, they are copy+trans)
    [cregion] => The region the client tipjar is in
    [cparcel] =>  The parcel the client tipjar is in
)

With this data within your script, you can generate a list of all donations from
all client tipjars on your webpage with all relevant data about the donations.

Lemme show you a very simple example for PHP:

<?php
if (!$_POST || !$_POST['uuid'] || strlen($_POST['uuid']) != 36) {
    exit;
}
$DATA = array();
foreach($_POST AS $key => $val) {
    $DATA[$key] = trim(urldecode($val));
}
?>

This is all you need to get all POST variables into an array called $DATA.


So... have fun with your brandnew Tipjar System!
 
Und hier ist die config notecard, damit ihr seht, was alles eingestellt werden kann:

Code:
// CCtech Tipjar System (configuration file)
// written by Criz Collins 18.01.2009

//       !!!!!  ATTENTION  !!!!!!
// Set the key of the receiver for the money here
MONEY_TARGET_KEY=ea5efe6a-651b-46d2-b407-04e790fb7916

// Set the URL to your own API script which receives the POST variables
// See the DOCUMENTATION for the POST variables!
API_SERVER_URL=http://www.your-server.com/tipjar-api-script.php

// Set the first, upper line of the hovertext for each client tipjar
HOVERTEXT_FIRST_LINE=Unser Tipjar

// Set an optional second line for each tipjar. Can be empty
HOVERTEXT_SECOND_LINE=Unterstuetze uns mit einer Spende!

// Set an optional last, bottom line of the hovertext of each tipjar. Can be empty
HOVERTEXT_LAST_LINE=

// Set the hovertext for the "sum of all donations:"
HOVERTEXT_SUM_ALL=Gesamt Spenden bisher:

// Set the hovertext for the "sum of donations at this tipjar:"
HOVERTEXT_SUM_CLIENT=Spenden an diesem Tipjar:

// Set the hovertext for the "Last donator:"
HOVERTEXT_LAST_PAYER=Letzter Spender:

// Set the hovertext for the "Last donation:"
HOVERTEXT_LAST_AMOUNT=Letzte Spende:

// Set the color of the hovertext. Has to be a vector!
HOVERTEXT_COLOR=<1,0,0>

// Set a "Thank you" text
THANK_TEXT=Wir danken Dir ganz herzlich fuer Deine Spende!

// Set the default price which should be displayed in pay-box
DEFAULT_PRICE=100

// Set the prices which should be displayed on the buttons of the pay-box
BUTTON_1=50
BUTTON_2=100
BUTTON_3=500
BUTTON_4=1000
 

Users who are viewing this thread

Zurück
Oben Unten