Jump to content

Profaitchikenz Haiku

Resident
  • Posts

    2,846
  • Joined

  • Last visited

Everything posted by Profaitchikenz Haiku

  1. Lists within lists is just about possible in LSL to one extra level, although horrible inefficient. Consider a list of items describing the size, local position and local rotation of a child prim in a linkset list details = [<size>,<lPos>,<lrot>]; dump that list to a string using the pipe character as the separator string details_str = ["<size>|<lPos>|<lRot>"]; Now make up a list of such strings for every child in the linkset. List linksetDetails = [str1, str2,...]; To access the contents, read a particular string from the list, then either parse back to a list or simply slice substrings using the separator character With numerical details it's straightforward, but if you start including strings you have to be sure that the actual strings will never contain your separator, or indeed a comma. It's grossly inefficient because each character in the list is going to require 2 bytes .
  2. This might need further work as I tried the url Molly typed above into the Pi400 Chromium web browser out of curiosity, and it played at once, but when I had earlier tried it in the Firefox browser on the Windows machine it came up with "content not available in the EU" report. Qie was able to play it, I wasn't able to play it all all in the first few regions, it was only in the last sandbox that it actually opened up and gave me the error popups. It's looking like it's not just the url but the region in which the request is being made, as well as the type of browser/requesting app. ETA Tested, ( the URL now plays in the Firefox browser without the location error I got earlier.) The following viewers played the url with no issues Catznip R12.3 Firestorm 64531 Singlarity Beta 8419 SecondLife Performance viewer 564530 But... The latest Linden viewer 564172 gave the crash. The details of the error box that I forgot to expand earlier are Problem signature: Problem Event Name: APPCRASH Application Name: SLPlugin.exe Application Version: 0.0.0.0 Application Timestamp: 614c5aeb Fault Module Name: libvlc.dll Fault Module Version: 3.0.9.2 Fault Module Timestamp: 002000a9 Exception Code: 40000015 Exception Offset: 000000000000b918 OS Version: 6.1.7601.2.1.0.256.48 Locale ID: 2057 Additional Information 1: 91eb Additional Information 2: 91eb63789ceb1b042f28b3e946a956ff Additional Information 3: ad97 Additional Information 4: ad975bb7a47d10ab9caac2b5eba6e3c1 This does rather point the finger at something in the Linden code. https://jira.secondlife.com/browse/BUG-231356
  3. Yes, but from my Fortran days I would immediately look at sparse arrays as the best solution to this. In effect they were lists of lists.
  4. ^^^ This. It's a nice little compact language suitable for newcomers to learn by reading examples and doing. Adding to it would just increase the swirl of names before a beginners' eyes. Regarding structs, list come close but obviously fail on both the ability to include list within lists, and the ability to either have pointers to other lists or pointers to function addresses. But in all of my time here, I've never yet threw up my hands and said "this language is impossible to work with". But then, I grew up programming on machines where 16K of working set memory was generous, and most variable or procedure names were limited to 6 characters. Looking through some C# code I got the impression that the names of many of the functions had more characters in them then there were characters in the actual body of the code.
  5. So we finally managed to reproduce the error on LL 564172, and it seems it is because the media requested to be streamed was not allowed in my geograaphical area. Anybody suggest which Linden we refer this to?
  6. I just IMed you inworld to come and try for myself, but you were offline, and then I noticed my official update was to a lower number than yours
  7. I've been running the perrformance improvement viewer, I turned on media and gallivanted around but saw no errors. I switched back to the officious official vewer which upgraded to 564172, and went round, again seeing no errors. I'm seeing what Qie's seeing, apparently Ok. Is this possibly something parcel/url specific?
  8. Curious to know if it's just the LL viewer doing this or if any TPVs also do it? I can't test it because I have parcel media disabled.
  9. Hmm, every time I visit your cafe, the NPCs come running out to greet me but when they see who it is, they turn and run away as fast as possible. They seem to know exactly how to do it @)
  10. If the viewer is rlv-enabled, you can also work out the angle through which the avatar is to turn and then get them to face the direction they are moving using llOwnerSay("@setrot')
  11. I think something could be done using llGtListEntryType if the return value was then used to actually produce the cast ? ie, for a lst of varying types, you could produce a parallel list of the types of the contents of the first list. It would be all integers, obviously The resulting preprocessor code would appear to just do integer myVal = listOfValues[4]; but the preprocessor would generate statements to determine the type of entry[4] and extract it by either inlining the statements or calling a function. Being honest though, I can't see any performance advantage, and the coding advantage also seems trivial, it's cosmetic more then useful.
  12. You might consider having several broadcast objects scattered around such that all the listening objects are with 20 metres of a broadcast object, then transmit the messages to those broadcasters by llRegionSay, and let them transmit it to the listeners using llSay in the manner they currently do. When you set out the broadcasters, have a 10-metre radius cylinder linked to them at the centre so you can adjust their positions to encompass the required number of listeners.
  13. The lessons I am learning from Microsoft, Google, etc, is that we are not customers but service-targets, and we don't know what we want until the service providers give it to us.
  14. This begs the question, how man people can one attempt to be at the same time before one goes doolally?
  15. Posts seem to have vanished, a least one of mine, since although it's quoted it's not actually there. If I've been considered out of order I don't mind but it would have been courteous to have told me where I'd overstepped a line?
  16. OK, I'd suggest in that case you get a friend who uses the same viewer to go around those regions, if they see the same errors then they can raise the Jira?
  17. Yes, I have played with it. To be honest I don't favour pre-processors myself, I feel more comfortable seeing the real code that gets given to the next stage. My suggestion to the OP was of implementing a standalone one as an exercise. And yes, jumps/gotos have had far too bad a reputation in the past, of you've ever programmed in assembler you'll know hat jump are as common if not more so than calls and returns.
  18. That's an internal coding error and doesn't look like it' a driver issue, there is an unresolved call in the code to something the coder expected to be linked, I suggest you raise a Jira, because even if a setting on one or other or your regions is causing this, the program shouldn't be splashing popups like this, it should be handling the error properly. Alternatively use @ with one of the Lindens to bring this to their attention. Mazidox might be a good starter as they are well-known for catching bugs.
  19. I think the only real benefit you could gain from this approach would be to have libraries of snippets that could either be inline-ed into the output LSL for speedier execution, or else grouped int functions for compactness. As others have said, the issue with LSL isn't so much the language as the underlying word it has to interface with. What think you could consider implementing is something like a preprocessor to take a switch-case construct and produce a set of if-else statements.
  20. In a similar vein I remember seeing a fast method of searching strings for sub-strings. Instead of taking the first letter of the string to be found and starting at the first character position of the string to be searched, you took the last letter of the string to be found, and began at that number of letters into the search string, moving on until you got a match, at which point you began comparing the rest of the string to be found going back a character as a time. It's not really obvious why it's faster, I tend to lump this in with the three-door-goat problem, it can be demonstrated to work, but it still doesn't really make sense.
  21. Yep, and HPux. I loathed CDE, though. I did actually use Unix on some PD11s but as there's no GUI it probably doesn't count). I didn't put windows 10 on the machine because I want to actually use the machine as soon as it's woken up, not wait for up to 60 minutes whilst it churns away with the telemetry, updates, installs features I don't want to use but can't opt-out of, and then smugly restarts and says "we're making Windows better". Stop making it sick in the first place, I say.
  22. Ok, that makes sense, because requestDance() does not take any arguments but instead uses the global variable gDancer. I think the script you're trying to get running is quite old and there have been several recent changes to the way animations are treated when an avatar stands. There is no longer any need to stop an animation when an avatar actually stands, this seems to be done by the viewer or the server, unsure which. The main time you will need to explicitly stop an animation is when the seated avatar is going to have a different animation played, at which point you fist of all stop what they're currently being animated by and then start the new one. In your tutorial only a single animation is available, so I suggest you comment out the blocks of code that try to stop the animation but leave inn the line that resets gDancer to NULL_KEY, and see what then happens. ETA I just read back through your first post and realise you are saying that when you click the ball a second time you expect the avatar to stop dancing. The code here requires that there is already an avatar for whom permissions have been obtained, and that the current dancer is also an avatar. I suggest you add some llOwnerSay statements around that code to see what the two keys are in order to see if the block of code that calls stopDance is actually getting entered? Likewise, in the stopDance() function, add an llOwnerSay to announce when the function i entered, so you can check it is actually being called. If there is no avatar for whom permissions have been obtained then the block will not be entered.
  23. touch_end(integer c) { key av = llDetectedKey(0); key oldav = llGetPermissionsKey(); if (gDancer != NULL_KEY && oldav != NULL_KEY) { // if someone was already dancing, stop them stopDance(); gDancer = NULL_KEY; } if (av != gDancer) { // if we weren't dancing already, start us gDancer = av; requestDance(av); } } We would need to know the error message to get some idea why it's choking on that line. After reformatting i so I can see the block structure there's little obviously wrong, can you post what it actually says? It would also help if you included the functions stopDance() and requestDance(), as the hints you have given regarding how you stopped the error suggest that requestDance does not take a key as the argument. The only alternative is that either gDancer or oldAv are NULL_KEY at that point, so no call is made to stopDance?
×
×
  • Create New...