Jump to content

Wulfie Reanimator

Resident
  • Posts

    5,752
  • Joined

Everything posted by Wulfie Reanimator

  1. As far as I know, you can't give a refund to a customer directly through Marketplace. But if someone is asking for a refund, I think it would be reasonable that you only refund them the money you received after fees. (Though I'd imagine the few lindens you save are not worth the potential ire from the customer for "stealing" or just "not giving a full refund.")
  2. Look into the Scripting Library here on the forum. I recently posted my open-source music player there. It uses notecards with UUIDs and has lots of chat commands. It also includes auto-playing the next notecard when a song ends.
  3. I can keep going. This one line has two problems, one of them I already covered, but I'll clarify. Most importantly, nothing is added to primData unless this check passes. The issue is that primData starts empty. This if-check will always be false. And again, it is more memory efficient to use typecast than constructing a new list. What I mean:
  4. @steph Arnott Your function doesn't work. I'm posting from my phone so I can't format properly, but here goes: Your function overwrites the input parameter, and doesn't use the input parameter in the way you intended it to be used. If you try to find a link named "one" but there is another link with a different name, you will change "one" to another name. Even if you fixed that, the if-check becomes 'if( "one" == "two")' which obviously still doesn't pass. I also really enjoy the irony of someone who has sn unhealthy obsession with efficient memory usage to be adding things to a list like this: While this is a completely valid way to preprend things to a list, you later sort this list after the function has finished. You are objectively spending memory with no purpose or benefit.
  5. So you never actually read the question or code? Do you not understand what "context" is? Edit: Okay, so no.
  6. What "data," our dearest Steph? Where would the potential list you are talking about be? In the code snippet given by OP, the only list (objectlist) is being added to, not checked from. It is very obvious from her code and explanation that she wants to not add a string to a list if it contains a set phrase.
  7. Nobody's gonna be a martyr for you and possibly get banned by giving you a list of people who have been banned and what for.
  8. Kind of a contradictory statement, isn't it? "You can't interrupt an event, unless you do." "return" is a keyword that will exit the current function or event, so you can have a conditional within the loop and "interrupt" everything. Though, depending what else comes after the loop in the same function/event, you might not want to use return. This is a design decision the scripter has to make. A more "safe" option would be a conditional check at the beginning of the loop (like "while(continue && ++i)") and changing that condition within the loop (like "continue = FALSE").
  9. What does your include file look like, exactly? Do you have semicolons in it? (Personally I don't even use brackets in mine.) As for file paths: https://wiki.phoenixviewer.com/fs_preprocessor#include
  10. I'm having a little trouble visualizing the construct you've described (and its behavior), but on a very abstract level, you can always ask the other object where it is (like Rolig said) and depending on how things are being moved, you can predict where the other pad be by the time the teleport happens. (For example, if the pad is moving in a circle at X degrees per second, you can use the center of the circle and its radius, combined with the rotation speed to calculate where the avatar should be teleported instead of the pad's immediate location. But as this is a fairly abstract explanation and I'm assuming the arena doesn't exist either, I'm not going to try to write an example.
  11. Most importantly, you need animations that animate your tail. (Sounds kinda dumb to say, but hey.) If you can find walking/running animations that also moved your tail, you could use that in your regular AO just like any other animation. That said, the SL animation system plays animations "on top of each other," meaning if you have an animation for running (but doesn't affect tail) and one for your tail, you can play both at the same time without any issues. In this case you would most likely have two separate AOs at the same time; one for you and one specifically for your tail. You could of course try to find (or make) an AO that played two separate animations at the same time.
  12. "RLV scripts" are written exactly like normal scripts. The main difference is that RLV-specific commands are given by the script through llOwnerSay exclusively. For example: http://wiki.secondlife.com/wiki/User:Toy_Wylie/RLV_Documentation/detach llOwnerSay("@detach:OutfitNameHere=force"); llOwnerSay("@detach:Folder/Subfolder/OutfitNameHere=force"); When detaching entire folders, the folder name ("OutfitNameHere" in this case) must be inside the #RLV system folder. RLV will not touch folders outside of the #RLV system folder. This is a problem because the outfits (shown in Appearance) cannot be linked, so you (and any other user) would have to maintain separate copies of their outfits by hand, which might not be very fun if you make lots of changes to your existing outfits.
  13. I have never been in this much pain from just reading.
  14. Why not just explain in plain English what you want people to (not) do with it? Copypasting paragraphs of legal text in the product description looks very unappealing and unprofessional. If you wanted it to look more formal, you could go look up different kinds of licenses and put something like "Shared under Creative Commons" at the bottom. Short and sweet.
  15. You can't reliably detect which face of an object something has collided with, or where on that face. At best, as approximations, you can use llDetectedPos in collision_start and move that closer to your target on one axis (because llDetectedPos gives you the center of the projectile, which may be some distance away from your target when the collision happens). This works best if your target is a simple shape, preferably flat. Alternatively, you can use llCastRay from llDetectedPos towards the target itself. This is "more accurate" and works with more complex shapes, but has other quirks and drawbacks (listed on the llCastRay wiki page).
  16. Personally (and with first/second-hand experience), I would strongly suggest that you find a scripter interested in doing a large project liie this for you, or tutoring you throughout the process. The individual parts may be simple, but this sounds like it's going to require a lot of interconnected scripts. You should definitely write out your story first and foremost. If nothing else, it gives context to what exactly you want to make. Once you have the story, you can start brainstorming what kinds of game mechanics would fit into your story, and write those down too. This, again, helps you break down the large project into smaller projects so you have more structured direction and can see visible progress as things get completed. At this point, you are well prepared to start working on making everything functional with scripts. If you happen to (and probably will) struggle, asking for help is a lot easier because you'll have specific topics to ask about. Even better, If you find someone who wants to join your project, you have everything laid out for them. I can tell you that trying to join someone's big project without any documentation for what they want to do is extremely frustrating and the likelihood of your help leaving is high.
  17. Hopefully you have no data caps and a stable high-speed connection on whatever device you'd be using Stadia on.
  18. I don't quite understand, and maybe you don't either. (no offense!) When you pay for Premium, you get a 512sqm. home and "free tier" (allotment of land) of 512sqm. You can abandon your 512sqm Linden Home so you can buy a total of 1024sqm of land that you won't need to pay extra for. Or you could just own two (or fewer) separate parcels of land up to 1024sqm total. If you buy a 2048sqm parcel, you get half of your rent for free, basically. If you want more land, you could try to just buy a connecting parcel to extend your existing one. Otherwise, you would have to find a bigger parcel and abandon your old one, but the "next size" is never set. You don't have to double your size or increase by 512sqm.
  19. You're welcome. It's not particularly difficult to have the script just rotate the door around an arbitrary point without an explicit hinge prim. I just followed Rolig's concept for simplicity's sake.
  20. This may be helpful: You will have to adapt the script I have posted there, but it detects which side of a door the touching avatar is on. You'll just have to ignore the specific side you want.
  21. Here's one simplistic solution, it was only the first thing that came to mind (and one that doesn't take long to type out), so there are definitely more elegant ways. (Note: This is not a complete script, I'm only demonstrating the concept of "how to hide/unhide a set of links.") // This needs to be changed whenever appropriate, not shown here. integer visible; // 0 = soft, 5 = hard integer current_state; // list of link numbers for a specific state list soft = [1, 2, 3]; list hard = [1, 12, 13]; default { touch_start(integer n) { if(current_state == 0) { integer i = llGetListLength(soft); while(--i >= 0) { llSetLinkAlpha(llList2Integer(soft, i), visible, ALL_SIDES); } } else if(current_state == 5) { integer i = llGetListLength(hard); while(--i >= 0) { llSetLinkAlpha(llList2Integer(hard, i), visible, ALL_SIDES); } } } }
  22. An important thing to remember about Script Info, is that the CPU time shown is an average over the past (up to) 30 minutes, or less if the script has been rezzed/restarted. This has two side-effects. The CPU time will not reflect the script's current usage. If the CPU time spikes after 30 minutes of idle time, you won't see a great increase especially if it isn't sustained. Likewise, if the object is recently rezzed/restarted, the CPU time shown will be quite high (it can even be as high as 1-5 ms right after a reset) before it "calms down" and averages out. (#2 is hilarious and terrifying in cases where a script works by resetting itself. For example, I've seen full-auto guns that have 3-4 scripts with infinite rez loops in them, which are turned on/off by a central script. The script time while the gun is firing is ridiculous and anybody doing that should stop.)
  23. Both of the last two scripts in your first post have a syntax error on lines 120 and 95, where you're trying to add "(tempo - count)" to a string, which would require a typecast. Minor issue, but still an issue for anybody who would want to test your scripts. As for the first snippet of code, you don't need to re-set llSetTimerEvent within the timer event. A timer will always repeat forever until you set the timer to 0, which stops it. (But this doesn't break anything.) For this, you can implement a simple "toggle" on touch. But since you use separate states in your script and didn't include the code where you change to a new state, I can't offer any specific advice for your script. But a toggle (basically a switch between 0 and 1) could be implemented like this: // FALSE or 0 = down, TRUE or 1 = up integer up = FALSE; default { touch_start(integer n) { up = !up; // This changes 0 to 1 (or 1 to 0), and replaces the old value. if(up == TRUE) { llOwnerSay("KFM move up"); } else { llOwnerSay("KFM move down"); } } }
  24. Maybe one day I should request wiki editing privileges, these little details come up every now and then without a clear indicator. (I don't remember where I learned this from, probably directly from somebody else or by noticing it never stops.)
×
×
  • Create New...