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."); } } }