GridTalk.de

Normale Version: Einfacher Besucherzähler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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();
    }
}