Advertisement
Madi_Perth

Untitled

Mar 11th, 2023
1,887
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Linden Scripting 18.15 KB | Source Code | 0 0
  1. #define NAVY        <0.000, 0.122, 0.247>
  2. #define BLUE        <0.000, 0.455, 0.851>
  3. #define AQUA        <0.498, 0.859, 1.000>
  4. #define TEAL        <0.224, 0.800, 0.800>
  5. #define OLIVE       <0.239, 0.600, 0.439>
  6. #define GREEN       <0.180, 0.800, 0.251>
  7. #define LIME        <0.004, 1.000, 0.439>
  8. #define YELLOW      <1.000, 0.863, 0.000>
  9. #define ORANGE      <1.000, 0.522, 0.106>
  10. #define RED     <1.000, 0.255, 0.212>
  11. #define MAROON      <0.522, 0.078, 0.294>
  12. #define FUCHSIA <0.941, 0.071, 0.745>
  13. #define PURPLE      <0.694, 0.051, 0.788>
  14. #define WHITE       <1.000, 1.000, 1.000>
  15. #define SILVER      <0.867, 0.867, 0.867>
  16. #define GRAY        <0.667, 0.667, 0.667>
  17. #define BLACK       <0.067, 0.067, 0.067>
  18.  
  19. key    notecardQueryId;
  20. string  notecardName = "Bot List";
  21. integer notecardLine;
  22. list    namesKeySet;
  23. string  botName;
  24.  
  25. integer totalNotcardLines;
  26. key     totalNotecardQyID;
  27.  
  28. key     name_key_query;
  29.  
  30. integer dListen_handle;
  31. integer dListen_channel;
  32.  
  33. //list    dataSetKeys;
  34. key     botStatusQy;
  35.  
  36. integer botOnline;
  37. integer botOffline;
  38. integer i;
  39.  
  40. // default Bantime is set to 24 hours
  41. float defBanTime = 24;
  42. // default scantime is set to 10 minutes
  43. integer scanTime = 600;
  44. key     user;
  45.  
  46. // Resets the banTime and updates the online status
  47. resetBanTime(float banTime)
  48. {
  49.     defBanTime      = banTime;
  50.     string bTime    = "Setting Ban Time to ";
  51.     integer         x;
  52.    
  53.     if(banTime == 0.500000) bTime += "30 Minutes.";
  54.     if(banTime == 1)        bTime += "1 Hour.";
  55.     if(banTime == 2)        bTime += "2 Hours.";
  56.     if(banTime == 6)        bTime += "6 Hours.";
  57.     if(banTime == 24)       bTime += "1 Day.";
  58.     if(banTime == 168)      bTime += "1 Week.";
  59.     if(banTime == 0)        bTime += "Forever.";
  60.     llSay(0, bTime);
  61.    
  62.     i = 0;
  63.     botOnline = 0;
  64.     botOffline = 0;
  65.     botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(i, 1),0), DATA_ONLINE);
  66. }
  67.  
  68.  
  69. // Convert Unix Time to SLT, identifying whether it is currently PST or PDT (i.e. Daylight Saving aware)
  70. // Omei Qunhua December 2013
  71.  
  72. list weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
  73.  
  74. string Unix2PST_PDT(integer insecs)
  75. {
  76.     string str = Convert(insecs - (3600 * 8) );   // PST is 8 hours behind GMT
  77.     if (llGetSubString(str, -3, -1) == "PDT")     // if the result indicates Daylight Saving Time ...
  78.         str = Convert(insecs - (3600 * 7) );      // ... Recompute at 1 hour later
  79.     return str;
  80. }
  81.  
  82. // This leap year test is correct for all years from 1901 to 2099 and hence is quite adequate for Unix Time computations
  83. integer LeapYear(integer year)
  84. {
  85.     return !(year & 3);
  86. }
  87.  
  88. integer DaysPerMonth(integer year, integer month)
  89. {
  90.     if (month == 2)      return 28 + LeapYear(year);
  91.     return 30 + ( (month + (month > 7) ) & 1);           // Odd months up to July, and even months after July, have 31 days
  92. }
  93.  
  94. string Convert(integer insecs)
  95. {
  96.     integer w; integer month; integer daysinyear;
  97.     integer mins = insecs / 60;
  98.     integer secs = insecs % 60;
  99.     integer hours = mins / 60;
  100.     mins = mins % 60;
  101.     integer days = hours / 24;
  102.     hours = hours % 24;
  103.     integer DayOfWeek = (days + 4) % 7;    // 0=Sun thru 6=Sat
  104.  
  105.     integer years = 1970 +  4 * (days / 1461);
  106.     days = days % 1461;                  // number of days into a 4-year cycle
  107.  
  108.     @loop;
  109.     daysinyear = 365 + LeapYear(years);
  110.     if (days >= daysinyear)
  111.     {
  112.         days -= daysinyear;
  113.         ++years;
  114.         jump loop;
  115.     }
  116.     ++days;
  117.  
  118.     for (w = month = 0; days > w; )
  119.     {
  120.         days -= w;
  121.         w = DaysPerMonth(years, ++month);
  122.     }
  123.     string str =  ((string) years + "-" + llGetSubString ("0" + (string) month, -2, -1) + "-" + llGetSubString ("0" + (string) days, -2, -1) + " " +
  124.     llGetSubString ("0" + (string) hours, -2, -1) + ":" + llGetSubString ("0" + (string) mins, -2, -1) );
  125.  
  126.     integer LastSunday = days - DayOfWeek;
  127.     string PST_PDT = " PST";                  // start by assuming Pacific Standard Time
  128.     // Up to 2006, PDT is from the first Sunday in April to the last Sunday in October
  129.     // After 2006, PDT is from the 2nd Sunday in March to the first Sunday in November
  130.     if (years > 2006 && month == 3  && LastSunday >  7)     PST_PDT = " PDT";
  131.     if (month > 3)                                          PST_PDT = " PDT";
  132.     if (month > 10)                                         PST_PDT = " PST";
  133.     if (years < 2007 && month == 10 && LastSunday > 24)     PST_PDT = " PST";
  134.     return (llList2String(weekdays, DayOfWeek) + " " + str + PST_PDT);
  135. }
  136.  
  137. // lists out to the user bots stored in linksetdata and the ban time
  138. listLinksetData()
  139. {
  140.     integer x;
  141.     list keyEntry;
  142.     string botStatus;
  143.  
  144.     for(x = 0; x < llLinksetDataCountKeys(); x++)
  145.     {
  146.         keyEntry = llCSV2List((string) llLinksetDataRead((string) llLinksetDataListKeys(x, 1)));
  147.         if(llList2Integer(keyEntry, 1) == 0)
  148.             botStatus = " is Offline.";
  149.         else
  150.         {
  151.             botStatus = " was banned on " + Unix2PST_PDT(llList2Integer(keyEntry, 1));
  152.         }
  153.         llRegionSayTo(user, 0, llList2String(keyEntry, 0) + botStatus);
  154.     }
  155. }
  156.  
  157. // lists out the bots that are banned and when they where banned.
  158. listLinksetBanned()
  159. {
  160.     integer x;
  161.     list keyEntry;
  162.     string botStatus;
  163.    
  164.     for(x = 0; x < llLinksetDataCountKeys(); x++)
  165.     {
  166.         keyEntry = llCSV2List((string) llLinksetDataRead((string) llLinksetDataListKeys(x, 1)));
  167.         if(llList2Integer(keyEntry, 1) > 0)    
  168.         {
  169.             botStatus = " was banned on " + Unix2PST_PDT(llList2Integer(keyEntry, 1));  
  170.             llRegionSayTo(user, 0, llList2String(keyEntry, 0) + botStatus);  
  171.         }
  172.     }
  173. }
  174.  
  175. // search the keys in a linksetdata for a string, needle
  176. list linkSetSearch(string rexgep, string needle)
  177. {
  178.     list results;
  179.     integer x;
  180.    
  181.     if(rexgep == "")
  182.         rexgep = ".*";
  183.        
  184.     list search = llLinksetDataFindKeys(rexgep, 0, 0);
  185.     for(x = -llGetListLength(search); x < 0; ++x)
  186.     {
  187.         if(!llSubStringIndex(llLinksetDataRead(llList2String(search, x)), needle))
  188.             results += llList2String(search, x);
  189.     }
  190.     return results;
  191. }
  192.  
  193. // load the notecard of bots in to linksetData storage
  194. default
  195. {
  196.     state_entry()
  197.     {
  198.         llSetText("", <0,0,0>, 0);
  199.         state bot_status;
  200.  
  201.         if(llGetLandOwnerAt(llGetPos()) != llGetOwner() && llLinksetDataRead("testmode") == "")
  202.         {
  203.             llOwnerSay("Device neends to be Deeded to group to operate correctly.");
  204.             llSetColor(<1.000, 1.000, 1.000>, ALL_SIDES);
  205.             return;
  206.         }
  207.        
  208.  
  209.         if(llLinksetDataRead("testmode"))
  210.         {
  211.             llSay(999, "STOP");
  212.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  213.         }
  214.         else
  215.         {        
  216.             llSay(888, "STOP");
  217.             llSetColor(<0.694, 0.051, 0.788>, ALL_SIDES);
  218.         }
  219.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  220.         totalNotecardQyID = llGetNumberOfNotecardLines(notecardName);
  221.      }
  222.    
  223.     touch_start(integer start)
  224.     {
  225.         llResetTime();
  226.     }
  227.    
  228.     touch_end(integer end)
  229.     {
  230.         if(llGetTime() > 2)
  231.         {
  232.             if(llLinksetDataRead("testmode"))
  233.                 llLinksetDataDelete("testmode");
  234.             else
  235.                 llLinksetDataWrite("testmode", "true");
  236.             llResetScript();
  237.         }
  238.     }
  239.    
  240.     dataserver(key requested, string data)
  241.     {
  242.  
  243.         if(requested == totalNotecardQyID)
  244.         {
  245.             totalNotcardLines = (integer) data;
  246.             notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
  247.         }
  248.  
  249.         if(requested == name_key_query)
  250.         {
  251.             if(llLinksetDataRead(data) == "")
  252.             {
  253.                 llLinksetDataWrite(data, botName + ",0");
  254.                 //llOwnerSay("Adding "+ botName +" ("+ (string) data + ")");
  255.             }
  256.             else
  257.             {
  258.                 //llSay(0, "Skipping " + botName + " ("+(string) data + ")");
  259.             }
  260.             llSleep(0.3);
  261.             notecardQueryId = llGetNotecardLine(notecardName, ++notecardLine);
  262.         }
  263.         if(notecardQueryId == requested)
  264.         {
  265.             if(data == EOF)
  266.             {
  267.                 llSay(0, "Cardlines Read: " + (string) notecardLine);
  268.                 llSay(0, "Keys in LinksetData: " + (string) llLinksetDataCountKeys());
  269.                 state bot_status;
  270.             }
  271.             else
  272.             {
  273.                 botName = llStringTrim(data, STRING_TRIM);
  274.                 name_key_query = llRequestUserKey(botName);
  275.             }
  276.         }
  277.         llSetText("Loading\n \n" + (string) notecardLine +"/"+ (string) totalNotcardLines+  "\n" +
  278.             (string) llLinksetDataAvailable() + "\n",
  279.             <1,0,1>, 1.0);
  280.     }
  281.    
  282.     listen(integer chan, string name, key id, string msg)
  283.     {
  284.         if(chan == dListen_channel)
  285.         {
  286.             llSetTimerEvent(0);
  287.             llListenRemove(dListen_handle);
  288.  
  289.             if(msg == "Reload")
  290.             {
  291.                 llLinksetDataReset();
  292.                 totalNotecardQyID = llGetNumberOfNotecardLines(notecardName);
  293.                 notecardLine = 0;
  294.             }
  295.             if(msg == "Diff")
  296.             {
  297.                 state diff;
  298.             }
  299.         }
  300.     }
  301.     timer()
  302.     {
  303.         llListenRemove(dListen_handle);
  304.         llSetTimerEvent(0);
  305.     }
  306.    
  307.     changed(integer change)
  308.     {
  309.         if(change & CHANGED_INVENTORY)
  310.         {
  311.             llSay(0, "Inventory Changed, resetting.");
  312.             llResetScript();  
  313.         } else if(change & CHANGED_OWNER)
  314.         {
  315.             llResetScript();
  316.         }
  317.     }
  318.    
  319. }
  320.  
  321. state diff
  322. {
  323.     state_entry()
  324.     {
  325.         llSay(0, "state entry");
  326.     }
  327. }
  328.  
  329. state bot_status
  330. {
  331.      state_entry()
  332.     {  
  333.  
  334.         llSay(0, (string) llGetFreeMemory());
  335.         i = 0;
  336.         if(llLinksetDataRead("testmode"))
  337.         {
  338.             llSay(999, "STOP");
  339.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  340.         }
  341.         else
  342.         {
  343.             llSay(888, "STOP");
  344.             llSetColor(<1.000, 0.255, 0.212>, ALL_SIDES);
  345.         }
  346.         //dataSetKeys = llLinksetDataListKeys(0, -1);
  347.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  348.         llListen(dListen_channel, "", "", "");
  349.         botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(i, 1),0), DATA_ONLINE);
  350.     }
  351.        
  352.     touch_end(integer num)
  353.     {
  354.         user = llDetectedKey(0);
  355.         llDialog(user, "Main Menu", ["LinkSet", "Setup"], dListen_channel);
  356.     }
  357.  
  358.     listen(integer chan, string name, key id, string msg)
  359.     {
  360.         if(chan == dListen_channel)
  361.         {
  362.             if(msg == "Reload")
  363.             {
  364.                 state default;
  365.             }
  366.             if(msg == "Diff")
  367.             {
  368.                 state diff;
  369.             }
  370.             if(msg == "LinkSet")
  371.                 llDialog(user, "Linkset Data", ["List All", "List Banned", "Clear"], dListen_channel);
  372.             if(msg == "List All")
  373.                 listLinksetData();
  374.             if(msg == "List Banned")
  375.                 listLinksetBanned();
  376.             if(msg == "Clear")
  377.                 state listLinksetClear;
  378.             if(msg == "Setup")
  379.                 llDialog(user, "Select and option for Setup", ["Bantime", "Scantime"], dListen_channel);
  380.             if(msg == "Scantime")
  381.             {
  382.                
  383.                 llDialog(user, "Select a scantime.",
  384.                     [ "1 Hour", "2 Hours", "5 Minutes", "10 Minutes", "30 Minutes" ],
  385.                     dListen_channel);
  386.             }
  387.             if(msg == "Bantime")
  388.             {
  389.                 string bTime =  "Set Bantime. Currently set to ";
  390.                 if(defBanTime == 0.500000) bTime += "30 Minutes.";
  391.                 if(defBanTime == 1)        bTime += "1 Hour.";
  392.                 if(defBanTime == 2)        bTime += "2 Hours.";
  393.                 if(defBanTime == 6)        bTime += "6 Hours.";
  394.                 if(defBanTime == 24)       bTime += "1 Day.";
  395.                 if(defBanTime == 168)      bTime += "1 Week.";
  396.                 if(defBanTime == 0)        bTime += "Forever.";
  397.                 llDialog(user, bTime,
  398.                     [  "6 Hours", "1 Day", "1 Week", "30 mins", "1 Hour", "2 Hours" , "Forever"],
  399.                     dListen_channel);
  400.             }
  401.             if(msg == "30 mins")    resetBanTime(0.5);
  402.             if(msg == "1 Hour")     resetBanTime(1);
  403.             if(msg == "2 Hours")    resetBanTime(2);
  404.             if(msg == "6 Hours")    resetBanTime(6);
  405.             if(msg == "1 Day")      resetBanTime(24);
  406.             if(msg == "1 Week")     resetBanTime(168);
  407.             if(msg == "Forever")    resetBanTime(0);
  408.         }
  409.     }
  410.    
  411.     changed(integer change)
  412.     {
  413.         if(change & CHANGED_INVENTORY)
  414.         {
  415.             llSay(0, "Inventory Changed, resetting.");
  416.             llResetScript();  
  417.         } else if(change & CHANGED_OWNER)
  418.         {
  419.             llResetScript();
  420.         }
  421.     }
  422.    
  423.     timer()
  424.     {
  425.         botOnline  = 0;
  426.         botOffline = 0;
  427.         i          = 0;
  428.  
  429.  
  430.         if(llLinksetDataRead("testmode"))
  431.         {
  432.             llSay(999, "STOP");
  433.             llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  434.         }
  435.         else
  436.         {
  437.             llSay(888, "STOP");
  438.             llSetColor(<1.000, 0.255, 0.212>, ALL_SIDES);
  439.         }
  440.         //dataSetKeys = llLinksetDataListKeys(0, -1);
  441.         botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(i, 1), 0), DATA_ONLINE);
  442.     }
  443.  
  444.    
  445.     dataserver(key queryid, string data)
  446.     {
  447.         list keyBotStat;
  448.         if(queryid == botStatusQy)
  449.         {
  450.             llSetTimerEvent(0);
  451.             keyBotStat = llCSV2List(llLinksetDataRead(llList2String(llLinksetDataListKeys(i, 1), 0)));
  452.             if(data == (string) TRUE)
  453.             {
  454.                 if(llList2Integer(keyBotStat, 1) == 0)
  455.                 {
  456.                     llLinksetDataWrite(llList2String(llLinksetDataListKeys(i, 1), 0), llList2String(keyBotStat, 0) +
  457.                         "," + (string) llGetUnixTime());
  458.                    
  459.                     llWhisper(0, (string) llLinksetDataListKeys(i, 1) +
  460.                         " Banning :" + llList2String(keyBotStat, 0));
  461.                     llAddToLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0), defBanTime);
  462.                 }else if(llList2Integer(keyBotStat, 1) > 0)
  463.                 {
  464.                     llLinksetDataWrite(llList2String(llLinksetDataListKeys(i, 1), 0), llList2String(keyBotStat, 0) +
  465.                         "," + (string) llGetUnixTime());
  466.                     llRemoveFromLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0));
  467.                     llSleep(2.0);
  468.                     llAddToLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0), defBanTime);
  469.                 }
  470.  
  471.                 ++botOnline;
  472.             } else if(data == (string) FALSE)
  473.             {
  474.                 if(llList2Integer(keyBotStat,1) > 0)              
  475.                 {    
  476.                     llLinksetDataWrite(llList2String(llLinksetDataListKeys(i, 1), 0),
  477.                         llList2String(keyBotStat, 0) + ",0");
  478.                     llRemoveFromLandBanList(llList2Key(llLinksetDataListKeys(i, 1), 0));  
  479.                 }
  480.                 ++botOffline;
  481.             }
  482.         }
  483.  
  484.         //llSay(0, llLinksetDataRead(llList2Key(dataSetKeys, i)));
  485.         if(i < llLinksetDataCountKeys())
  486.         {
  487.             botStatusQy = llRequestAgentData(llList2Key(llLinksetDataListKeys(++i, 1), 0), DATA_ONLINE);
  488.         } else
  489.         {
  490.             if(llLinksetDataRead("testmode"))
  491.             {
  492.                 llSetColor(<0.000, 0.455, 0.851>, ALL_SIDES);
  493.                 llSay(999, "START");
  494.             }
  495.             else
  496.             {
  497.                 llSay(888, "START");
  498.                 llSetColor(<0.004, 1.000, 0.439>, ALL_SIDES);
  499.             }
  500.  
  501.             llSetTimerEvent(scanTime);
  502.         }
  503.        
  504.             llSetText("Known Bots: "  + (string) llLinksetDataCountKeys() + "\n" +
  505.                 "Bots Online : " + (string) botOnline + "\n" +
  506.                 "Bots Offline : " + (string) botOffline + "\n" +
  507.                 (string) llLinksetDataAvailable() + "\n" +
  508.                 (string) llGetFreeMemory(),
  509.                 <0,1,1>, 1);
  510.     }    
  511. }
  512.  
  513. state listLinksetClear
  514. {
  515.     state_entry()
  516.     {
  517.         notecardLine = 0;
  518.         dListen_channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  519.         llListen(dListen_channel, "", "", "");
  520.         llDialog(user, "This Delete All Bots in Memory. It will not remove them from land banlist.\nProceed?",
  521.             ["Yes", "No"], dListen_channel);
  522.  
  523.        
  524.     }
  525.      
  526.     listen(integer chan, string name, key id, string msg)
  527.     {
  528.         if(msg == "Yes")
  529.         {
  530.             llSay(0, "Removing Bot Keys from Memory.");
  531.             notecardQueryId = llGetNotecardLine(notecardName, notecardLine);
  532.         }
  533.     }
  534.    
  535.     dataserver(key requested, string data)
  536.     {
  537.         if(notecardQueryId == requested)
  538.         {
  539.             if(data == EOF)
  540.             {
  541.                 llSay(0, "All bot memory is clear.  Going dormant.  Touch to reset and reload.");
  542.                 state resting;
  543.             }
  544.             else
  545.             {
  546.                 botName = llStringTrim(data, STRING_TRIM);    
  547.                 list botList = linkSetSearch("", botName);
  548.                 llSay(0, (string) notecardLine +") " + llList2String(botList, 0));
  549.                 llLinksetDataDelete(llList2String(botList, 0));
  550.                
  551.                 llSetText((string) llLinksetDataCountKeys() + "\n" +
  552.                             (string) llGetFreeMemory() , <1,0.5,1>, 1.0);
  553.                 notecardQueryId = llGetNotecardLine(notecardName, ++notecardLine);
  554.             }
  555.         }
  556.     }
  557.    
  558. }
  559.  
  560. state resting
  561. {
  562.     state_entry()
  563.     {
  564.         llSetText("Touch to Reset", <1.000, 0.863, 0.000>, 1.0);
  565.         llSetColor(<0.067, 0.067, 0.067>, ALL_SIDES);
  566.     }
  567.    
  568.     touch_end(integer end)
  569.     {
  570.         llResetScript();
  571.     }
  572. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement