Jump to content

Wulfie Reanimator

Resident
  • Posts

    3,950
  • Joined

  • Last visited

Everything posted by Wulfie Reanimator

  1. That is what I meant by "same section of the same parcel."
  2. Parcel Privacy only prevents people from seeing you if they are either not on your parcel, or on the other side of the banlines within your parcel. If they're in the same section of the same parcel, they can see your avatar despite that setting.
  3. FYI, an avatar that is sitting on an object can be moved up to 2000 meters away from the root using functions like llSetLinkPrimitiveParamsFast and PRIM_POS_LOCAL. llUnsit doesn't require any permissions either. All it requires is: The agent is sitting on the scripted object, or The agent is over land owned by the scripted object's owner and/or a group the owner has land rights for.
  4. There is no ternary operator in LSL, but if you want to avoid repetition, you could do some dumb list trickery. string sta_str = "Status: " + llList2String(["Off", "On"], status);
  5. Nope. Attachments don't need to load for an avatar to exist in a region, and while you can request a list of attachments on an avatar, there's no guarantee it's a complete list (and it doesn't include any HUDs anyway).
  6. One way is to check for some kind of external factor in the loop-condition, such as the name/color of an object, which would be changed by a separate script that isn't stuck in a loop.
  7. I hate to be that guy, but... could you also make this work for the Unread Content page? My Javascript is terrible.
  8. Mouse Pointer settings in Windows, pick the third option for inverse-colors.
  9. Assuming some things about the build itself, things can be pretty simple. As long as your buttons are "together" in the linkset, as in linked sequentially, you can have all the button-states in a list and use very simple math (like.. subtraction) to figure out which button is being pressed. list buttons = [1, 1, 1, 1, 1]; integer button_count = 5; integer first_button = 2; default { touch_start(integer n) { integer link = llDetectedLinkNumber(0); integer active = link - first_button; // If the touched button isn't actually a button, ignore this event. if (active < 0 || button_count <= active) return; // If this button is available... if (llList2Integer(buttons, active)) { // Turn it off. buttons = llListReplaceList(buttons, [0], active, active); } } } And from there you can figure out how you want to re-enable the buttons. The simplest thing would be to use a timer to enable all of the buttons at once, but that's not very convenient. What I would do is have a similar list for timestamps, so that each button would have its own delay. Below is full example with color-changing buttons to indicate which one is available (white) or disabled (yellow). list timers = [0, 0, 0, 0, 0]; float delay = 10; list buttons = [1, 1, 1, 1, 1]; integer button_count = 5; integer first_button = 2; default { state_entry() { llSetTimerEvent(5); llSetLinkPrimitiveParamsFast(LINK_SET, [ PRIM_COLOR, ALL_SIDES, <1,1,1>, 1, PRIM_LINK_TARGET, LINK_ROOT, PRIM_COLOR, ALL_SIDES, <0.1, 0.1, 0.1>, 1 ]); } touch_start(integer n) { integer link = llDetectedLinkNumber(0); integer active = link - first_button; // If the touched button isn't actually a button, ignore this event. if (active < 0 || button_count <= active) return; // If this button is available... if (llList2Integer(buttons, active)) { // Turn it off and record time. buttons = llListReplaceList(buttons, [0], active, active); timers = llListReplaceList(timers, [llGetTime()], active, active); llSetLinkColor(link, <1,1,0>, ALL_SIDES); } } timer() { float time_now = llGetTime(); integer i; while (i < button_count) { float last_active = llList2Float(timers, i); // Non-zero value is assumed to be a timestamp. if (last_active > 0 && time_now > last_active + delay) { buttons = llListReplaceList(buttons, [1], i, i); timers = llListReplaceList(timers, [0], i, i); llSetLinkColor(first_button + i, <1,1,1>, ALL_SIDES); } ++i; } } } Looks something like this.
  10. http://wiki.secondlife.com/wiki/Category:LSL_User-Defined_Functions (And from that page) http://wiki.secondlife.com/wiki/Combined_Library It could also be that @John445 Bachman is simply asking for a list of all the built-in commands with a short plain-English description of what it does.
  11. A handful of times this month I've gotten the "Received purchase..." Marketplace notification in my viewer, but it's not in my inventory. The inventory has barely 10K items. But all I've needed to do is relog. I've never (ever) had to clear my cache to solve inventory issues, other solutions have been enough.
  12. There is a distinct difference in the way LSO and Mono scripts are handled. LSO scripts will always take up 16KB memory.. even if there are no variables or events. They are always allocated the full 16KB of memory. Mono scripts have dynamic memory. While the maximum memory capacity is 64KB, the script will only take up a fraction of that in most cases. This is significant when a script needs to be transferred from one sim to the next. To do that, the current sim needs to figure out the current size of a script so that it can be stored for transfer (don't forget bytecode sharing, heap/stack memory). For LSO scripts, it's very easy since they're always guaranteed to be exactly 16KB. The destination sim suffers even more since they have to receive that information, allocate the space, and then initialize those scripts. Mono scripts are very slow to initialize and start up compared to LSO and it can be easily observed in your day-to-day interaction with scripts. No, there are quite a few things that are memory intensive without doing any long-term storage. HTTP requests, large llSetLinkPrimitiveParamsFast calls, multiple raycasts (I'm sure @animats's NPCs would benefit from more memory), general data processing, etc.
  13. Almost certainly, due to the process of how scripts are transferred between sims (and why LSO scripts are much faster than Mono scripts for that).
  14. Possible solution: Current and future scripts stay 64KB by default, but llSetMemoryLimit can be used to increase the size up to some new maximum, such as 128KB. (Seems like a safe increase as a first experiment, and we'll be able to know when scripts might be using more memory than normal.) This way, most scripters won't be using any more memory than usual. I'm all for increasing memory capacity somehow (I wish KVP wasn't Premium), but what I'd be concerned about is "what if something does go wrong?" And I don't mean things like bugs, I mean long-term real use-cases. If it does start causing significant degradation of sim performance across the grid and LL is unwilling or unable to improve their hardware with Amazon, going back to 64KB is equivalent to pulling out a barbed arrow. It's gonna hurt more coming out than going in.
  15. As someone who does not currently host a web server, I'm gonna go out on a limb and say any LSL script connecting to your server will look like that. All regions are hosted on Amazon now.
  16. A simple way to implement arbitrarily large integers (google that) is to store them in a list, then calculate/display them as strings. For example, the largest number you will deal with is 1 billion. If you need to display a number like 4.2 billion, you have a list of [200'000'000, 4] and you build a string such that it reads "4'200'000'000" or "4.2 B" or whatever format you wish (I recommend separators for all our sanity). And if you get into even bigger numbers, your list could simply grow like [200'000'000, 999'999'999, 6] to create "6'999'999'999'200'000'000" or "6.9 Quint" or whatever. If you're fluent in Java, here's an example implementation: https://gist.github.com/rgb-24bit/931e45660d8826fce2053c943d0b2c99 If you're not fluent in Java but have general programming knowledge, that's still a workable example of how to implement the basic stuff like add/dec/mul and building a string. Edit: I gave the reverse-order example because of the example code, but if you can store the numbers in the correct order instead, you can simply typecast the list to string to get the full number readout.
  17. First things first: The "size" of a script is just the maximum capacity that script could take. It doesn't mean the script is actively using that much. There's no way to measure the actual usage as an outside observer. By default, a script's maximum capacity is 64 KB. This can be lowered (but not increased), though people don't bother doing that 99% of the time. The total size of 848 KB suggests that there are more than 5 scripts on you, too. And yes, all scripts in all of your attachments will "activate" as soon as you log in, and stay active until you log out, detach them, or disable them (which generally isn't possible if they're no-modify). That said, here's a good way to think about it: "Does this script do something useful for me? Am I going to be resizing this object regularly?" If the answer is no, you should remove it (after making a copy). All scripts -- even those that are doing literally nothing -- take up resources on the sim you're in. It's not catastrophic, especially in your situation, but having 100+ scripts is quite awful. The worst part about scripts happens when you move from one sim to the next, whether that's teleporting or by crossing a sim border. When that happens, both sims need to do a lot of work to transfer your scripts from one to the other, which causes the sim you're arriving at to lag (in every aspect) very noticeably to everyone. The more scripts you have, the worse it gets, so having few scripts on your avatar makes your teleports faster! Personally I aim to stick below 30-40 scripts, but that can be challenging depending on what you're wearing, like most mesh bodies/heads and their clothing alphas. That's why I make an effort to only buy anything from creators who still let you have modify permissions, rather than wearing an ankle bracelet with four HUD scripts in it.
  18. A mono script can use 64k and a LSL script can use 16k - the 2 statements are not possible. The correct terms are Mono and LSO. They are both LSL, which stands for "Linden Scripting Language." Also, while Mono scripts have four times the memory capacity, things also take up about four times as much memory. You can assign an empty list (stats = [];) to your list of stats to remove them from memory. There are also functions like llDeleteSubList to remove parts of a list.
  19. It won't really work the way you'd generally want, because of how alpha-masking is rendered compared to alpha-blending. This is very apparent if you've ever seen a texture with lots of transparent holes in it, such as lace/fishnet clothing. The further you zoom out, the smaller those holes get, and eventually the texture appears completely solid. I can't put it into simple terms, but I believe it's just a byproduct of how the texture is sampled for rendering. Smaller area on screen means less precise alpha checking. For example, alpha masking: Compared with alpha blending: But I digress. One major difference between transparent texture vs 100% transparency is that transparent textures can still display materials. Here's a fully transparent texture with a blank (80 gloss, 255 environment) specular/shiny map on it: I think this is very relevant when we're talking about glass.
  20. They have two bodies. One body with a head already attached to it, and then a second "normal" (headless) body. They've hidden all but the head of the first body, so that they can use the second one with the head from the first one. The problem is that the first body changes the bones of the avatar's skeleton. The solution is to use an (un)deformer after wearing the first body. It can be difficult to find/create one, depending on how crazy the body is. You'll probably want to ask the creator for one.
  21. Can you show what this "cracking" looks like? It might be because you're resizing the object with the "edit linked" option enabled, possibly with Ctrl + Shift held while resizing. This would resize the individual parts of the linkset, rather than the whole linkset.
  22. I'm not a huge camera person, but probably the most important aspect of composing two different shots together is focal length, or the field of view. The RL camera you're using indoors will most likely not match the focal length of the default SL camera. You should be able to press Alt P to bring up Phototools in your viewer to tweak the relevant settings, or adjust your RL camera. There's a bunch of things beyond that (like lighting, depth of field, the tracking, etc.), but I don't want to get into those right now. Hopefully someone else can.
  23. That style of head is more unique than any of the furry heads currently on market. Since the head is closer to man than animal, your best bet (for accuracy) would be to just find a masculine human male head, hope you can squish (or replace) the nose, add some whiskers, and get some custom textures done for it.
  24. As long as your mesh body is using the Left Arm/Leg BOM channel, you can do asymmetric tattoos no problem. That was one of the biggest features of the Universal Layer / avatar bakes update.
×
×
  • Create New...