Advertisement
Madi_Perth

Untitled

Mar 7th, 2023
1,591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Linden Scripting 14.26 KB | Source Code | 0 0
  1. key    notecardQueryId;
  2. string  notecardName = "Bot List";
  3. integer notecardLine;
  4. list    namesKeySet;
  5. string  botName;
  6.  
  7. integer totalNotcardLines;
  8. key     totalNotecardQyID;
  9.  
  10. key     name_key_query;
  11.  
  12. integer dListen_handle;
  13. integer dListen_channel;
  14.  
  15. //list    dataSetKeys;
  16. key     botStatusQy;
  17.  
  18. integer botOnline;
  19. integer botOffline;
  20. integer i;
  21.  
  22. key     user;
  23.  
  24.  
  25. // Convert Unix Time to SLT, identifying whether it is currently PST or PDT (i.e. Daylight Saving aware)
  26. // Omei Qunhua December 2013
  27.  
  28. list weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
  29.  
  30. string Unix2PST_PDT(integer insecs)
  31. {
  32.     string str = Convert(insecs - (3600 * 8) );   // PST is 8 hours behind GMT
  33.     if (llGetSubString(str, -3, -1) == "PDT")     // if the result indicates Daylight Saving Time ...
  34.         str = Convert(insecs - (3600 * 7) );      // ... Recompute at 1 hour later
  35.     return str;
  36. }
  37.  
  38. // This leap year test is correct for all years from 1901 to 2099 and hence is quite adequate for Unix Time computations
  39. integer LeapYear(integer year)
  40. {
  41.     return !(year & 3);
  42. }
  43.  
  44. integer DaysPerMonth(integer year, integer month)
  45. {
  46.     if (month == 2)      return 28 + LeapYear(year);
  47.     return 30 + ( (month + (month > 7) ) & 1);           // Odd months up to July, and even months after July, have 31 days
  48. }
  49.  
  50. string Convert(integer insecs)
  51. {
  52.     integer w; integer month; integer daysinyear;
  53.     integer mins = insecs / 60;
  54.     integer secs = insecs % 60;
  55.     integer hours = mins / 60;
  56.     mins = mins % 60;
  57.     integer days = hours / 24;
  58.     hours = hours % 24;
  59.     integer DayOfWeek = (days + 4) % 7;    // 0=Sun thru 6=Sat
  60.  
  61.     integer years = 1970 +  4 * (days / 1461);
  62.     days = days % 1461;                  // number of days into a 4-year cycle
  63.  
  64.     @loop;
  65.     daysinyear = 365 + LeapYear(years);
  66.     if (days >= daysinyear)
  67.     {
  68.         days -= daysinyear;
  69.         ++years;
  70.         jump loop;
  71.     }
  72.     ++days;
  73.  
  74.     for (w = month = 0; days > w; )
  75.     {
  76.         days -= w;
  77.         w = DaysPerMonth(years, ++month);
  78.     }
  79.     string str =  ((string) years + "-" + llGetSubString ("0" + (string) month, -2, -1) + "-" + llGetSubString ("0" + (string) days, -2, -1) + " " +
  80.     llGetSubString ("0" + (string) hours, -2, -1) + ":" + llGetSubString ("0" + (string) mins, -2, -1) );
  81.  
  82.     integer LastSunday = days - DayOfWeek;
  83.     string PST_PDT = " PST";                  // start by assuming Pacific Standard Time
  84.     // Up to 2006, PDT is from the first Sunday in April to the last Sunday in October
  85.     // After 2006, PDT is from the 2nd Sunday in March to the first Sunday in November
  86.     if (years > 2006 && month == 3  && LastSunday >  7)     PST_PDT = " PDT";
  87.     if (month > 3)                                          PST_PDT = " PDT";
  88.     if (month > 10)                                         PST_PDT = " PST";
  89.     if (years < 2007 && month == 10 && LastSunday > 24)     PST_PDT = " PST";
  90.     return (llList2String(weekdays, DayOfWeek) + " " + str + PST_PDT);
  91. }
  92.  
  93. listLinksetData()
  94. {
  95.     integer x;
  96.     list keyEntry;
  97.     string botStatus;
  98.  
  99.     for(x = 0; x < llLinksetDataCountKeys(); x++)
  100.     {
  101.         keyEntry = llCSV2List((string) llLinksetDataRead((string) llLinksetDataListKeys(x, 1)));
  102.         if(llList2Integer(keyEntry, 1) == 0)
  103.             botStatus = " is Offline.";
  104.         else
  105.         {
  106.             botStatus = " was banned on " + Unix2PST_PDT(llList2Integer(keyEntry, 1));
  107.         }
  108.         llRegionSayTo(user, 0, llList2String(keyEntry, 0) + botStatus);
  109.     }
  110. }
  111.  
  112. listLinksetBanned()
  113. {
  114.     integer x;
  115.     list keyEntry;
  116.     string botStatus;
  117.    
  118.     for(x = 0; x < llLinksetDataCountKeys(); x++)
  119.     {
  120.         keyEntry = llCSV2List((string) llLinksetDataRead((string) llLinksetDataListKeys(x, 1)));
  121.         if(llList2Integer(keyEntry, 1) > 0)    
  122.         {
  123.             botStatus = " was banned on " + Unix2PST_PDT(llList2Integer(keyEntry, 1));  
  124.             llRegionSayTo(user, 0, llList2String(keyEntry, 0) + botStatus);  
  125.         }
  126.     }
  127. }
  128.  
  129. list linkSetSearch(string rexgep, string needle)
  130. {
  131.     list results;
  132.     list search;
  133.     integer x;
  134.    
  135.     if(rexgep == "")
  136.         rexgep = ".*";
  137.        
  138.     search = llLinksetDataFindKeys(rexgep, 0, -1);
  139.    
  140.     for(x = -llGetListLength(search); x < 0; ++x)
  141.     {
  142.         if(!llSubStringIndex(llLinksetDataRead(llList2Key(search, x)), needle))
  143.             results += llList2String(search, x);
  144.     }
  145.     return results;
  146. }
  147.  
  148. default
  149. {
  150.     state_entry()
  151.     {
  152.         llSetText("", <0,0,0>, 0);
  153.         state bot_status;
  154.         //llLinksetDataWrite("testmode", "1");
  155.         //llLinksetDataDelete("testmode");
  156.  
  157.         if(llGetLandOwnerAt(llGetPos()) != llGetOwner() && llLinksetDataRead("testmode") == "")
  158.         {
  159.             llOwnerSay("Device neends to be Deeded to group to operate correctly.");
  160.             llSetColor(<1.000, 1.000, 1.000>, ALL_SIDES);
  161.             return;
  162.         }
  163.        
  164.  
  165.         if(llLinksetDataRead("testmode"))
  166.         {
  167.             llSay(999, "STOP");
  168.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  169.         }
  170.         else
  171.         {        
  172.             llSay(888, "STOP");
  173.             llSetColor(<0.694, 0.051, 0.788>, ALL_SIDES);
  174.         }
  175.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  176.         totalNotecardQyID = llGetNumberOfNotecardLines(notecardName);
  177.      }
  178.    
  179.     touch_start(integer start)
  180.     {
  181.         llResetTime();
  182.     }
  183.    
  184.     touch_end(integer end)
  185.     {
  186.         if(llGetTime() > 2)
  187.         {
  188.             if(llLinksetDataRead("testmode"))
  189.                 llLinksetDataDelete("testmode");
  190.             else
  191.                 llLinksetDataWrite("testmode", "true");
  192.             llResetScript();
  193.         }
  194.     }
  195.    
  196.     dataserver(key requested, string data)
  197.     {
  198.  
  199.         if(requested == totalNotecardQyID)
  200.         {
  201.             totalNotcardLines = (integer) data;
  202.             notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
  203.         }
  204.        
  205.  
  206.        
  207.         if(requested == name_key_query)
  208.         {
  209.             if(llLinksetDataRead(data) == "")
  210.             {
  211.                 llLinksetDataWrite(data, botName + ",0");
  212.                 llOwnerSay("Adding "+ botName +" ("+ (string) data + ")");
  213.             }
  214.             else
  215.             {
  216.                 llSay(0, "Skipping " + botName + " ("+(string) data + ")");
  217.             }
  218.             llSleep(0.3);
  219.             notecardQueryId = llGetNotecardLine(notecardName, ++notecardLine);
  220.         }
  221.         if(notecardQueryId == requested)
  222.         {
  223.             if(data == EOF)
  224.             {
  225.                 llSay(0, "Cardlines Read: " + (string) notecardLine);
  226.                 llSay(0, "Keys in LinksetData: " + (string) llLinksetDataCountKeys());
  227.                 state bot_status;
  228.             }
  229.             else
  230.             {
  231.                 botName = llStringTrim(data, STRING_TRIM);
  232.                 name_key_query = llRequestUserKey(botName);
  233.             }
  234.         }
  235.         llSetText((string) notecardLine +"/"+ (string) totalNotcardLines+  "\n" +
  236.             (string) llLinksetDataAvailable() + "\n",
  237.             <1,0,1>, 1.0);
  238.     }
  239.    
  240.     listen(integer chan, string name, key id, string msg)
  241.     {
  242.         if(chan == dListen_channel)
  243.         {
  244.             llSetTimerEvent(0);
  245.             llListenRemove(dListen_handle);
  246.  
  247.             if(msg == "Reload")
  248.             {
  249.                 llLinksetDataReset();
  250.                 totalNotecardQyID = llGetNumberOfNotecardLines(notecardName);
  251.                 notecardLine = 0;
  252.             }
  253.             if(msg == "Diff")
  254.             {
  255.                 state diff;
  256.             }
  257.         }
  258.     }
  259.     timer()
  260.     {
  261.         llListenRemove(dListen_handle);
  262.         llSetTimerEvent(0);
  263.     }
  264.    
  265.     changed(integer change)
  266.     {
  267.         if(change & CHANGED_INVENTORY)
  268.         {
  269.             llSay(0, "Inventory Changed, resetting.");
  270.             llResetScript();  
  271.         } else if(change & CHANGED_OWNER)
  272.         {
  273.             llResetScript();
  274.         }
  275.     }
  276.    
  277. }
  278.  
  279. state diff
  280. {
  281.     state_entry()
  282.     {
  283.         llSay(0, "state entry");
  284.     }
  285. }
  286.  
  287. state bot_status
  288. {
  289.      state_entry()
  290.     {  
  291.  
  292.         llSay(0, (string) llGetFreeMemory());
  293.         i = 0;
  294.         if(llLinksetDataRead("testmode"))
  295.         {
  296.             llSay(999, "STOP");
  297.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  298.         }
  299.         else
  300.         {
  301.             llSay(888, "STOP");
  302.             llSetColor(<1.000, 0.255, 0.212>, ALL_SIDES);
  303.         }
  304.         //dataSetKeys = llLinksetDataListKeys(0, -1);
  305.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  306.         llListen(dListen_channel, "", "", "");
  307.         botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(i, 1),0), DATA_ONLINE);
  308.     }
  309.        
  310.     touch_end(integer num)
  311.     {
  312.         user = llDetectedKey(0);
  313.         llDialog(user, "Main Menu", ["LinkSet"], dListen_channel);
  314.     }
  315.  
  316.     listen(integer chan, string name, key id, string msg)
  317.     {
  318.         if(chan == dListen_channel)
  319.         {
  320.             if(msg == "Reload")
  321.             {
  322.                 state default;
  323.             }
  324.             if(msg == "Diff")
  325.             {
  326.                 state diff;
  327.             }
  328.             if(msg == "LinkSet")
  329.                 llDialog(user, "Linkset Data", ["List All", "List Banned", "Clear"], dListen_channel);
  330.             if(msg == "List All")
  331.                 listLinksetData();
  332.             if(msg == "List Banned")
  333.                 listLinksetBanned();
  334.             if(msg == "Clear")
  335.                 state listLinksetClear;
  336.            
  337.         }
  338.     }
  339.    
  340.     changed(integer change)
  341.     {
  342.         if(change & CHANGED_INVENTORY)
  343.         {
  344.             llSay(0, "Inventory Changed, resetting.");
  345.             llResetScript();  
  346.         } else if(change & CHANGED_OWNER)
  347.         {
  348.             llResetScript();
  349.         }
  350.     }
  351.    
  352.     timer()
  353.     {
  354.         botOnline  = 0;
  355.         botOffline = 0;
  356.         i          = 0;
  357.  
  358.  
  359.         if(llLinksetDataRead("testmode"))
  360.         {
  361.             llSay(999, "STOP");
  362.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  363.         }
  364.         else
  365.         {
  366.             llSay(888, "STOP");
  367.             llSetColor(<1.000, 0.255, 0.212>, ALL_SIDES);
  368.         }
  369.         //dataSetKeys = llLinksetDataListKeys(0, -1);
  370.         botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(i, 1), 0), DATA_ONLINE);
  371.     }
  372.  
  373.    
  374.     dataserver(key queryid, string data)
  375.     {
  376.         list keyBotStat;
  377.         if(queryid == botStatusQy)
  378.         {
  379.             llSetTimerEvent(0);
  380.             keyBotStat = llCSV2List(llLinksetDataRead(llList2Key(llLinksetDataListKeys(i, 1), 0)));
  381.             if(data == (string) TRUE)
  382.             {
  383.                 if(llList2Integer(keyBotStat, 1) == 0)
  384.                 {
  385.                     llLinksetDataWrite(llList2Key(llLinksetDataListKeys(i, 1), 0), llList2String(keyBotStat, 0) +
  386.                         "," + (string) llGetUnixTime());
  387.                    
  388.                     llOwnerSay((string) llLinksetDataListKeys(i, 1) +
  389.                         " Banning :" + llList2String(keyBotStat, 0));
  390.                     llAddToLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0), 24);
  391.                 }else if(llList2Integer(keyBotStat, 1) > 0)
  392.                 {
  393.                     llLinksetDataWrite(llList2Key(llLinksetDataListKeys(i, 1), 0), llList2String(keyBotStat, 0) +
  394.                         "," + (string) llGetUnixTime());
  395.                     llRemoveFromLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0));
  396.                     llSleep(2.0);
  397.                     llAddToLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0), 24);
  398.                 }
  399.  
  400.                 ++botOnline;
  401.             } else if(data == (string) FALSE)
  402.             {
  403.                 if(llList2Integer(keyBotStat,1) > 0)              
  404.                 {    
  405.                     llLinksetDataWrite(llList2Key(llLinksetDataListKeys(i, 1), 0),
  406.                         llList2String(keyBotStat, 0) + ",0");
  407.                     llRemoveFromLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0));  
  408.                 }
  409.                 ++botOffline;
  410.             }
  411.         }
  412.  
  413.         //llSay(0, llLinksetDataRead(llList2Key(dataSetKeys, i)));
  414.         if(i < llLinksetDataCountKeys())
  415.         {
  416.             botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(++i, 1), 0), DATA_ONLINE);
  417.         } else
  418.         {
  419.             if(llLinksetDataRead("testmode"))
  420.             {
  421.                 llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  422.                 llSay(999, "START");
  423.             }
  424.             else
  425.             {
  426.                 llSay(888, "START");
  427.                 llSetColor(<0.004, 1.000, 0.439>, ALL_SIDES);
  428.             }
  429.  
  430.             llSetTimerEvent(600);
  431.         }
  432.        
  433.             llSetText("Known Bots: "  + (string) llLinksetDataCountKeys() + "\n" +
  434.                 "Bots Online : " + (string) botOnline + "\n" +
  435.                 "Bots Offline : " + (string) botOffline + "\n" +
  436.                 (string) llLinksetDataAvailable() + "\n" +
  437.                 (string) llGetFreeMemory(),
  438.                 <0,1,1>, 1);
  439.     }    
  440. }
  441.  
  442. state listLinksetClear
  443. {
  444.     state_entry()
  445.     {
  446.         notecardLine = 0;
  447.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  448.         llListen(dListen_channel, "", "", "");
  449.         llSay(0, "Clear");
  450.         llResetTime();
  451.         notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
  452.         //llSay(0, llDumpList2String(linkSetSearch("",  "bonniebelle85"), "\n"));
  453.     }
  454.    
  455.     dataserver(key requested, string data)
  456.     {
  457.  
  458.         if(notecardQueryId == requested)
  459.         {
  460.             if(data == EOF)
  461.             {
  462.                 llSay(0, "run time " + (string) llGetTime() +  " Cardlines Read: " + (string) notecardLine);
  463.             }
  464.             else
  465.             {
  466. ;
  467.                 botName = llStringTrim(data, STRING_TRIM);    
  468.                 llSay(0, (string) notecardLine +") " + llList2String(linkSetSearch("", botName), 0));
  469.                 notecardQueryId = llGetNotecardLine(notecardName, ++notecardLine);
  470.             }
  471.         }
  472.     }
  473.    
  474. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement