Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 KB | None | 0 0
  1. //
  2. key gkManagerKey = "Manager_Key_Goes_Here"; // This is the only person who can click and operate this script.
  3. float gfScanIntervalSeconds = 5; // Can't be less than a second.
  4. key gkHttp;
  5. list glPreviousAvatars;
  6. //
  7.  
  8. string DateTimeSort(integer iUnixTime)
  9. {
  10. return Unix2DateSort(iUnixTime) + " " + Unix2TimeSort(iUnixTime);
  11. }
  12.  
  13. string Unix2TimeSort(integer iUnixTime)
  14. // Returns: hour:minute:second:AM/PM
  15. {
  16. integer SECONDS_PER_DAY = 86400;
  17. integer SECONDS_PER_HOUR = 3600;
  18. integer SECONDS_PER_MINUTE = 60;
  19. string sAP;
  20. //
  21. integer seconds_since_midnight = iUnixTime % SECONDS_PER_DAY;
  22. integer hour = seconds_since_midnight / SECONDS_PER_HOUR;
  23. integer second = seconds_since_midnight % SECONDS_PER_HOUR;
  24. integer minute = second / SECONDS_PER_MINUTE;
  25. second = second % SECONDS_PER_MINUTE;
  26. //
  27. if (hour >= 12)
  28. {
  29. sAP = "PM";
  30. hour -= 12;
  31. }
  32. else sAP = "AM";
  33. //
  34. return sAP + " " + llGetSubString("0" + (string)hour, -2, -1) + ":" + llGetSubString("0" + (string)minute, -2, -1) + ":" + llGetSubString("0" + (string)second, -2, -1);
  35. }
  36.  
  37. string Unix2DateSort(integer iUnixTime)
  38. // Returns: "m/d/yyyy"
  39. {
  40. integer SECONDS_PER_DAY = 86400;
  41. integer day = iUnixTime / SECONDS_PER_DAY + 1;
  42. integer year = 1970;
  43. integer days_per_year = DaysPerYear(year);
  44. //
  45. while (day > days_per_year)
  46. {
  47. day -= days_per_year;
  48. ++year;
  49. days_per_year = DaysPerYear(year);
  50. }
  51. integer month = 1;
  52. integer days_per_month = DaysPerMonth(year, month);
  53. while (day > days_per_month)
  54. {
  55. day -= days_per_month;
  56. if (++month > 12)
  57. {
  58. ++year;
  59. month = 1;
  60. }
  61. days_per_month = DaysPerMonth(year, month);
  62. }
  63. //
  64. return (string)year + "-" + llGetSubString("0" + (string)month, -2, -1) + "-" + llGetSubString("0" + (string)day, -2, -1);
  65. }
  66.  
  67. integer DaysPerMonth(integer iYear, integer iMonth)
  68. {
  69. if (iMonth < 8)
  70. {
  71. if (iMonth % 2 == 0)
  72. {
  73. if (iMonth == 2)
  74. {
  75. if (LeapYear(iYear)) return 29;
  76. return 28;
  77. }
  78. return 30;
  79. }
  80. return 31;
  81. }
  82. if (iMonth % 2 == 0) return 31;
  83. return 30;
  84. }
  85.  
  86. integer DaysPerYear(integer iYear)
  87. {
  88. if (LeapYear(iYear)) return 366;
  89. return 365;
  90. }
  91.  
  92. integer LeapYear(integer iYear)
  93. {
  94. if (iYear % 4 == 0)
  95. {
  96. if (iYear % 100 == 0)
  97. {
  98. if (iYear % 400 == 0) return TRUE;
  99. return FALSE;
  100. }
  101. return TRUE;
  102. }
  103. return FALSE;
  104. }
  105.  
  106. default
  107. {
  108. on_rez(integer i)
  109. {
  110. llResetScript();
  111. }
  112. state_entry()
  113. {
  114. llSetTimerEvent(gfScanIntervalSeconds);
  115. llDialog(gkManagerKey, "\nThe visitor logging script is now scanning for visitors.", ["...","OK","..."], 123459);
  116. }
  117. timer()
  118. {
  119. integer i;
  120. list lAvatars = llGetAgentList(AGENT_LIST_PARCEL_OWNER, []);
  121. integer iAviCount = llGetListLength(lAvatars);
  122. for (i = 0; i < iAviCount; i++)
  123. {
  124. if (llList2Key(lAvatars, i) != gkManagerKey) // Don't track the manager.
  125. {
  126. if (llListFindList(glPreviousAvatars, llList2List(lAvatars, i, i)) == -1)
  127. {
  128. // Add visitor to list.
  129. key kVisitorKey = llList2Key(lAvatars, i);
  130. string sDisplayName = llGetDisplayName(kVisitorKey);
  131. string sUserName = llGetUsername(kVisitorKey);
  132. string sDateTimeSort = DateTimeSort(llGetUnixTime() - 25200); // Subtract 7 hours of seconds to make it SLT.
  133. vector vPosition = llList2Vector(llGetObjectDetails(llList2Key(lAvatars, i), [OBJECT_POS]), 0);
  134. //quaternion vRotation = llList2Vector(llGetObjectDetails(llList2Key(lAvatars, i), [OBJECT_ROT]), 0);
  135. vector vDiff = vPosition - llGetPos();
  136. integer iMetersAway = llRound(llVecMag(vDiff));
  137. integer iMetersHigh = llRound(vPosition.z);
  138. integer iCompass = llRound(llAtan2(vDiff.x, vDiff.y) * RAD_TO_DEG); // Angle from North with clockwise as positive (like a compass).
  139. if (iCompass < 0) iCompass += 360;
  140. //llOwnerSay(sDisplayName + " Away: " + (string)iMetersAway + " High: " + (string)iMetersHigh + " Compass: " + (string)iCompass);
  141. //
  142. // And now setup for pushing to database.
  143. string sTime = llEscapeURL(sDateTimeSort);
  144. string sUuid = llEscapeURL((string)kVisitorKey);
  145. sUserName = llEscapeURL(sUserName);
  146. sDisplayName = llEscapeURL(sDisplayName);
  147. string sDistance = llEscapeURL((string)iMetersAway);
  148. string sDirection = llEscapeURL((string)iCompass);
  149. string sHeight = llEscapeURL((string)iMetersHigh);
  150. //
  151. list lParams = [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/x-www-form-urlencoded"];
  152. //
  153. string sBody = "&action=add" +
  154. "&time=" + sTime +
  155. "&uuid=" + sUuid +
  156. "&username=" + sUserName +
  157. "&displayname=" + sDisplayName +
  158. "&distance=" + sDistance +
  159. "&direction=" + sDirection +
  160. "&height=" + sHeight;
  161. gkHttp = llHTTPRequest("http://Your_IP_or_URL_Goes_Here/php/vislog.php", lParams, sBody);
  162. }
  163. }
  164. }
  165. glPreviousAvatars = lAvatars;
  166. }
  167. http_response(key id, integer iStatus, list lData, string sBody)
  168. {
  169. if (iStatus == 200 && id == gkHttp)
  170. {
  171. //llSay(0, sBody); // Just for testing.
  172. }
  173. }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement