Difference between revisions of "Visitor Counter Tracker"

From Second Life Wiki
Jump to navigation Jump to search
(Version 2.7)
(Version 3.0)
Line 11: Line 11:
* Land wide (scan all your Land, no distance limit), easy to use, no setup needed and no lag.
* Land wide (scan all your Land, no distance limit), easy to use, no setup needed and no lag.
* Fully autonomous: No need to reset it, no need to reset the counters, no need to clear the visitors name list. This tool will do it for you when needed.
* Fully autonomous: No need to reset it, no need to reset the counters, no need to clear the visitors name list. This tool will do it for you when needed.
* Copyright (C) 2016 Luxen - [[User:Luxen_Resident|Luxen_Resident]] - version 2.7
* Copyright (C) 2016 Luxen - [[User:Luxen_Resident|Luxen_Resident]] - version 3.0
* Optimized, low memory, safe and secure
* Optimized, low memory, safe and secure
</div></div>
</div></div>
Line 20: Line 20:
<source lang="lsl2">
<source lang="lsl2">
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//                      Zx Visitor Counter - Tracker v2.7                   //
//                      Zx Visitor Counter - Tracker v3.0                   //
//                                                                          //
//                                                                          //
//    Copyright (C) 2016 Luxen - Zonyx Technology                          //
//    Copyright (C) 2016 Luxen - Zonyx Technology                          //
Line 63: Line 63:
     }
     }
     return llDeleteSubString(Fname, -2, -1);
     return llDeleteSubString(Fname, -2, -1);
}
integer Zadd(key Zkey, string Zname)
{
    if (Zkey)
    {
        if (llListFindList(IdTab, [Zkey]) == -1) IdTab += [Zkey];
        else return FALSE;
    }
    else
    {
        if (llListFindList(NewTab, [Zname]) == -1) NewTab += [Zname];
        else return FALSE;
    }
    return TRUE;
}
}


Line 128: Line 142:
                 {
                 {
                     string VisitorName = llGetUsername(id);
                     string VisitorName = llGetUsername(id);
                     if (VisitorName)  
                    integer Znew = FALSE;
                    {
                     if (VisitorName) Znew = Zadd(NULL_KEY, VisitorName);
                        if (llListFindList(NewTab, [VisitorName]) == -1) NewTab += [VisitorName];
                    else Znew = Zadd(id, "???");
                        else jump Next;
                     if (Znew)
                     }
                    else
                     {
                     {
                         if (llListFindList(IdTab, [id]) == -1) IdTab += [id];
                         UpDate = TRUE;
                         else jump Next;
                        ++DCount;
                         ++NVisits;
                     }
                     }
                   
                    UpDate = TRUE;
                    ++DCount;
                    ++NVisits;
                 }
                 }
                @Next;
           
             }
             }
             AvatarsDetect = [];
             AvatarsDetect = [];

Revision as of 04:59, 1 June 2016

Teleporter_Anywhere | Language_Scanner | Visitor_Counter_Tracker

Zx Visitor Counter - Tracker

  • Daily counter, Monthly counter, Daily report (track, save and display the list of all the visitors names each day)
  • Land wide (scan all your Land, no distance limit), easy to use, no setup needed and no lag.
  • Fully autonomous: No need to reset it, no need to reset the counters, no need to clear the visitors name list. This tool will do it for you when needed.
  • Copyright (C) 2016 Luxen - Luxen_Resident - version 3.0
  • Optimized, low memory, safe and secure

Code:

//////////////////////////////////////////////////////////////////////////////
//                      Zx Visitor Counter - Tracker v3.0                   //
//                                                                          //
//    Copyright (C) 2016 Luxen - Zonyx Technology                           //
//    This program is free software: you can redistribute it and/or modify  //
//    it under the terms of the GNU General Public License version 3, as    //
//    published by the Free Software Foundation.                            //
//                                                                          //
//    This program is distributed in the hope that it will be useful,       //
//    but WITHOUT ANY WARRANTY; without even the implied warranty of        //
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
//    GNU General Public License for more details.                          //
//                                                                          //
//   You should have received a copy of the GNU General Public License      //
//    along with this program.  If not, see <http://www.gnu.org/licenses/>  //
//////////////////////////////////////////////////////////////////////////////

key Zowner;
integer NVisits;
string ZDate;
integer DCount = 0;
list NewTab  = [];
list IdTab = [];

string Ztime()
{
    string DayDate = llGetSubString(llGetDate(), 8, 9);
    return DayDate;
}
Zcount()
{
    string Ztext = "[D:" + (string)DCount + " - M:" + (string)NVisits + "]";
    llSetPrimitiveParams([PRIM_TEXT, Ztext, <0.667, 0.667, 0.667>, 1.0]);
}
string Zreport(integer Ztab, integer Tcount)
{
    string Fname = "";
    integer index2;
    for(index2 = 0; index2 < Tcount ; ++index2)
    {
        if (Ztab) Fname += llList2String(NewTab, index2) + ", ";
        else Fname += "secondlife:///app/agent/" + llList2String(IdTab, index2) + "/username" + ", ";
    }
    return llDeleteSubString(Fname, -2, -1);
}
integer Zadd(key Zkey, string Zname)
{
    if (Zkey) 
    {
        if (llListFindList(IdTab, [Zkey]) == -1) IdTab += [Zkey];
        else return FALSE;
    }
    else 
    {
        if (llListFindList(NewTab, [Zname]) == -1) NewTab += [Zname];
        else return FALSE;
    }
    return TRUE;
}

default
{
    state_entry()
    {
        Zowner = llGetOwner();
        NVisits = (integer)llGetObjectDesc();
        ZDate = Ztime();
        Zcount();
        llSetTimerEvent(60.0);
    }
    
    on_rez(integer start_param)
    {
        llSetObjectDesc("0");
        llResetScript(); 
    }
    
    touch_start(integer n) 
    {
        if (llDetectedKey(0) == Zowner)
        {
            llSleep(0.3);
            integer TnumOfAvatars = llGetListLength(NewTab);
            string Vname = "--------------------------"
                       + "\n Visitors Today:" 
                       + "\n List (" + (string)TnumOfAvatars + "): ";
                       
            if (TnumOfAvatars > 0) Vname += Zreport(TRUE, TnumOfAvatars);
            else Vname += "nobody";
            TnumOfAvatars = llGetListLength(IdTab);
            if (TnumOfAvatars > 0) Vname += "\n Others (" + (string)TnumOfAvatars + "): " + Zreport(FALSE, TnumOfAvatars);
            llOwnerSay(Vname + "\n --------------------------");
        }
    }
    
    changed(integer change)
    {
        if (change & CHANGED_REGION_START)
        {
            llSleep(60.0);
            llSetTimerEvent(60.0);
        }
    }
    
    timer()
    {
        integer UpDate = FALSE;
        list AvatarsDetect  = llGetAgentList(AGENT_LIST_PARCEL, []);
        integer numOfAvatars = llGetListLength(AvatarsDetect);
        if (numOfAvatars > 0)
        {
            integer ObjectGroup = FALSE;
            list details = llGetObjectDetails(llGetKey(),[OBJECT_GROUP]);
            if(llList2Key(details, 0)) ObjectGroup = TRUE;
            
            integer index;
            for (index = 0; index < numOfAvatars; ++index)
            {
                key id = llList2Key(AvatarsDetect, index);
                if (llSameGroup(id) && ObjectGroup)  ;
                else if (id != Zowner)
                {
                    string VisitorName = llGetUsername(id);
                    integer Znew = FALSE;
                    if (VisitorName) Znew = Zadd(NULL_KEY, VisitorName);
                    else Znew = Zadd(id, "???");
                    if (Znew)
                    {
                        UpDate = TRUE;
                        ++DCount;
                        ++NVisits;
                    }
                }
            }
            AvatarsDetect = [];
        }
        
        if (ZDate != Ztime())
        {
            llSleep(1.0);
            ZDate = Ztime();
            if (ZDate == "01") llSetObjectDesc("0");
            else llSetObjectDesc((string)NVisits);
            llResetScript();
        }
        else if (UpDate) Zcount();
    }
}