Jump to content

AdminGirl

Resident
  • Content Count

    53
  • Joined

  • Last visited

Community Reputation

51 Excellent

About AdminGirl

  • Rank
    Advanced Member

Recent Profile Visitors

134 profile views
  1. Hi I found a really great full perm freebie animation/pose HUD script on the mp by Vlad Blackburn. Since most pose names are longer than 12 characters, I'm trying to make it so that the buttons can be numbers and the name of the poses appear as a list above the buttons. I've been working off a script example provided in the below thread. https://community.secondlife.com/forums/topic/38305-dialog-choices-from-numbered-buttons/ https://community.secondlife.com/forums/topic/432512-recipe-dialog-menu/ I'm having a lot of trouble but I know my approach is way off - I've just been trying to copy & paste bits from one script into another. Can anyone help point me in the right direction or is this too much for a noob and I should just go into the Wanted section? 😔 Here's the original animation HUD script: float timeout = 60.0; key owner; list animation_names; list animation_buttons; integer animations_count; string animation; integer listener; integer page; GetAnimations () { animation_names = []; animation_buttons = []; animations_count = llGetInventoryNumber (INVENTORY_ANIMATION); integer index = 0; while (index < animations_count) { string name = llGetInventoryName (INVENTORY_ANIMATION, index++); animation_buttons += llGetSubString (name, 0, 23); animation_names += name; } } Menu () { if (animations_count) { string text = "\n" + llList2String (["Currently playing \"" + animation + "\"\n\n", "" ], animation == "") + "Select an animation:"; list buttons; integer start = 0; integer end = ~-animations_count; if (animations_count > 9) { integer pages = end / 7; if (page < 0) page = pages; else if (page > pages) page = 0; if (page == pages) start = animations_count - 7; else end = (start = page * 7) + 6; buttons = ["<<"] + llListInsertList (llList2List (animation_buttons, start, end), (list) ">>", 1); text += "\n\n(" + (string) (-~start) + " to " + (string) (-~end) + " of " + (string) animations_count + ", page " + (string) (-~page) + " of " + (string) (-~pages) + ")"; } else buttons = llList2List (animation_buttons, start, end); llDialog (owner, text, ["END", llList2String (["STOP", " "], animation == ""), " "] + buttons, StartDialog ()); } else llDialog (owner, "\nNo animations found.", ["END"], StartDialog ()); } integer StartDialog () { integer channel; listener = llListen (channel = (integer) llFrand (-1999000001.0) - 1000000, "", owner, ""); llSetTimerEvent (timeout); return channel; } EndDialog () { llSetTimerEvent (0.0); llListenRemove (listener); } StartAnimation (integer index) { StopAnimation (); llStartAnimation (animation = llList2String (animation_names, index)); } StopAnimation () { if (animation) { llStopAnimation (animation); animation = ""; } } default { state_entry () { owner = llGetOwner (); GetAnimations (); if (llGetAttached ()) llRequestPermissions (owner, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS); } attach (key id) { if (id) llRequestPermissions (id, PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS); } run_time_permissions (integer permissions) { if (!(permissions & PERMISSION_TRIGGER_ANIMATION)) { llPlaySound ("d5567c52-b78d-f78f-bcb1-605701b3af24", 1.0); llOwnerSay ("You must give permission for this " + llGetObjectName () + " to animate your avatar for it to work!"); llResetScript (); } if (permissions & PERMISSION_TAKE_CONTROLS) llTakeControls (CONTROL_ML_LBUTTON, FALSE, TRUE); } changed (integer change) { if (change & CHANGED_INVENTORY) GetAnimations (); else if (change & CHANGED_OWNER) llResetScript (); } touch_end (integer count) { EndDialog (); Menu (); } listen (integer channel, string name, key id, string message) { EndDialog (); if (message != "END") { integer index; if (~(index = llListFindList (animation_buttons, (list) message))) StartAnimation (index); else if (message == "STOP") StopAnimation (); else if (message == "<<") --page; else if (message == ">>") ++page; Menu (); } } timer () { EndDialog (); llPlaySound ("d5567c52-b78d-f78f-bcb1-605701b3af24", 1.0); llDialog (owner, "\n" + llGetObjectName () + " menu timeout.", ["END"], -1); } }
  2. Thanks so much for the help all ☺️
  3. Finding people you click with in sl is kind of the same as rl - sometimes you just click with someone, and with others you might not. Maybe you should just chill and let it happen organically 'cause it sounds like you might be trying a bit too hard. The whole sifting through profiles, derendering, etc etc.. If that works for you, sure, stick with it, but it sounds more like a chore to me. If you're aggressively seeking out hour long conversations from strangers, you'll grow tired. There are so many things to do in sl where you'll naturally just meet people without forcing it. Plus, the whole selection process goes both ways. The way you filter out people by reading through profiles and filter out avis that don't suit your taste, chances are the other person is doing the same - they're picking profiles they like, assessing messages/responses, basically everything you say you're doing, they're doing it too. That will be a factor to the responses or non-responses you get. Generally though, if you just hang out and do stuff you like, it's actually fairly easy to meet people. It just happens.
  4. Hi I've been trying to set up rezzers for decor purposes so I can change to different scenes via clicking, and I've been working with this script, most of which was from the sl forum archive. The problem I'm having is that when I have more than one rezzer, touching one seems to affect the others. For example, if I had two rezzers, and I click on rezzer 1, rezzer 2 will somehow recognise that it has been touched (when it has not), and it will run the dialog menu and try and rezz out the object as well. How can I make this script work independently regardless of how many other rezzers are present? What I'm trying to do is have one rezzer for a table, another for the deck, etc. list MENU1 = []; list MENU2 = []; integer listener; integer MENU_CHANNEL = 1000; string mainMenuDialog = "\nWhich settings would you like to access?\nClick \"Close\" to close the menu.\n\nYou are here:\nMainmenu"; list mainMenuButtons = ["sub 01", "sub 02", "Close"]; string subMenu_01_Dialog = "\nClick \"Close\" to close the menu.\nClick \"-Main-\" to return to the main menu.\n\nYou are here:\nMainmenu > sub 01"; list subMenu_01_Buttons = ["action 01a", "action 01b", "Close", "-Main-"]; string subMenu_02_Dialog = "\nClick \"Close\" to close the menu.\nClick \"-Main-\" to return to the main menu.\n\nYou are here:\nMainmenu > sub 02"; list subMenu_02_Buttons = ["action 02a", "action 02b", "Close", "-Main-"]; integer dialogChannel; integer dialogHandle; Dialog(key id, list menu) { llListenRemove(listener); listener = llListen(MENU_CHANNEL, "", NULL_KEY, ""); llDialog(id, "Select one object below: ", menu, MENU_CHANNEL); } open_menu(key inputKey, string inputString, list inputList) { dialogChannel = (integer)llFrand(DEBUG_CHANNEL)*-1; dialogHandle = llListen(dialogChannel, "", inputKey, ""); llDialog(inputKey, inputString, inputList, dialogChannel); llSetTimerEvent(30.0); } close_menu() { llSetTimerEvent(0.0);// you can use 0 as well to save memory llListenRemove(dialogHandle); } default { on_rez(integer num) { llResetScript(); } touch_start(integer total_number) { integer i = 0; MENU1 = []; MENU2 = []; integer c = llGetInventoryNumber(INVENTORY_OBJECT); if (c <= 12) { for (; i < c; ++i) MENU1 += llGetInventoryName(INVENTORY_OBJECT, i); llShout(-193245,"Clean_Your_Room"); //Tell Rezzed prim to Go Away llSleep(0.5); //Give Prim A chance to go Away close_menu(); } else { for (; i < 11; ++i) MENU1 += llGetInventoryName(INVENTORY_OBJECT, i); if(c > 22) c = 22; for (; i < c; ++i) MENU2 += llGetInventoryName(INVENTORY_OBJECT, i); MENU1 += ">>"; MENU2 += "<<"; llShout(-193245,"Clean_Your_Room"); //Tell Rezzed prim to Go Away llSleep(0.5); //Give Prim A chance to go Away close_menu(); } Dialog(llDetectedKey(0), MENU1); } listen(integer channel, string name, key id, string message) { if (channel == MENU_CHANNEL) { llListenRemove(listener); if (message == ">>") { Dialog(id, MENU2); } else if (message == "<<") { Dialog(id, MENU1); } else { // todo add offsets so box sites perfect on rezzer llRezAtRoot(message, llGetPos(), ZERO_VECTOR, llGetRot(), 0); } } } }
  5. I don't see how it matters which account people use to buy content; we're allowed to, aren't we? I haven't sought out fp stuff before so I might be wrong, but my understanding is that as long as the buyer isn't breaching any conditions of the purchase (eg. selling under a certain amount, or selling the item as is without significant modifications), what they do with the item they purchased is their business and within their rights, including dissecting the items. I can only guess you're paranoid that a certain person has used an alt to purchase from you to avoid being caught breaching your T&C under their main account. If that's what you're saying, then I empathize. If I was a full perm creator, I think I'd worry about that sort of thing. But I also think you should be mindful of the signals you're sending as a seller. I mean, if I were to spend a considerable amount of money at a store, and the thanks I get is suspicion and/or accusations, then that would be very uncool.
  6. I hear a lot of alt shaming, but I actually find those who try and sniff out alts to be shady and creepy. I was at a store one time when I got an IM from a random dude asking me if I've seen a certain avi at that store. He went on about how he suspects she's been playing on an alt account so he's hitting up women stores to do his "homework". Mind you, he was a one month old avi so clearly he's created an alt to hunt her down. I told him I don't help stalkers and he was all like "no no, we're old friends, I'm just trying to get in touch". Whatever. If you're trying to find someone when they don't want to be found, that's not just invasive, it's stalkerish and creepy.
  7. Would be cool to have the option to still see everyone's usernames when 'Show friends only' has been selected.. so you don't have to render everyone but avoid bumping into them.
  8. Thanks so much everyone, this is so helpful. Most of the tips and tutorials I've seen re: SL photography just says to push the graphics all the way up to ultra without saying much about what that actually does. I'm not so confused anymore! 😃
  9. Um.. this is going to sound stupid, but can someone explain what the Quality and Speed slider does exactly (the Low, Mid, High, Ultra slider under Graphics), aside from moving all the other sliders like Draw distance, LOD, etc? 😕
  10. Oh you genius, it worked! It was the first llDetachFromAvatar function under run_time_permissions, so I replaced it with llAttachToAvatarTemp(prop_point) and now it stays attached wherever I go. Thank you so much!
  11. Thanks for your reply Fenix. The [AV]object script is used so that when an object is touched, a menu appears. When a menu button is selected and if permission to animate is granted, a prop will attach to the avatar. The [AV]object script is for the prop, and two other scripts are dropped into the object that is touched. I've seen it used in a cake object, and after touching it, an avatar is animated to eat the cake with props and even after teleporting away, the animation and attachment remains. After changing the llDetectedKey(0) to llGetOwner, the error messages don't appear anymore (yay), but the attachment disappears after teleporting.
  12. I've been modifying the [AV]object script so that a prop can remain attached and keep animating an avatar even after teleporting to another region. I've managed to get the prop to stay attached and keep animating, but once I'm in a different region, I keep getting the error message "Unable to find specified agent to request permissions". I'm pretty noob to both SL and scripting.. is this the right place to ask? /* * [AV]object - Used in props for attaching, derezzing, etc. * * 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 version = "2.020"; integer comm_channel; integer local_attach_channel = -2907539; integer listen_handle; integer prop_type; integer prop_id; integer prop_point; integer experience_denied_reason; key originalowner; key parentkey; key give_prop_warning_request; list A = [parentkey]; //OSS::list A; // Force error in LSO unsit_all() { integer i = llGetNumberOfPrims(); while (llGetAgentSize(llGetLinkKey(i)) != ZERO_VECTOR) { llUnSit(llGetLinkKey(i)); i--; } } integer verbose = 5; Out(integer level, string out) { if (verbose >= level) { llOwnerSay(llGetScriptName() + "[" + version + "] " + out); } } default { on_rez(integer start) { if (start) { state prop; } } } state prop { state_entry() { if (llGetLinkNumber() < 2) { if (llGetStartParameter() <= -10000000) { string start_param = (string)llGetStartParameter(); prop_type = (integer)llGetSubString(start_param, -1, -1); prop_point = (integer)llGetSubString(start_param, -3, -2); prop_id = (integer)llGetSubString(start_param, -5, -4); comm_channel = (integer)llGetSubString(start_param, 0, -6); listen_handle = llListen(comm_channel, "", "", ""); llSay(comm_channel, "REZ|" + (string)prop_id); } else { } } if (prop_type != 2 && prop_type != 1) { if (llGetInventoryType("[AV]sitA") == INVENTORY_NONE) { llSetClickAction(-1); // OSS::llSetClickAction(CLICK_ACTION_NONE); } } else { llSetClickAction(CLICK_ACTION_TOUCH); } //LSL:: parentkey = llList2String(llGetObjectDetails(llGetKey(), [OBJECT_REZZER_KEY]) + A, 0); A = []; if(llGetStartParameter() && !llList2Integer(llGetObjectDetails(parentkey, [OBJECT_ATTACHED_POINT]), 0)) { llSetTimerEvent(10); } else { llSetTimerEvent(0); } //::LSL } attach(key id) { if (comm_channel) { if (llGetAttached()) { llListen(local_attach_channel, "", "", ""); llSay(comm_channel, "ATTACHED|" + (string)prop_id); llSay(local_attach_channel, "LOCAT|" + (string)llGetAttached()); if (experience_denied_reason == 17) { if (llGetOwner() == originalowner) { list details = llGetExperienceDetails(""); // OSS::list details; if (llList2String(details, 3) == "17") { llSay(comm_channel, "NAG|" + llList2String(details, 0)); } } } } else { llSay(comm_channel, "DETACHED|" + (string)prop_id); } } } touch_start(integer touched) { if ((!llGetAttached()) && (prop_type == 2 || prop_type == 1)) { llRequestExperiencePermissions(llDetectedKey(0), ""); // OSS::llRequestPermissions(llDetectedKey(0), PERMISSION_ATTACH); } } run_time_permissions(integer permissions) { if (permissions & PERMISSION_ATTACH) { if (llGetAttached()) { llDetachFromAvatar(); } else { llAttachToAvatarTemp(prop_point); } } else { if (permissions & PERMISSION_ATTACH | PERMISSION_TRIGGER_ANIMATION) { llStartAnimation(llGetInventoryName(INVENTORY_ANIMATION,0)); } } } //LSL:: experience_permissions(key target_id) { if (llGetAttached()) { llDetachFromAvatar(); } else { llAttachToAvatarTemp(prop_point); } } experience_permissions_denied(key agent_id, integer reason) { originalowner = llGetOwner(); experience_denied_reason = reason; llRequestPermissions(agent_id, PERMISSION_ATTACH); } //::LSL on_rez(integer start) { if (!llGetAttached()) { state restart_prop; } } listen(integer channel, string name, key id, string message) { list data = llParseString2List(message, ["|"], []); string command = llList2String(data, 0); if (llList2String(data, 0) == "LOCAT" && llGetOwnerKey(id) == llGetOwner() && llList2String(data, 1) == (string)llGetAttached()) { llRequestPermissions(llDetectedKey(0), PERMISSION_ATTACH); } else if (command == "ATTACHTO" && prop_type == 1 && (key)llList2String(data, 2) == llGetKey()) { if (llGetAgentSize((key)llList2String(data, 1)) == ZERO_VECTOR) { llSay(comm_channel, "DEREZ|" + (string)prop_id); llDie(); } else { llRequestExperiencePermissions(llList2Key(data, 1), ""); // OSS::llRequestPermissions(llList2Key(data, 1), PERMISSION_ATTACH); } } else if (llGetSubString(command, 0, 3) == "REM_") { integer remove; if (command == "REM_ALL") { remove = TRUE; } else if (command == "REM_INDEX" || (command == "REM_WORLD" && !llGetAttached())) { if (~llListFindList(data, [(string)prop_id])) { remove = TRUE; } } else if (llGetAttached() && command == "REM_WORN" && (key)llList2String(data, 1) == llGetOwner()) { remove = TRUE; } if (remove) { if (llGetAttached()) { llRequestPermissions(llDetectedKey(0), PERMISSION_ATTACH); } else { if (llGetAgentSize(llGetLinkKey(llGetNumberOfPrims())) != ZERO_VECTOR) { unsit_all(); llSleep(1); } llSay(comm_channel, "DEREZ|" + (string)prop_id); llDie(); } } } else if (message == "PROPSEARCH" && !llGetAttached()) { llSay(comm_channel, "SAVEPROP|" + (string)prop_id); } } //LSL:: timer() { if(llGetObjectMass(parentkey) == 0) { if(!llGetAttached()) { llDie(); } else { llRequestPermissions(llDetectedKey(0), PERMISSION_ATTACH); } } } //::LSL } state restart_prop { state_entry() { state prop; } }
×
×
  • Create New...