Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- key gkManagerKey = "Manager_Key_Goes_Here"; // This is the only person who can click and operate this script.
- float gfScanIntervalSeconds = 5; // Can't be less than a second.
- key gkHttp;
- list glPreviousAvatars;
- //
- string DateTimeSort(integer iUnixTime)
- {
- return Unix2DateSort(iUnixTime) + " " + Unix2TimeSort(iUnixTime);
- }
- string Unix2TimeSort(integer iUnixTime)
- // Returns: hour:minute:second:AM/PM
- {
- integer SECONDS_PER_DAY = 86400;
- integer SECONDS_PER_HOUR = 3600;
- integer SECONDS_PER_MINUTE = 60;
- string sAP;
- //
- integer seconds_since_midnight = iUnixTime % SECONDS_PER_DAY;
- integer hour = seconds_since_midnight / SECONDS_PER_HOUR;
- integer second = seconds_since_midnight % SECONDS_PER_HOUR;
- integer minute = second / SECONDS_PER_MINUTE;
- second = second % SECONDS_PER_MINUTE;
- //
- if (hour >= 12)
- {
- sAP = "PM";
- hour -= 12;
- }
- else sAP = "AM";
- //
- return sAP + " " + llGetSubString("0" + (string)hour, -2, -1) + ":" + llGetSubString("0" + (string)minute, -2, -1) + ":" + llGetSubString("0" + (string)second, -2, -1);
- }
- string Unix2DateSort(integer iUnixTime)
- // Returns: "m/d/yyyy"
- {
- integer SECONDS_PER_DAY = 86400;
- integer day = iUnixTime / SECONDS_PER_DAY + 1;
- integer year = 1970;
- integer days_per_year = DaysPerYear(year);
- //
- while (day > days_per_year)
- {
- day -= days_per_year;
- ++year;
- days_per_year = DaysPerYear(year);
- }
- integer month = 1;
- integer days_per_month = DaysPerMonth(year, month);
- while (day > days_per_month)
- {
- day -= days_per_month;
- if (++month > 12)
- {
- ++year;
- month = 1;
- }
- days_per_month = DaysPerMonth(year, month);
- }
- //
- return (string)year + "-" + llGetSubString("0" + (string)month, -2, -1) + "-" + llGetSubString("0" + (string)day, -2, -1);
- }
- integer DaysPerMonth(integer iYear, integer iMonth)
- {
- if (iMonth < 8)
- {
- if (iMonth % 2 == 0)
- {
- if (iMonth == 2)
- {
- if (LeapYear(iYear)) return 29;
- return 28;
- }
- return 30;
- }
- return 31;
- }
- if (iMonth % 2 == 0) return 31;
- return 30;
- }
- integer DaysPerYear(integer iYear)
- {
- if (LeapYear(iYear)) return 366;
- return 365;
- }
- integer LeapYear(integer iYear)
- {
- if (iYear % 4 == 0)
- {
- if (iYear % 100 == 0)
- {
- if (iYear % 400 == 0) return TRUE;
- return FALSE;
- }
- return TRUE;
- }
- return FALSE;
- }
- default
- {
- on_rez(integer i)
- {
- llResetScript();
- }
- state_entry()
- {
- llSetTimerEvent(gfScanIntervalSeconds);
- llDialog(gkManagerKey, "\nThe visitor logging script is now scanning for visitors.", ["...","OK","..."], 123459);
- }
- timer()
- {
- integer i;
- list lAvatars = llGetAgentList(AGENT_LIST_PARCEL_OWNER, []);
- integer iAviCount = llGetListLength(lAvatars);
- for (i = 0; i < iAviCount; i++)
- {
- if (llList2Key(lAvatars, i) != gkManagerKey) // Don't track the manager.
- {
- if (llListFindList(glPreviousAvatars, llList2List(lAvatars, i, i)) == -1)
- {
- // Add visitor to list.
- key kVisitorKey = llList2Key(lAvatars, i);
- string sDisplayName = llGetDisplayName(kVisitorKey);
- string sUserName = llGetUsername(kVisitorKey);
- string sDateTimeSort = DateTimeSort(llGetUnixTime() - 25200); // Subtract 7 hours of seconds to make it SLT.
- vector vPosition = llList2Vector(llGetObjectDetails(llList2Key(lAvatars, i), [OBJECT_POS]), 0);
- //quaternion vRotation = llList2Vector(llGetObjectDetails(llList2Key(lAvatars, i), [OBJECT_ROT]), 0);
- vector vDiff = vPosition - llGetPos();
- integer iMetersAway = llRound(llVecMag(vDiff));
- integer iMetersHigh = llRound(vPosition.z);
- integer iCompass = llRound(llAtan2(vDiff.x, vDiff.y) * RAD_TO_DEG); // Angle from North with clockwise as positive (like a compass).
- if (iCompass < 0) iCompass += 360;
- //llOwnerSay(sDisplayName + " Away: " + (string)iMetersAway + " High: " + (string)iMetersHigh + " Compass: " + (string)iCompass);
- //
- // And now setup for pushing to database.
- string sTime = llEscapeURL(sDateTimeSort);
- string sUuid = llEscapeURL((string)kVisitorKey);
- sUserName = llEscapeURL(sUserName);
- sDisplayName = llEscapeURL(sDisplayName);
- string sDistance = llEscapeURL((string)iMetersAway);
- string sDirection = llEscapeURL((string)iCompass);
- string sHeight = llEscapeURL((string)iMetersHigh);
- //
- list lParams = [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded"];
- //
- string sBody = "&action=add" +
- "&time=" + sTime +
- "&uuid=" + sUuid +
- "&username=" + sUserName +
- "&displayname=" + sDisplayName +
- "&distance=" + sDistance +
- "&direction=" + sDirection +
- "&height=" + sHeight;
- gkHttp = llHTTPRequest("http://Your_IP_or_URL_Goes_Here/php/vislog.php", lParams, sBody);
- }
- }
- }
- glPreviousAvatars = lAvatars;
- }
- http_response(key id, integer iStatus, list lData, string sBody)
- {
- if (iStatus == 200 && id == gkHttp)
- {
- //llSay(0, sBody); // Just for testing.
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement