GridTalk.de
Einfacher Besucherzähler - Druckversion

+- GridTalk.de (https://www.gridtalk.de)
+-- Forum: Werkstatt (https://www.gridtalk.de/forumdisplay.php?fid=4)
+--- Forum: Scripting (https://www.gridtalk.de/forumdisplay.php?fid=23)
+---- Forum: Fertige Scripts (https://www.gridtalk.de/forumdisplay.php?fid=24)
+---- Thema: Einfacher Besucherzähler (/showthread.php?tid=104)



Einfacher Besucherzähler - Rebekka Revnik - 25.08.2010

Noch was kleines (diesmal hoffentlich im richtigen Forum gg).
Eine Art Besucherzähler, am besten am Landepunkt aufzustellen. Das Land muss aber dem Benutzer gehören, weil die Anwesenheit über eigenes Land ermittelt wird. Ist dann egal, wie weit der Besucher weg ist, nur zum Erfassen muss er im 96 m Umkreis sein.
Bei Klick auf das Objekt startet die Überwachung, bei nochmaligem Klick wird sie wieder angehalten und eine Liste der Besucher mit Zeitangabe von-bis ausgegeben.
LG Reb

Code:
// script copyright by Rebekka Revnik

list Avas;
list Keys;
list TimeOn;
list Report;

string Time()
{
    string s = llGetTimestamp();
    list l = llParseString2List(s, ["-", ":", ".", "T"], []);
    s = llList2String(l, 2)+":"+llList2String(l, 1)+"."+llList2String(l, 0);
    s += " - "+llList2String(l, 3)+":"+llList2String(l, 4);
    return s;
}

default
{
    touch_start(integer total_number)
    {
        if(llGetOwner() != llDetectedKey(0)) return;
        llOwnerSay("Running");
        state On;
    }
}

state On
{
    state_entry()
    {
        Avas = [];
        Keys = [];
        TimeOn = [];
        Report = [];
        llSensorRepeat("", NULL_KEY, AGENT, 96, PI, 60);
    }
    state_exit()
    {
        llSensorRemove();
        llSetTimerEvent(0);
    }
    sensor(integer total_number)
    {
        integer i;
        for(i = total_number - 1; i >= 0; i--)
        {
            if(llOverMyLand(llDetectedKey(i)) && llDetectedKey(i) != llGetOwner())
            {
                if(llListFindList(Avas, [llDetectedName(i)]) == -1)
                {
                    Avas += [llDetectedName(i)];
                    Keys += [llDetectedKey(i)];
                    TimeOn += [Time()];
                }
            }
        }
        for(i = llGetListLength(Avas) - 1; i >= 0; i--)
        {
            if(!llOverMyLand(llList2Key(Keys, i)))
            {
                string s = llList2String(Avas, i)+": "+llList2String(TimeOn, i)+" -> " + Time();
                Report += [s];
                Avas = llDeleteSubList(Avas, i, i);
                Keys = llDeleteSubList(Keys, i, i);
                TimeOn = llDeleteSubList(TimeOn, i, i);
            }
        }
    }
    touch_start(integer total_number)
    {
        if(llGetOwner() != llDetectedKey(0)) return;
        integer i;
        llOwnerSay("Stopped.");
        llOwnerSay("Visitors today: " + (string)llGetListLength(Report));
        for(i = 0; i < llGetListLength(Report); i++) llOwnerSay(llList2String(Report, i));
        llResetScript();
    }
}