Besucherzähler mit E-Mail Benachrichtigung
Damit dieses Script funktionieren kann muss zuerst in der OpenSIM-Konfigurationsdatei opensim.ini die E-Mail Funktion im Abschnitt SMTP eingeschaltet und konfiguriert werden.
// Besucherzähler mit E-Mail Benachrichtung
// von Blub Blinker, www.swiss-sl.ch
float range = 100; // sucht im Radius von 100 Metern nach Besuchern
float rate = 10.0; // Zeitabstand in der erneut gesucht wird, 1,0 = 1 Sekunde
// E-Mail Adresse auf die eigene anpassen
string email_address = "adresse@domain.xyz";
// Name der zu kontrollierenden Region
// Die versandte E-Mail beinhaltet die Koordinaten
string location_name = "OpenSIM-Region";
list single_name_list;
list visitor_list;
integer isNameOnList( string name )
{
list single_name_list;
single_name_list += name;
return (-1 != llListFindList( visitor_list, single_name_list ) );
}
sendEmail()
{
string csv = llList2CSV( visitor_list );
llEmail( email_address, "Visitor List: " + location_name, csv );
}
resetList()
{
single_name_list = llDeleteSubList(single_name_list, 0, llGetListLength(single_name_list));
llSay( 0, "Reset abgeschlossen");
}
// Hilfe Befehle
sayHelp( integer is_owner )
{
if( is_owner )
{
llSay( 0, "Dieses Objekt speichert die Namen von jedem Avatars der" );
llSay( 0, "in den Bereich von "+ (string)((integer)range) + " Metern kommt." );
llSay( 0, "Kommandos die der Besitzer sagen kann:" );
llSay( 0, "'help' - Zeigt diese Anleitung" );
llSay( 0, "'say list' - Zeigt die Namen aller Avatare auf der Liste");
llSay( 0, "'reset list' - Loescht die Namen auf der Liste" );
llSay( 0, "' email list' - Sendet die Namen auf der Liste als E-Mail" );
}
else
{
llSay( 0, "Sorry, nur der Besitzer kann editieren." );
}
}
// Script-Start
default
{
state_entry()
{
llSay(0, "Besucherzaehler wurde gestartet.");
llSay(0, "Der Besitzer kann mit 'help' eine Kurzanleitung anfordern.");
llSensorRepeat( "", "", AGENT, range, TWO_PI, rate );
llListen(0, "", llGetOwner(), "");
// Wechsle hier das Zeitintervall in der die E-Mail Benachrichtigung zugesandt werden soll (Standard ist 60x60 Sekunden)
// = 3600 Sekunden = 1x pro Stunde
llSetTimerEvent( 60 * 60 );
}
// Sendet die E-Mail im oben angegebenem Zeitintervall
timer()
{
sendEmail();
resetList();
}
// Gibt den Hilfe-Befehl aus beim anklicken
touch_start( integer num_detected )
{
integer i;
for( i = 0; i < num_detected; i++ )
{
sayHelp( llDetectedKey(i) == llGetOwner() );
}
}
// Erfasst die Avatare mit Zeitstempel
sensor( integer number_detected )
{
integer i;
for( i = 0; i < number_detected; i++ )
{
// Den Eigentümer nicht mitzählen
if( llDetectedKey( i ) != llGetOwner() )
{
string detected_name = llDetectedName( i );
if( isNameOnList( detected_name ) == FALSE ) // Ja oder Nein, TRUE oder FALSE
{
float seconds = llGetWallclock();
float minutes = seconds / 60.0;
float hours = minutes / 60.0;
integer hours_int = (integer) hours;
integer minutes_int = ((integer)minutes) % 60;
if( minutes_int < 10 )
{
visitor_list += (string) hours_int + ":0" + (string) minutes_int;
}
else
{
visitor_list += (string) hours_int + ":" + (string) minutes_int;
}
visitor_list += detected_name;
}
}
}
}
// Besitzer-Befehle
listen( integer channel, string name, key id, string message )
{
if( id != llGetOwner() )
{
return;
}
if( message == "help" ) // Tippe im Chat /0 help und Du erhälst Hilfe zu den Befehlen
{
sayHelp( TRUE );
}
else
if( message == "say list" ) // Tippe im Chat /0 say list und Du erhälst eine Liste aller Avatare
{
llSay( 0, "Avatar-Liste:" );
integer len = llGetListLength( visitor_list );
integer i;
for( i = 0; i < len; i++ )
{
llSay( 0, llList2String(visitor_list, i) );
}
llSay( 0, "Gesamt = " + (string)len );
}
else
if( message == "email list" )
{
sendEmail();
llSay(0, "E-Mail wird versendet.");
}
else
if( message == "reset list" ) // Tippe im Chat /0 reset list um die Liste zurückzusetzen
{
visitor_list = llDeleteSubList(visitor_list, 0, llGetListLength(visitor_list));
llSay( 0, "Reset erfolgreich.");
}
}
}