Difference between revisions of "Visitor Counter Tracker"

From Second Life Wiki
Jump to navigation Jump to search
m
(Remove Copyright)
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{LSL Header}}
[[Category:LSL_Library]]
[[Category:LSL_Library]]
<div style="padding: 0.5em">
<div>
[[Teleporter_Anywhere]] | [[Language_Scanner]] | [[Visitor_Counter_Tracker]]
[[User:Luxen_Resident]] | [[Teleporter_Anywhere]] | [[Ultimate_Radar]] | [[Language_Scanner]] | [[Visitor_Counter_Tracker]]
</div>
</div>
<div id="box">
<div id="box">
== Zx Visitor Counter - Tracker ==
==Summary==
<div style="padding: 0.5em">
<div style="padding: 0.5em;">
* Daily counter, Monthly counter, Daily report (track, save and display the list of all the visitors names each day)
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.
* Daily report
* 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.
* Land wide (scan all your Land)
* Copyright (C) 2016 Luxen - [[User:Luxen_Resident|Luxen_Resident]] - version 2.6
* Easy to use, no setup needed
* Optimized, low memory, safe and secure
* Fully autonomous.
</div></div>
</div></div>
<div id="box">
<div id="box">
== Code: ==
== Code: ==
</div>
<div style="padding: 0.5em;">
<source lang="lsl2">
<source lang="lsl2">
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//                      Zx Visitor Counter - Tracker v2.6                   //
//                      Zx Visitor Counter - Tracker v3.1                   //
//                                                                          //
//    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,      //
//                       By Luxen - Zonyx Technology                      //
//    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/>  //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////


Line 50: Line 40:
     string Ztext = "[D:" + (string)DCount + " - M:" + (string)NVisits + "]";
     string Ztext = "[D:" + (string)DCount + " - M:" + (string)NVisits + "]";
     llSetPrimitiveParams([PRIM_TEXT, Ztext, <0.667, 0.667, 0.667>, 1.0]);
     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 (Zname)
    {
        if (llListFindList(NewTab, [Zname]) == -1) NewTab += [Zname];
        else return FALSE;
    }
    else
    {
        if (llListFindList(IdTab, [Zkey]) == -1) IdTab += [Zkey];
        else return FALSE;
    }
    return TRUE;
}
}


Line 72: Line 87:
     {
     {
         if (llDetectedKey(0) == Zowner)
         if (llDetectedKey(0) == Zowner)
         {  
         {
             integer Tindex;
             llSleep(0.3);
             integer TnumOfAvatars = llGetListLength(NewTab);
             integer TnumOfAvatars = llGetListLength(NewTab);
             string Vname = "";
             string Vname = "--------------------------"
            if (TnumOfAvatars > 0)
            {
                for(Tindex = 0; Tindex < TnumOfAvatars ; ++Tindex)
                {
                    Vname += llList2String(NewTab, Tindex) + ", ";
                }
                Vname = llDeleteSubString(Vname, -2, -1);
            }
            else Vname = "nobody";
           
            integer OnumOfAvatars = llGetListLength(IdTab);
            if (OnumOfAvatars > 0)
            {
                Vname += "\n Others (" + (string)OnumOfAvatars + "): ";
                for(Tindex = 0; Tindex < OnumOfAvatars ; ++Tindex)
                {
                    Vname += "secondlife:///app/agent/" + llList2String(IdTab, Tindex) + "/username" + ", ";
                }
                Vname = llDeleteSubString(Vname, -2, -1);
            }
           
            llOwnerSay("--------------------------"
                       + "\n Visitors Today:"  
                       + "\n Visitors Today:"  
                       + "\n List (" + (string)TnumOfAvatars + "): " + Vname  
                       + "\n List (" + (string)TnumOfAvatars + "): ";
                      + "\n --------------------------");
                     
            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 --------------------------");
         }
         }
     }
     }
Line 131: Line 129:
                 else if (id != Zowner)
                 else if (id != Zowner)
                 {
                 {
                     string VisitorName = llGetUsername(id);
                     integer Znew = Zadd(id, llGetUsername(id));
                     if (VisitorName)  
                     if (Znew)
                     {
                     {
                         if (llListFindList(NewTab, [VisitorName]) == -1) NewTab += [VisitorName];
                         UpDate = TRUE;
                         else jump Next;
                        ++DCount;
                         ++NVisits;
                     }
                     }
                    else
                    {
                        if (llListFindList(IdTab, [id]) == -1) IdTab += [id];
                        else jump Next;
                    }
                   
                    UpDate = TRUE;
                    ++DCount;
                    ++NVisits;
                 }
                 }
                @Next;
           
             }
             }
             AvatarsDetect = [];
             AvatarsDetect = [];
Line 165: Line 153:
}
}
</source>
</source>
</div></div>

Latest revision as of 16:47, 18 January 2017

User:Luxen_Resident | Teleporter_Anywhere | Ultimate_Radar | Language_Scanner | Visitor_Counter_Tracker

Summary

Track, save and display the list of all the visitors names each day.

  • Daily report
  • Land wide (scan all your Land)
  • Easy to use, no setup needed
  • Fully autonomous.

Code:

//////////////////////////////////////////////////////////////////////////////
//                      Zx Visitor Counter - Tracker v3.1                   //
//                                                                          //
//                        By Luxen - Zonyx Technology                       //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////

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 (Zname) 
    {
        if (llListFindList(NewTab, [Zname]) == -1) NewTab += [Zname];
        else return FALSE;
    }
    else 
    {
        if (llListFindList(IdTab, [Zkey]) == -1) IdTab += [Zkey];
        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)
                {
                    integer Znew = Zadd(id, llGetUsername(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();
    }
}