Advertisement
Madi_Perth

Child Protect

May 6th, 2024
814
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Linden Scripting 19.14 KB | Source Code | 0 0
  1. #include "colors.lsl"
  2. #include "linksetLists.lsl"
  3.  
  4. // #define DEBUG
  5. #include "debug.lsl"
  6.  
  7. // define default dialog buttons
  8. list size_menu = ["Main Menu", " --- ", "Done", "Large", "Medium", "Small"];
  9. list main_Menu = ["Reset", "Safezone", "Done", "Manual", "Rating", "Size", "Help"];
  10. list rate_Menu = ["Main Menu", " --- ", "Done", "Adult", "Moderate", "General"];
  11.  
  12. // saved safezone data
  13. vector  safe_zone_global;   // coords on grid of safezone
  14. vector  safe_zone_regional; // coords in sim of safezone
  15. key     safe_zone_query;    // dataquery key for safezone
  16. string  safe_zone_name;     // region name of safezone
  17.  
  18. // default safezone data
  19. key     default_safeQry;
  20. vector  default_safe_global;
  21.  
  22. key     regionQry;
  23. integer menu_Handle;
  24. integer menu_Channel;
  25.  
  26. // list config = ["Auto", "MATURE", "Medium"];
  27.  
  28. integer hudFlags = 1;
  29.  
  30. // hud mode flags
  31. #define AUTO  1 // Automatically TP to Safezone;
  32.  
  33. // hud size flags
  34. integer hud_size;   // size of hud
  35. #define SMALL   1   // small hud size
  36. #define MEDIUM  2   // Medium hud size
  37. #define LARGE   3   // Large hud size
  38.  
  39. // hud rating
  40. integer rating_score;
  41. #define GENERAL     1   //general rating
  42. #define MODERATE    2   // moderate rating
  43. #define ADULT       3   // adult raiting
  44.  
  45. // misc flag variables
  46. integer warningShown = 0;
  47. integer soundPlayed = 0;
  48.  
  49.  
  50.  
  51. // has the avatar teleported to safe zone
  52. integer tp_Flag;
  53. #define TPPED   0x001
  54.  
  55. string getRatingLevel()
  56. {
  57.     string tm;
  58.     switch (rating_score)
  59.     {
  60.         case ADULT:
  61.         {
  62.             tm = "Adult.";
  63.             break;
  64.         }
  65.         case MODERATE:
  66.         {
  67.             tm = "Moderate.";
  68.             break;
  69.         }
  70.         case GENERAL:
  71.         {
  72.             tm = "General.";
  73.             break;
  74.         }
  75.     }
  76.     return tm;
  77. }
  78.  
  79. // create the text for the hud size dialog
  80. string mk_hudsize()
  81. {
  82.     string ts = "Select Hud Size.\n\n\tCurrent Hud Size is ";
  83.     switch (hud_size)
  84.     {
  85.         case SMALL:
  86.         {    
  87.             ts += "Small";
  88.             break;
  89.         }
  90.         case MEDIUM:
  91.         {    
  92.             ts += "Medium";
  93.             break;
  94.         }
  95.         case LARGE:
  96.         {    
  97.             ts += "Large";
  98.             break;
  99.         }
  100.     }
  101.     return ts += "\n";
  102. }
  103.  
  104. // create the main menu text
  105. string mk_menu()
  106. {
  107.     string tm = "Main Menu:\n\n\tTeleport Mode is ";
  108.  
  109.     if (hudFlags == AUTO)
  110.         tm += "Auto";
  111.     else
  112.         tm += "Manual";
  113.  
  114.     tm += "\n\tSim Rating is ";
  115.  
  116.     switch (rating_score)
  117.     {
  118.         case ADULT:
  119.         {
  120.             tm += "Adult.";
  121.             break;
  122.         }
  123.         case MODERATE:
  124.         {
  125.             tm += "Moderate.";
  126.             break;
  127.         }
  128.         case GENERAL:
  129.         {
  130.             tm += "General.";
  131.             break;
  132.         }
  133.     }
  134.  
  135.     tm += "\n\tCurrent Safe Zone is ";
  136.  
  137.     if(safe_zone_name != "")
  138.         tm += safe_zone_name;
  139.     else
  140.         tm += "WelcomeHub";
  141.  
  142.     return tm += "\n";
  143. }
  144.  
  145.  
  146. // replace single list entries with
  147. list replaceListEntry( list entry, string  replace, string with )
  148. {
  149.     integer  index = llListFindList(entry, (list) replace);
  150.     DS("index = " + (string) index);
  151.     if(index == -1)
  152.         return entry;
  153.     else
  154.         return llListReplaceList(entry, (list) with, index, index);
  155. }
  156.  
  157. //Created by Ugleh Ulrik
  158. //This sort of script should cost, but for you free :)
  159. //Edited by Taff Nouvelle to put the buttons in correct order.
  160. list order_buttons(list buttons)
  161. {
  162.     return buttons;
  163.     // return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) +
  164.     //     llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
  165. }
  166.  
  167. default
  168. {
  169.     state_entry()
  170.     {
  171.  
  172.         // cache textures
  173.         llSetTexture("119e28e5-1043-0dc0-864e-a403092a4c2a", 1);
  174.         llSetTexture("1fb10f43-10c6-844e-fb94-a78dbc30ed9b", 1);
  175.         llSetTexture("723386b5-e554-8430-d464-26d168f3aa58", 1);
  176.         llSetTexture("2104d080-0e63-248a-5a90-1fb209c0d25f", 1);
  177.         llOwnerSay("Press hud for 2 or more seconds for Main Menu.");
  178.  
  179.         // set the default size to medium
  180.         llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, <0.05000, 0.05000, 0.05000>]);
  181.         hud_size = MEDIUM;
  182.  
  183.         // open channels and set basic texture
  184.         menu_Channel = 0x80000000 | (integer)llFrand(65536) | ((integer)llFrand(65536) << 16);
  185.         menu_Handle = llListen(menu_Channel, "", llGetOwner(), "");
  186.         llSetTexture("2104d080-0e63-248a-5a90-1fb209c0d25f", ALL_SIDES);
  187.  
  188.         // load safezone if saved to linksetdata
  189.         list    tl;
  190.         string  ts;
  191.         if((ts = llLinksetDataRead("safezone")) != "")
  192.         {
  193.             // parse saved safezone
  194.             DS(ts);
  195.             tl = llCSV2List(ts);
  196.             safe_zone_global = (vector) llList2String(tl, 0);
  197.             safe_zone_regional = (vector) llList2String(tl, 1);
  198.             safe_zone_name = llList2String(tl, 2);
  199.             DS((string) safe_zone_global);
  200.             DS((string) safe_zone_regional);
  201.             DS((string) safe_zone_name);                        
  202.            
  203.         }
  204.         // else load default safezone
  205.         else
  206.         {
  207.             // use default WelcomeHub zone
  208.             llOwnerSay("No saved Safezone found.\nUsing WelcomeHub as default.");
  209.             default_safeQry = llRequestSimulatorData("WelcomeHub", DATA_SIM_POS);
  210.         }
  211.         rating_score = 2;   // set default sim score to moderate
  212.         // ask permission then start hud
  213.         llRequestPermissions(llGetOwner(), PERMISSION_TELEPORT);
  214.     }
  215.  
  216.     listen( integer channel, string name, key id, string message )
  217.     {
  218.         switch(message)
  219.         {
  220.             case "Help":
  221.             {
  222.                 llGiveInventory(llGetOwner(), "Instructions");
  223.                 break;
  224.             }
  225.             // goto safezone
  226.             case "GO!":
  227.             {
  228.                 vector global;
  229.                 vector regional = <128, 128, 20>;
  230.  
  231.                 if(safe_zone_name != "")
  232.                 {
  233.                     global = safe_zone_global;
  234.                     regional = safe_zone_regional;
  235.                 }
  236.                 else
  237.                 {
  238.                     global = default_safe_global;
  239.                 }
  240.  
  241.                 warningShown = 1;
  242.                 llTeleportAgentGlobalCoords(llGetPermissionsKey(),
  243.                     global,
  244.                     regional,
  245.                     ZERO_VECTOR);
  246.                 break;
  247.  
  248.             }
  249.             // set safezone
  250.             case "Safezone":
  251.             {
  252.                 safe_zone_name = llGetRegionName();
  253.                 safe_zone_query = llRequestSimulatorData(safe_zone_name, DATA_SIM_POS);
  254.                 llDialog(llGetOwner(), mk_menu(), main_Menu, menu_Channel);
  255.                 break;
  256.             }
  257.             // reset the hud
  258.             case "Reset":
  259.             {
  260.                 llDialog(llGetOwner(), "Reset Hud? ", ["Yes", "No"], menu_Channel);
  261.                 break;
  262.             }
  263.             // answer 'Yes'to reset the hud
  264.             case "Yes":
  265.             {
  266.                 llOwnerSay("Reseting hud and deleting data.");
  267.                 llLinksetDataReset();
  268.                 llResetScript();
  269.                 break;
  270.             }
  271.             // size of the hud
  272.             case "Size":
  273.             {
  274.                 llDialog(llGetOwner(), mk_hudsize(), order_buttons(size_menu), menu_Channel);
  275.                 break;
  276.             }
  277.             case "Large":
  278.             {
  279.                 llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, <0.10000, 0.10000, 0.10000>]);
  280.                 hud_size = LARGE;
  281.                 llDialog(llGetOwner(), mk_hudsize(), order_buttons(size_menu), menu_Channel);
  282.                 break;
  283.             }
  284.             case ("Medium"):
  285.             {
  286.                 hud_size = MEDIUM;
  287.                 llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, <0.05000, 0.05000, 0.05000>]);
  288.                 llDialog(llGetOwner(), mk_hudsize(), order_buttons(size_menu), menu_Channel);
  289.                 break;
  290.             }
  291.             case ("Small"):
  292.             {
  293.                 hud_size = SMALL;
  294.                 llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, <0.10000, 0.02500, 0.02500>]);
  295.                 llDialog(llGetOwner(), mk_hudsize(), order_buttons(size_menu), menu_Channel);
  296.                 break;
  297.             }
  298.             // hud mode of operation
  299.             case "Auto":
  300.             {
  301.                 hudFlags =  AUTO;
  302.                 DS("hudflags " + (string) hudFlags );
  303.                 main_Menu = replaceListEntry(main_Menu, "Auto", "Manual");
  304.                 llDialog(llGetOwner(), mk_menu(), main_Menu, menu_Channel);
  305.                 break;
  306.             }
  307.             case "Manual":
  308.             {
  309.                 hudFlags = 0;
  310.                 DS("hudflags " + (string) hudFlags );
  311.                 main_Menu = replaceListEntry(main_Menu, "Manual", "Auto");
  312.                 llDialog(llGetOwner(), mk_menu(), main_Menu, menu_Channel);
  313.                 break;
  314.             }
  315.             // go back to main menu
  316.             case "Main Menu":
  317.             {
  318.                 llDialog(llGetOwner(), mk_menu(), main_Menu, menu_Channel);
  319.                 break;
  320.             }
  321.             // ratings dialog
  322.             case "Rating":
  323.             {
  324.                 // build menu for sim rating dialog
  325.                 string ts = "\n\n\tCurrent setting is ";
  326.                 switch (rating_score)
  327.                 {
  328.                     case ADULT:
  329.                     {
  330.                         ts += "Adult.";
  331.                         break;
  332.                     }
  333.                     case MODERATE:
  334.                     {
  335.                         ts += "Moderate.";
  336.                         break;
  337.                     }
  338.                     case GENERAL:
  339.                     {
  340.                         ts += "General.";
  341.                         break;
  342.                     }
  343.                 }
  344.                 ts += "\n";
  345.  
  346.                 llDialog(llGetOwner(), "Set Max Sim Rating" + ts, rate_Menu, menu_Channel);
  347.                 break;
  348.             }
  349.             // case for selecting sim level rating
  350.             case "Adult":
  351.             {
  352.                 rating_score = ADULT;
  353.                 warningShown = 0;
  354.                 string ts = "\n\n\tCurrent setting is " + getRatingLevel();
  355.                 llDialog(llGetOwner(), "Set Max Sim Rating" + ts, rate_Menu, menu_Channel);
  356.                
  357.                 break;
  358.             }
  359.             case "Moderate":
  360.             {
  361.                 rating_score = MODERATE;
  362.                 warningShown = 0;
  363.                 string ts = "\n\n\tCurrent setting is " + getRatingLevel();
  364.                 llDialog(llGetOwner(), "Set Max Sim Rating" + ts, rate_Menu, menu_Channel);
  365.                
  366.                 break;
  367.             }
  368.             case "General":
  369.             {
  370.                 rating_score = GENERAL;
  371.                 warningShown = 0;
  372.                 string ts = "\n\n\tCurrent setting is " + getRatingLevel();
  373.                 llDialog(llGetOwner(), "Set Max Sim Rating" + ts, rate_Menu, menu_Channel);
  374.                
  375.                 break;
  376.             }
  377.         }
  378.         DS("ratings score " + (string) rating_score);
  379.     }
  380.  
  381.     // ask for teleport premission
  382.     run_time_permissions(integer perm)
  383.     {
  384.         if (PERMISSION_TELEPORT & perm)
  385.         {
  386.             regionQry = llRequestSimulatorData(llGetRegionName(), DATA_SIM_RATING);
  387.             llSetTimerEvent(5.0);
  388.         }
  389.         else
  390.         {
  391.             llOwnerSay("Hud will not function correctly without teleport premission.\nReattach hud to rest premissions.");
  392.         }
  393.     }
  394.  
  395.     // check to sim ratings ever 5 seconds
  396.     timer()
  397.     {
  398.         regionQry = llRequestSimulatorData(llGetRegionName(), DATA_SIM_RATING);
  399.     }
  400.  
  401.     attach( key id )
  402.     {
  403.         // upon attaching display basic settings
  404.         string ts = "Current settings are\n";
  405.  
  406.         if(hudFlags == AUTO)
  407.             ts += "\tTeleport Mode is set to Auto.";
  408.         else
  409.             ts += "\tTeleport Mode is set to Manual.";
  410.  
  411.         ts += "\n\tCurrent Sim limit is ";
  412.         switch (rating_score)
  413.         {
  414.             case ADULT:
  415.             {
  416.                 ts += "Adult.";
  417.                 break;
  418.             }
  419.             case MODERATE:
  420.             {
  421.                 ts += "Moderate.";
  422.                 break;
  423.             }
  424.             case GENERAL:
  425.             {
  426.                 ts += "General.";
  427.                 break;
  428.             }
  429.         }
  430.         ts += "\n\tCurrent Safezone is ";
  431.  
  432.         if(safe_zone_name != "")
  433.             ts += safe_zone_name;
  434.         else
  435.             ts += "WelcomeHub";
  436.  
  437.         // then request premission to tp
  438.         if(id)
  439.         {
  440.             llOwnerSay(ts);  
  441.             llRequestPermissions(llGetOwner(), PERMISSION_TELEPORT);
  442.         }
  443.     }
  444.  
  445.     dataserver( key queryid, string data )
  446.     {
  447.         // getting the curren location when the safezone
  448.         // button is pushed
  449.         if(safe_zone_query == queryid)
  450.         {
  451.             list tl;
  452.  
  453.             tl = llGetParcelDetails(llGetPos(), [PARCEL_DETAILS_NAME]);
  454.             safe_zone_global = (vector) data;
  455.             safe_zone_regional = llGetPos();
  456.             llOwnerSay("Safezone set to " + safe_zone_name
  457.                 + ", " + llList2String(tl, 0));
  458.             llLinksetDataWrite("safezone", (string) safe_zone_global +","+ (string) safe_zone_regional+","+safe_zone_name );
  459.             DS(llLinksetDataRead("safezone"));
  460.         }
  461.  
  462.         // get location on grid of default safezone
  463.         // currently the G rated WelcomeHub sim
  464.         if(default_safeQry == queryid)
  465.         {
  466.             default_safe_global = (vector) data;
  467.         }
  468.  
  469.         // set texture depending on sim rating
  470.         // green - PG
  471.         // blue - moderate or mature
  472.         // red - adult (never safe)        
  473.         if(queryid == regionQry)
  474.         {
  475.             integer sim_score;
  476.  
  477.             switch (data)
  478.             {
  479.                 case ("PG"):
  480.                 {
  481.                     sim_score = 0;
  482.                     llSetTexture("119e28e5-1043-0dc0-864e-a403092a4c2a", ALL_SIDES);
  483.                     break;
  484.                 }
  485.                 case ("MATURE"):
  486.                 {
  487.                     sim_score = 2;
  488.                     llSetTexture("1fb10f43-10c6-844e-fb94-a78dbc30ed9b", ALL_SIDES);
  489.                     break;
  490.                 }
  491.                 default:
  492.                 {
  493.                     sim_score = 3;
  494.                     llSetTexture("723386b5-e554-8430-d464-26d168f3aa58", ALL_SIDES);
  495.                     break;
  496.                 }
  497.             }
  498.  
  499.             //  monitoring sim rating and tp to savezone
  500.             // if rating exceeds safty score
  501.             if(sim_score > rating_score)
  502.             {
  503.  
  504.                 string ts;
  505.  
  506.                 if(safe_zone_name != "")
  507.                     ts = safe_zone_name;
  508.                 else
  509.                     ts = "WelcomeHub";
  510.  
  511.                 if(hudFlags == AUTO && warningShown == 0)
  512.                 {
  513.                     vector global;
  514.                     vector regional = <128, 128, 20>;
  515.  
  516.                     DS(safe_zone_name);
  517.                     if(safe_zone_name != "")
  518.                     {
  519.                         global = safe_zone_global;
  520.                         regional = safe_zone_regional;
  521.                     }
  522.                     else
  523.                     {
  524.                         global = default_safe_global;
  525.                     }
  526.                     DS((string) global);
  527.                     DS((string) regional);
  528. #ifndef DEBUG
  529.                     if(llGetRegionName() != safe_zone_name || llGetRegionName() == "WelcomeHub")
  530.                     {
  531.                         llTeleportAgentGlobalCoords(llGetPermissionsKey(),
  532.                             global,
  533.                             regional,
  534.                             ZERO_VECTOR);
  535.                         llDialog(llGetOwner(),
  536.                             "Region Rating Surpassed Safty Settings\n\nAvatar Sent to SafeZone at " + ts +".",
  537.                             ["Ok"], menu_Channel);
  538.                     }
  539. #endif
  540.                 }
  541.                 else if (warningShown == 0)
  542.                 {
  543.                     if(llGetRegionName() != safe_zone_name && llGetRegionName() != "WelcomeHub")
  544.                     {
  545.                         string tb = getRatingLevel();
  546.                         llPlaySound("d7fa8e1e-2590-bc31-08a2-5d1096231ddf", 1.0);
  547.                         llDialog(llGetOwner(),
  548.                             "WARNING!!!! WARNING!!! WARNING!!!\n\n"+
  549.                             "Region Rating of " + llGetRegionName() + " Surpasses Safty Setting of " + tb
  550.                             +  "\n\nPress \"GO!\" buttong goto safezone at " + ts +".",
  551.                             ["GO!" ,"Ok"],
  552.                             menu_Channel);
  553.                         warningShown = 1;
  554.                     }
  555.                 }
  556.             }
  557.         }
  558.    
  559.     }
  560.  
  561.     // hopped to a new region or crossed a regional boundry
  562.     changed( integer change )
  563.     {
  564.  
  565.         if(CHANGED_REGION & change)
  566.         {
  567.             if(!(llGetPermissions() & PERMISSION_TELEPORT))
  568.                 return;
  569.             // region changed
  570.             DS("region changed");
  571.             warningShown = 0;
  572.            
  573.             regionQry = llRequestSimulatorData(llGetRegionName(), DATA_SIM_RATING);
  574.         }
  575.         if(CHANGED_OWNER & change)
  576.         {
  577.             llLinksetDataReset();
  578.             llSay(0, "Ownership Changed, Resetting to Default Settings.");
  579.             llResetScript();
  580.         }
  581.     }
  582.  
  583.  
  584.     touch_start( integer num_detected )
  585.     {
  586.         if(llGetPermissions() & PERMISSION_TELEPORT)
  587.             llResetTime();
  588.     }
  589.  
  590.     // open menu
  591.     touch( integer num_detected )
  592.     {
  593.         if(!(llGetPermissions() & PERMISSION_TELEPORT))
  594.             return;
  595.         if(llGetTime() > 2 && soundPlayed == 0)
  596.         {
  597.             llPlaySound("d23c9120-ba77-6c69-5ee1-0529b6e6ad5d", 1);
  598.             soundPlayed = 1;
  599.             llDialog(llGetOwner(), mk_menu(), main_Menu, menu_Channel);
  600.         }
  601.     }
  602.  
  603.     // panic button pushed taking to safe zone
  604.     touch_end( integer num )
  605.     {
  606.         if(!(llGetPermissions() & PERMISSION_TELEPORT))
  607.             return;
  608.        
  609.         soundPlayed = 0;
  610.  
  611.         if(llGetTime() < 2)
  612.         {
  613.             vector global;
  614.             vector regional = <128, 128, 20>;
  615.             // panic botton pushed
  616.             llOwnerSay("Panic Botton Pressed, taking to safe zone.");
  617.             DS(safe_zone_name);
  618.             if(safe_zone_name != "")
  619.             {
  620.                 global = safe_zone_global;
  621.                 regional = safe_zone_regional;
  622.             }
  623.             else
  624.             {
  625.                 global = default_safe_global;
  626.             }
  627.             DS((string) global);
  628.             DS((string) regional);
  629. #ifndef DEBUG
  630.  
  631.             llTeleportAgentGlobalCoords(llGetPermissionsKey(),
  632.             global,
  633.             regional,
  634.             ZERO_VECTOR);
  635.            
  636. #endif
  637.         }
  638.     }
  639. }
  640.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement