Jump to content

Wulfie Reanimator

Resident
  • Posts

    5,744
  • Joined

Everything posted by Wulfie Reanimator

  1. Why wouldn't they use the most attractive avatar in product pictures? That's good marketing. You shouldn't ever use an ugly avatar to showcase a product. The focus in that first link is the eye, everything else is just "window dressing." I understand that it might seem frustrating to you, but the base head seems to be this one with these parts added for the hair (from the same store as the first link), besides the custom textures. Obviously, the "out of the box" avatar isn't as attractive as the custom-made one, but that's why you might want to talk to the creator and commission them or learn how to customize things on your own. Creativity is how you make a unique avatar that is eye-catching.
  2. Neither of those links are heads... The first link is an eye set, the second link is a lingerie set. Since you liked the head shown in the first link, you should try reading the description again. It has a list of heads, one of which must be the one in the picture.
  3. changed(integer change) { if (CHANGED_LINK) { key agent = llAvatarOnSitTarget(); if(agent == NULL_KEY) { llUnSit(agent); } } } @Pussycat Catnap
  4. @animats & @Nova Convair "Let's pass a string instead" is kind of out of the scope for this topic/update, though. Besides, it's an impossible request in its current form because changing or adding a string to on_rez would (almost, if adding) definitely be a breaking change.
  5. It's fine to recommend specific products as long as it's relevant (ie. someone specifically asks for recommendations) and not just advertising/spamming. You can find the rules here.
  6. Ah, sorry, I missed the bit about male bodies. Though, depending on your preference (and especially mine), I would still use the Normie as it's ambiguous enough to work for a younger, effeminate guy.
  7. The Normie head by Utilizator is bento-rigged, great quality, omega-ready, modifiable, and only 500 L$.
  8. Can you go into any specific details about those changes? (Talk techy to me, LL.) Or at least, what can we as scripters expect that is different from before, or is this just a performance increase? Why did content break, or was it only because of those already existing race-conditions?
  9. They've been gone for 3 years, you can move on. If they come back, you can talk to them about it. If you're being harassed by them or things got too awkward, block them as well.
  10. What you're asking -- a timed sequence -- is fairly simple. If there is only one dancer, it's very simple. If there are multiple dancers, it's still pretty simple but there needs to be some kind of cross-communication between the HUDs or whatever you'd want to use to keep everybody in sync with the lead dancer. If you're not comfortable with LSL, you should find a scripter to do it for you. You can post in the Wanted or Inworld Employment sections of the forum, for example.
  11. So where's Guido gonna go? (Dexter isn't real life either.)
  12. There's a special thing about what you're seeing and what there actually is. When you see text like this: That line of text is actually this: That long bunch of stuff is called a URI (not URL), which is a special pattern that your viewer can convert on-the-fly to a usable link that does something. (Opens a profile, in this case.) The exact name shown in chat depends on your viewer settings. For some people, it would only show a display name. To be more clear, these are the first 10 characters of that string that displays my name: string message = "secondlife:///app/agent/779e1d56-5500-4e22-940a-cd7b5adddbe0/about says hello!"; llOwnerSay(message); // "Wulfie Reanimator says hello!" string first10 = llGetSubString(message, 0, 9); llOwnerSay(first10); // "secondlife" If you know that the message always begins with a URI, you can easily get the key with llGetSubString, convert that to a username with llKey2Name (for example), and then replace the whole URI with the plain-text username. You can also do a pattern-search for "secondlife:///app/agent/" with llSubStringIndex if you don't know where exactly the URI will be.
  13. How to identify an alt? Social engineering. (Get them to reveal themselves as having multiple accounts.) How many alts are too many? There isn't a limit, it depends entirely on what's being done with them. This is a rabbit hole you probably don't wanna go down, though. It's against the community standards.
  14. And I hope you grow out of your childish nonsense behavior one day.
  15. I agree that it makes no sense to look at someone's payment info for legitimacy. But your example isn't a very good one because other people don't know that the two accounts belong to the same person, let alone what that person is like.
  16. The beta version of the body is going to be really old, you can't get it unless you bought the Lara while it was still in early (beta) development.
  17. I still have the script, the specifics were: Putting it in a freebie is fine, but if you got a full-perm item for free and put his script in it and sold that, you'd be on his bad side. No worries though, I wrote my own just now:
  18. This was inspired by a similar script written by Franklyn Constantine, but uses none of his code. Main differences between his version and mine: Mine uses only one state. (His uses four) Mine uses only one extra function. (His uses two) Mine uses 12 global variables. (His uses 24) My code has 93 lines, excluding comments, curly brackets, and blank lines. (His has 201) Mine doesn't have an "options menu." (His could change access level and the channel) Mine does have a group-only toggle, must be changed in-script. Mine uses a channel based on the object's own key. Mine uses llTextBox for user-input. (His uses local chat) Mine tries to gracefully validate and fix user-input. (His just tells the user to try again.) A valid URL must have at least one period in it, eg: "mystream.cool" If this condition isn't met, an error is shown to the user. The user doesn't have to include "http://" or "https://", the script will add it. Mine has no license, do whatever you want with it. Basically: This is a notecard and menu-based system that allows the current parcel's music URL to be changed. You must make a notecard with button name and URL pairs (separated by semicolon), per line, so that the script can create a menu for you. Here's an example: button 1;http://listen.radionomy.com/DRIVE cool button;http://listen.radionomy.com/DRIVE # Lines like this will be ignored! # Empty lines will be ignored too. D R I V E;http://listen.radionomy.com/DRIVE button 4;http://listen.radionomy.com/DRIVE His code can be found here: https://pastebin.com/2fKkrche My version: integer group_only = TRUE; string note_name = "stations"; integer note_line; string station_name = "none"; list station_names; list station_urls; integer page_num; integer page_count; integer ready; integer menu_channel; integer input_handle; key waiting_from; show(key avatar, integer page) { integer start = (9 * page) - !!page; list menu = ["<<", "URL", ">>"] + llList2List(station_names, start, start + 8); llDialog(avatar, "Current station: " + station_name, menu, menu_channel); } default { touch_start(integer n) { if (!ready) return; key avatar = llDetectedKey(0); if (avatar == llGetOwner() || // owner !group_only || // anybody (group_only && llSameGroup(avatar))) // any group member { show(avatar, page_num = 0); } else llInstantMessage(avatar, "You're not allowed to use this."); } listen(integer chat, string _, key avatar, string input) { // Next page with roll-over if (input == ">>") { if (++page_num >= page_count) page_num = 0; show(avatar, page_num); } // Last page with roll-over else if (input == "<<") { if (--page_num < 0) page_num = page_count - 1; show(avatar, page_num); } // Initiate user-input else if (input == "URL") { waiting_from = avatar; llListenRemove(input_handle); // Remove previous, if any input_handle = llListen(menu_channel + 1, "", avatar, ""); llTextBox(avatar, "Enter a stream URL", menu_channel + 1); llSetTimerEvent(30); } // Parse user-input else if (chat == menu_channel + 1) { if (llSubStringIndex(input, ".") == -1) { llInstantMessage(avatar, "I don't think that's a real URL."); return; } if (llSubStringIndex(input, "://") == -1) input = "http://" + input; station_name = "custom choice"; llSetParcelMusicURL(input); llInstantMessage(avatar, "Now listening to \"" + station_name + "\""); llListenRemove(input_handle); waiting_from = NULL_KEY; llSetTimerEvent(0); } else { integer index = llListFindList(station_names, (list)input); if (index == -1) { llInstantMessage(avatar, "That's not on the menu."); return; } station_name = llList2String(station_names, index); llSetParcelMusicURL(llList2String(station_urls, index)); llInstantMessage(avatar, "Now listening to \"" + station_name + "\""); llSetTimerEvent(0); } } timer() { llInstantMessage(waiting_from, "You didn't give a stream URL fast enough."); llListenRemove(input_handle); waiting_from = NULL_KEY; llSetTimerEvent(0); } // Changed/state_entry/dataserver are only used to initialize the script. // The main functionality is in touch_start/listen/timer. changed(integer change) { if (change & CHANGED_OWNER || change & CHANGED_INVENTORY) llResetScript(); } state_entry() { if (llGetInventoryType(note_name) == INVENTORY_NOTECARD) { llOwnerSay("Loading stations..."); llGetNotecardLine(note_name, note_line); } else llOwnerSay("No \"" + note_name + "\" notecard found."); } // Parse a notecard in this format: // Menu button name;Station stream url dataserver(key id, string data) { if (data == EOF) { page_count = 1 + llGetListLength(station_urls) / 9; menu_channel = (integer)("0x" + llGetSubString(llGetKey(), 0, 7)); llListen(menu_channel, "", "", ""); ready = TRUE; llOwnerSay((string)llGetListLength(station_urls) + " stations added."); } else { string first = llGetSubString(data, 0, 0); if (first != "#" && first != "") { integer separator = llSubStringIndex(data, ";"); if (separator == -1) { llOwnerSay("Missing \";\" on line " + (string)(note_line + 1)); llGetNotecardLine(note_name, ++note_line); return; } string button = llGetSubString(data, 0, separator - 1); button = llGetSubString(button, 0, 11); string url = llGetSubString(data, separator + 1, -1); if (llSubStringIndex(url, "://") == -1) url = "http://" + url; station_names += button; station_urls += url; } llGetNotecardLine(note_name, ++note_line); } } } Unfortunately I don't have land or a group to deed this with, so I can't fully test for all possible issues, but I've done my best in making sure this works and by all reason should work as-is without deeding to a group.
  19. Problem is that you never specified what the permissions actually were, so it wasn't clear. "I've used it before so I can't make mistakes" is not how it works and being vague is less helpful than anybody else in this thread. The core of the script you originally posted is this function, which has these requirements: "The object owner must also be the land owner. If the land is deeded to a group the object will need to be deeded to the same group for this function to work." So the questions still are: Do you own the land and the object? If not, is the land deeded to a group and is the object deeded to the same group as the land? (You didn't specify any of these things either.) Beyond that, there's nothing wrong with the script itself so the problem is somewhere else.
  20. Please describe the steps you are taking in detail, including object permissions. Also, please edit your main post so that the script is inside of a code-block, you can add one from the little <> icon in the post editor. You've posted around 500+ lines of code, it should at least be as readable as possible.
  21. Those "certain old appliers" were either pre-mesh (used system layers) or had their own proprietary applier system. In either case, Belleza can't just "make them work" because: System layers aren't accessible to scripts. The creator of that skirt has to make the textures available somehow. If the skirt's creator already has a proprietary applier system, the skirt's creator must document how the applier communicates. Otherwise Belleza wouldn't be able to write a script that can understand what that applier is saying. The problem with this is that Belleza can't write code to handle everybody's arbitrary appliers, there must be some some kind of standard to make things practical, like Omega... Oh wait. So really, the problem isn't Belleza like you're implying. It's the skirt's creator's fault that it can't be used with mesh bodies. (Well, at least until BOM comes around, but then you have to hope that there won't be seams in the texture because of small UV differences.)
  22. You can hold Alt to select a loop in Blender. Doing the reduction by hand gives you the most control and the highest quality end result. While you might think that going from 65k+ to something reasonable might be a lot, it really won't take that much time if you focus on flat and flat-ish areas. Read the first post of this thread: I'm re-linking the images from the first post here because some of them have expired. (And these will expire too, in time.) Model comparison, wireframe, example workflow What does your model (the edges) look like? And if you want help, I could do examples.
  23. Preferences > Privacy > General Automatically show newly accepted items in inventory Automatically view notecards, textures, landmarks after accepting Automatically show snapshots in inventory after upload
×
×
  • Create New...