Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * [AV]root-security - Specify who can sit and/or use the menu
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * Copyright © the AVsitter Contributors (http://avsitter.github.io)
- * AVsitter™ is a trademark. For trademark use policy see:
- * https://avsitter.github.io/TRADEMARK.mediawiki
- *
- * Please consider supporting continued development of AVsitter and
- * receive automatic updates and other benefits! All details and user
- * instructions can be found at http://avsitter.github.io
- */
- string product = "AVsitter™ Security 2.2";
- string script_basename = "[AV]sitA";
- string menucontrol_script = "[AV]root-control";
- string RLV_script = "[AV]root-RLV";
- key active_sitter;
- integer active_prim;
- integer active_script_channel;
- integer menu_channel;
- integer menu_handle;
- list SIT_TYPES = ["ALL", "OWNER", "GROUP"];
- integer SIT_INDEX;
- integer MENU_INDEX;
- string lastmenu;
- list MENU_TYPES = [lastmenu]; //OSS::list MENU_TYPES; // Force error in LSO
- integer pass_security(key id, string context)
- {
- integer ALLOWED = FALSE;
- string TYPE = llList2String(SIT_TYPES, SIT_INDEX);
- if (context == "MENU")
- {
- TYPE = llList2String(MENU_TYPES, MENU_INDEX);
- }
- if (TYPE == "GROUP")
- {
- if (llSameGroup(id) == TRUE)
- {
- ALLOWED = TRUE;
- }
- }
- else if (id == llGetOwner() || TYPE == "ALL")
- {
- ALLOWED = TRUE;
- }
- return ALLOWED;
- }
- check_sitters()
- {
- integer i = llGetNumberOfPrims();
- while (llGetAgentSize(llGetLinkKey(i)) != ZERO_VECTOR)
- {
- key av = llGetLinkKey(i);
- if (pass_security(av, "SIT") == FALSE)
- {
- llUnSit(av);
- llDialog(av, product + "\n\nSorry, Sit access is set to: " + llList2String(SIT_TYPES, SIT_INDEX), ["OK"], -164289491);
- if(llList2String(SIT_TYPES, SIT_INDEX) == "GROUP")
- {
- list det = llGetObjectDetails(llGetKey(),[OBJECT_GROUP]);
- key group = llList2Key(det,0);
- llInstantMessage(av,"To sit please join this group: secondlife:///app/group/"+(string)group+"/about");
- }
- }
- i--;
- }
- }
- back_to_adjust(integer SCRIPT_CHANNEL, key sitter)
- {
- llMessageLinked(LINK_SET, 90101, (string)SCRIPT_CHANNEL + "|[ADJUST]|", sitter);
- }
- list order_buttons(list menu_items)
- {
- return llList2List(menu_items, -3, -1) + llList2List(menu_items, -6, -4) + llList2List(menu_items, -9, -7) + llList2List(menu_items, -12, -10);
- }
- register_touch(key id, integer animation_menu_function, integer active_prim, integer giveFailedMessage)
- {
- if (pass_security(id, "MENU"))
- {
- if (llGetInventoryType(menucontrol_script) == INVENTORY_SCRIPT)
- {
- if (check_for_RLV())
- {
- llMessageLinked(LINK_THIS, 90012, (string)active_prim, id);
- }
- else
- {
- llMessageLinked(LINK_THIS, 90007, "", id);
- }
- }
- else
- {
- llMessageLinked(LINK_SET, 90005, (string)animation_menu_function, id);
- }
- }
- else if (giveFailedMessage)
- {
- llDialog(id, product + "\n\nSorry, Menu access is set to: " + llList2String(MENU_TYPES, MENU_INDEX), ["OK"], -164289491);
- }
- }
- main_menu()
- {
- list buttons = (list)"Sit" + "Menu";
- if (active_sitter) // OSS::if (osIsUUID(active_sitter) && active_sitter != NULL_KEY)
- {
- buttons = "[BACK]" + buttons;
- }
- dialog("Sit access: " + llList2String(SIT_TYPES, SIT_INDEX) + "\nMenu access: " + llList2String(MENU_TYPES, MENU_INDEX) + "\n\nChange security settings:", buttons);
- lastmenu = "";
- }
- dialog(string text, list menu_items)
- {
- llListenRemove(menu_handle);
- menu_handle = llListen((menu_channel = ((integer)llFrand(0x7FFFFF80) + 1) * -1), "", llGetOwner(), ""); // 7FFFFF80 = max float < 2^31
- llDialog(llGetOwner(), product + "\n\n" + text, order_buttons(menu_items), menu_channel);
- llSetTimerEvent(600);
- }
- integer check_for_RLV()
- {
- if (llGetInventoryType(RLV_script) == INVENTORY_SCRIPT)
- {
- return TRUE;
- }
- return FALSE;
- }
- default
- {
- state_entry()
- {
- MENU_TYPES = SIT_TYPES;
- llMessageLinked(LINK_SET, 90202, (string)check_for_RLV(), "");
- }
- timer()
- {
- llSetTimerEvent(0);
- llListenRemove(menu_handle);
- }
- link_message(integer sender, integer num, string msg, key id)
- {
- if (num == 90201)
- {
- llMessageLinked(LINK_SET, 90202, (string)check_for_RLV(), "");
- }
- else if (num == 90006)
- {
- if (llGetInventoryType(menucontrol_script) != INVENTORY_SCRIPT)
- {
- register_touch(id, (integer)msg, sender, FALSE);
- }
- }
- else if (num == 90100)
- {
- list data = llParseString2List(msg, ["|"], []);
- if (llList2String(data, 1) == "[SECURITY]")
- {
- if (id == llGetOwner())
- {
- active_prim = sender;
- active_script_channel = llList2Integer(data, 0);
- active_sitter = llList2Key(data, 2);
- main_menu();
- }
- else
- {
- llRegionSayTo(id, 0, "Sorry, only the owner can change security settings.");
- llMessageLinked(sender, 90101, llList2String(data, 0) + "|[ADJUST]|" + (string)id, llList2Key(data, 2));
- }
- }
- }
- else if (num == 90033)
- {
- llListenRemove(menu_handle);
- }
- }
- listen(integer listen_channel, string name, key id, string msg)
- {
- if (msg == "Sit")
- {
- dialog("Sit security:", SIT_TYPES);
- lastmenu = msg;
- return;
- }
- else if (msg == "Menu")
- {
- dialog("Menu security:", MENU_TYPES);
- lastmenu = msg;
- return;
- }
- else
- {
- if (msg == "[BACK]")
- {
- llMessageLinked(LINK_SET, 90101, (string)active_script_channel + "|[ADJUST]|" + (string)id, active_sitter);
- }
- else if (lastmenu == "Sit")
- {
- SIT_INDEX = llListFindList(SIT_TYPES, [msg]);
- main_menu();
- check_sitters();
- return;
- }
- else if (lastmenu == "Menu")
- {
- MENU_INDEX = llListFindList(MENU_TYPES, [msg]);
- main_menu();
- return;
- }
- }
- llListenRemove(menu_handle);
- }
- changed(integer change)
- {
- if (change & CHANGED_LINK)
- {
- check_sitters();
- }
- }
- touch_end(integer touched)
- {
- if (check_for_RLV() || llGetAgentSize(llGetLinkKey(llGetNumberOfPrims())) != ZERO_VECTOR)
- {
- register_touch(llDetectedKey(0), 0, llDetectedLinkNumber(0), TRUE);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement