Advertisement
Guest User

Credits go to

a guest
May 6th, 2010
646
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.14 KB | None | 0 0
  1. integer serviceperiod = 180; // days
  2.  
  3. key skills = "c536a328-e01d-4ca5-aab5-d8d1f606d5ef"; //skills
  4. key bot = "6762c004-8490-4d99-88a1-7bf2d74c9ff8"; //skills
  5. key texture = "e46e7c2b-1de3-5347-db43-42ee4e1f5bf2"; //mediatexture
  6. key owner = skills;
  7. integer listenchannel = 127365;
  8. integer menulistenchannel = 231746;
  9. integer listenhandle;
  10. //integer DAYSEC = 1; //testing licensing
  11. integer DAYSEC = 86400;
  12. integer LEASED_AT = 0;
  13. integer TIME_LEFT = 0;
  14. integer avcount = 0;
  15. integer bancount = 0;
  16. //menu settings
  17. integer kicking = TRUE;
  18. integer banning = TRUE;
  19. integer notifications = TRUE;
  20. list menu_main = ["kicking","banning","messages"];
  21. string currentmenu = "";
  22. float delay = 60.0;
  23. //
  24. key requestid;
  25. list insim;
  26. list landinforeqd = [PARCEL_DETAILS_NAME, PARCEL_DETAILS_OWNER, PARCEL_DETAILS_GROUP];
  27. vector regionbase;
  28. string requestalts = "true";
  29. string secret = "QSY2S2pkc2dmKig=";
  30. //string url = "http://gemini-cybernetics.net/test.php";
  31. string url = "http://gemini-cybernetics.net/avatars/avatars.interface.ashqin.php";
  32. string out;
  33. string hiddencode="Real theology is always rather shocking to people who already think they know what they think. I'm still shocked myself.";
  34.  
  35. DEBUG(string data)
  36. {
  37. // llOwnerSay("DEBUG: " + data);
  38. // llInstantMessage(skills,"DEBUG: " + data);
  39. }
  40.  
  41. string ternary(integer condition, string yes, string no)
  42. {
  43. if (condition) return yes;
  44. else return no;
  45. }
  46.  
  47. string menutext()
  48. {
  49. return " \nSettings\n\nKicking: "+ternary(kicking,"enabled","disabled")+"\nBanning: "+ternary(banning,"enabled","disabled")+"\nBan messages: "+ternary(notifications,"enabled","disabled")+
  50. " \n\nStatistics\n\n "+ (string)avcount +" visitors, "+ (string)bancount +" banned\n"+
  51. "\nMenu times out in "+(string)llRound(delay)+" seconds.";
  52. }
  53.  
  54. string timestamp()
  55. {
  56. integer t = (integer)llGetWallclock();
  57. integer hours;
  58. integer minutes;
  59. integer seconds;
  60.  
  61. t = (integer)llGetWallclock();
  62. hours = t / 3600;
  63. minutes = (t % 3600) / 60;
  64. seconds = t % 60;
  65. return "SLT ["+(string)hours+":"+(string)minutes+":"+(string)seconds+"]";
  66. }
  67.  
  68. string timespan(integer time)
  69. {
  70. // in days
  71. integer days = time / DAYSEC;
  72. integer curtime = (time / DAYSEC) - (time % DAYSEC);
  73. // integer hours = curtime / 3600;
  74. // integer minutes = (curtime % 3600) / 60;
  75. // integer seconds = curtime % 60;
  76. // return (string)llAbs(days) + " days, " + (string)llAbs(hours) + " hours, " + (string)llAbs(minutes) + " minutes, " + (string)llAbs(seconds) + " seconds";
  77. return (string)llAbs(days) + " days";
  78. }
  79.  
  80. string fulltimespan(integer time)
  81. {
  82. integer days = time / DAYSEC;
  83. integer curtime = (time / DAYSEC) - (time % DAYSEC);
  84. integer hours = curtime / 3600;
  85. integer minutes = (curtime % 3600) / 60;
  86. integer seconds = curtime % 60;
  87. return (string)llAbs(days) + " days, " + (string)llAbs(hours) + " h, " + (string)llAbs(minutes) + " min, " + (string)llAbs(seconds) + " sec";
  88. }
  89.  
  90. string urlsetip(key id)
  91. {
  92. string re;
  93. string data_id=(string)id;
  94. string data_name=(string)llKey2Name(id);
  95. string data_region=(string)llGetRegionName();
  96. string data_unixtime=(string)llGetUnixTime();
  97. re += url+"?a="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64(data_id),secret));
  98. re += "&nm="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64(data_name),secret));
  99. re += "&loc="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64(data_region),secret));
  100. re += "&time="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64(data_unixtime),secret));​ ​
  101. re += "&sig="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64((string)llMD5String(data​ ​_id+data_name+data_region+data_unixtime+hiddencode,0)),secret));;
  102. return re;
  103. }
  104.  
  105. string urlget(key id)
  106. {
  107. string re;
  108. re += url+"?get=result&ra="+ requestalts +"&a="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64((string)id),secret));
  109. re += "&nm="+llEscapeURL(llXorBase64StringsCorrect(llStringToBase64((string)llKey2Name(id)),​ ​secret));
  110. return re;
  111. }
  112.  
  113. updatelicense()
  114. {
  115. TIME_LEFT = ((serviceperiod * DAYSEC) - (llGetUnixTime() - LEASED_AT));
  116. DEBUG(fulltimespan(TIME_LEFT) + "\ntime left " + (string)TIME_LEFT + "\nserviceperiod " + (string)serviceperiod + "\nLEASED_AT " + (string)LEASED_AT + "\nllGetUnixTime " + (string)llGetUnixTime());
  117. llSetText("CDS active\n" + fulltimespan(TIME_LEFT)+" left",<1,1,1>, 0.6);
  118. }
  119.  
  120. clr()
  121. {
  122. integer i;
  123. integer l = llGetListLength(insim);
  124. while(i < l)
  125. {
  126. key id = llList2Key(insim,i);
  127. if(llGetBoundingBox(id) == [])
  128. {
  129. insim = llDeleteSubList(insim,i,i);
  130. l -= 1;
  131. }else i += 1;
  132. }
  133. }
  134.  
  135. query(key id)
  136. {
  137. avcount = avcount +1;
  138. updatelicense();
  139.  
  140. string name = llKey2Name(id);
  141. DEBUG("urlget " + urlget(id));
  142. llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_AGENT,id,PARCEL_MEDIA_COMMAND_TYPE,"text/html",PARCEL_MEDIA_COMMAND_URL,urlsetip(id),PARCEL_MEDIA_COMMAND_TEXTURE,texture,PARC​ ​EL_MEDIA_COMMAND_PLAY]);
  143. llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_AGENT,id,PARCEL_MEDIA_COMMAND_TYPE,"text/html",PARCEL_MEDIA_COMMAND_STOP]);
  144. if (serviceperiod <= 0 || TIME_LEFT < 0)
  145. {
  146. DEBUG("TIME EXPIRED");
  147. llSetText("CDS deactivated\nLicense timed out",<1,0,0>, 0.6);
  148. llInstantMessage(owner,llGetObjectName()+" in region '"+llGetRegionName()+"' has reached the end of the "+(string)serviceperiod+"-day-period of service and has been deactivated remotely. We hope you have been happy with the service! Please delete the object (if not it will self-destruct in a few days) and purchase a new one.\nIn-World: http://slurl.com/secondlife/INSILICO/190...XstreetSL: https://www.xstreetsl.com/modules.php?na...ID=2117915");
  149. return;
  150. }
  151. else
  152. {
  153. regionbase = llGetPos();
  154. list parceldetails = llGetParcelDetails(regionbase,landinforeqd);
  155. if (llList2String(parceldetails ,1) != llGetOwner())
  156. {
  157. llInstantMessage(owner,"WARNING: You are not the owner of this parcel. "+llGetObjectName()+" has to be owned by the parcel owner to be able to ban unauthorized avatars.");
  158. }
  159. else
  160. {
  161. requestid = llHTTPRequest(urlget(id),[],"");
  162. }
  163. }
  164. }
  165.  
  166. startup()
  167. {
  168. listenhandle = llListen( listenchannel, "", NULL_KEY, "" );
  169. menulistenchannel = llFloor(llFrand(2000000)) + 1000;
  170. llSetStatus(STATUS_PHANTOM,0);
  171. llVolumeDetect(0);
  172. llSetStatus(STATUS_PHANTOM,0);
  173. llVolumeDetect(1);
  174. llSetObjectName((string)llGetScriptName() +" "+ (string)llGetRegionName());
  175. DEBUG("listenchannel " + (string)listenchannel +"\n menulistenchannel " + (string)menulistenchannel );
  176. }
  177.  
  178. setowner(key id)
  179. {
  180. owner = id;
  181. llListenRemove(listenhandle);
  182. LEASED_AT = llGetUnixTime();
  183. DEBUG("owner " + (string)owner);
  184. llInstantMessage(owner,"Installation complete. "+llGetObjectName()+" is now up and running, you will be notified of each ban event by object IM. PLEASE NOTICE: The item is no copy. Do NOT delete, return or take it back into inventory once installed, or you won't be able to rez it again due to special hax! For support please join the group 'GEMINI Industries' secondlife:///app/group/6d029305-98aa-b24f-de1d-4fbc32e1f22b/about");
  185. }
  186.  
  187. default
  188. {
  189. touch_start(integer i)
  190. {
  191. if (llDetectedKey(0) != owner) return;
  192. updatelicense();
  193. listenhandle = llListen(menulistenchannel, "", owner, "");
  194. llSetTimerEvent(delay);
  195. llDialog(owner, menutext(), menu_main, menulistenchannel);
  196. }
  197.  
  198. timer()
  199. {
  200. llListenRemove(listenhandle);
  201. llSetTimerEvent(0.0);
  202. }
  203.  
  204. state_entry()
  205. {
  206. LEASED_AT = llGetUnixTime();
  207. updatelicense();
  208. llSetObjectName((string)llGetScriptName());
  209. }
  210.  
  211. listen(integer chn,string name,key id, string msg)
  212. {
  213. DEBUG("chan " + (string)chn + " id " + (string)id+ " listenmsg " + (string)msg);
  214. if (chn == listenchannel) setowner((key)msg);
  215. else if (chn == menulistenchannel)
  216. {
  217. if (id != owner) return;
  218. if (msg == "banning")
  219. {
  220. banning = !banning;
  221. llDialog(owner, menutext(), menu_main, menulistenchannel);
  222. }
  223. else if (msg == "kicking")
  224. {
  225. kicking = !kicking;
  226. llDialog(owner, menutext(), menu_main, menulistenchannel);
  227. }
  228. else if (msg == "messages")
  229. {
  230. notifications = !notifications;
  231. llDialog(owner, menutext(), menu_main, menulistenchannel);
  232. }
  233.  
  234. else if (msg == " ") return;
  235. }
  236. }
  237.  
  238. http_response(key request_id, integer status, list metadata, string body)
  239. {
  240. DEBUG((string)body);
  241. if (llStringLength(body)>1)
  242. {
  243. list elements = llParseString2List(body, ["/>","<", ">", "\n"], []); // parse out xml elements
  244. integer n = llGetListLength(elements); // loop through elements
  245. integer i;
  246. key avatar_id;
  247. string avatar_name;
  248. string error;
  249. string ban;
  250. string ip;
  251. string delete;
  252. string user_agent;
  253. list altkeys;
  254. for(i = 0; i < n; i++)
  255. {
  256. string element = llList2String(elements, i);
  257. element = llToLower(element);
  258. if(element == "key") { avatar_id = (key)llList2String(elements, i+1); }
  259. else if(element == "name") { avatar_name = (key)llList2String(elements, i+1); }
  260. else if(element == "error") { error = (key)llList2String(elements, i+1); }
  261. else if(element == "ban") { ban = (key)llList2String(elements, i+1); }
  262. else if(element == "ip") { ip = (key)llList2String(elements, i+1); }
  263. else if(element == "delete") { delete = (key)llList2String(elements, i+1); }
  264. else if(element == "user_agent") { user_agent = (key)llList2String(elements, i+1); }
  265. else if((element == "altkey") && (requestalts == "true"))
  266. {
  267. key id = (key)llList2String(elements, i+1);
  268. if(llListFindList(altkeys,[id]) == -1) { altkeys += [id]; DEBUG("altkey "+(string)id);}
  269. }
  270. }
  271. if (delete == "yes")
  272. {
  273. llInstantMessage(skills,"DELETED // owner "+ (string)owner +" object "+llGetObjectName()+" in region '"+llGetRegionName()+"'");
  274. llInstantMessage(owner,"Your "+llGetObjectName()+" in region '"+llGetRegionName()+"' has reached the end of the "+(string)serviceperiod+"-day-period of service and has been deleted remotely. Please delete the object and get a new one here http://slurl.com/secondlife/INSILICO/190/182/3602 or on XstreetSL.");
  275. llSleep(1);
  276. llDie();
  277. }
  278. else
  279. {
  280. if (error == "not_found")
  281. {
  282. llInstantMessage(bot,"unregistered "+avatar_name);
  283. }
  284. else
  285. {
  286. string botoutput = avatar_name + " (" + ip + ") " + user_agent;
  287. if (ban == "true")
  288. {
  289. bancount = bancount +1;
  290. if (kicking) llTeleportAgentHome(avatar_id);
  291. if (banning) llAddToLandBanList(avatar_id, 720.0);
  292. if (notifications) llInstantMessage(owner,timestamp() + " - Illegitimate client detected - teleported home and banned: " + avatar_name + " secondlife:///app/agent/"+ (string)avatar_id +"/about ");
  293. llInstantMessage(bot,"registered_ban "+botoutput);
  294. }
  295. else
  296. {
  297. llInstantMessage(bot,"registered "+botoutput);
  298. }
  299. }
  300. }
  301. }
  302. }
  303.  
  304. on_rez(integer i)
  305. {
  306. if (i == 0) {
  307. llInstantMessage(skills,"WARNING REZZED WITHOUT CHANNEL OR INSTALLER BROKEN // owner "+(string)llGetOwner()+" object "+llGetObjectName()+" in region '"+llGetRegionName()+"'");
  308. llSleep(1);
  309. llDie();
  310. }
  311. listenchannel = i;
  312. startup();
  313. }
  314. collision_start(integer c)
  315. {
  316. integer i;
  317. do
  318. {
  319. if(llDetectedType(i) & AGENT)
  320. {
  321. key id = llDetectedKey(i);
  322. // DEBUG("collision_end "+llKey2Name(id));
  323. if(llListFindList(insim,[id]) == -1)
  324. {
  325. insim += [id];
  326. query(id);
  327. }
  328. }
  329. i += 1;
  330. }
  331. while(i < c);
  332. clr();
  333. }
  334.  
  335. collision_end(integer c)
  336. {
  337. integer i;
  338. do
  339. {
  340. if(llDetectedType(i) & AGENT)
  341. {
  342. key id = llDetectedKey(i);
  343. // DEBUG("collision_end "+llKey2Name(id));
  344. i = c;
  345. clr();
  346. }
  347. i += 1;
  348. }
  349. while(i < c);
  350. }
  351. /*
  352. changed(integer what)
  353. {
  354. if (what & CHANGED_REGION_START) { }
  355. else if(what & CHANGED_REGION) { llResetScript(); }
  356. else if (what & CHANGED_OWNER) { llResetScript(); }
  357. }
  358. */
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement