Jump to content

Mollymews

Resident
  • Posts

    5,768
  • Joined

Everything posted by Mollymews

  1. just on this part is true that sometimes people hang out their scripter-for-hire shingle then take on jobs which are beyond their capabilities. Under and over price their work as well. This is true of all creative fields and sometimes the customer turns up on the forums also looking for somebody else to complete the job disappointment comes with the territory tho sometimes. As anyone who got promised a bathroom upgrade completed in two weeks and 4 weeks later are still looking at a empty space where the wash stand is supposed to be. And the builder goes something something slow container ship, when before ripping the old wash stand out they earnestly promised that the new wash stand would be here tomorrow which just happens to be my current situation. I am like a olden days pioneer now, I do everything now in the kitchen sink. All I need to compete the set is wood range to cook on and boil bath water and I will be totes pioneer! I now have a delivery date of 16th of next month. Oh! well! Keep smiling and looking for happiness. At least I have a private indoor well, not like some people way worse off than me. Is not like I have to trudge 2 kms everyday to the village well for water
  2. thanks for the explanation. Your indexing method is n-dimensional like you said. This is really cool. I like it a lot
  3. i am not getting how the values in a_extents relate to the data list I get that there are 4 levels in the data, and that the spacing in a_extents seems to denote a relationship between paired values. I am not understanding what they mean
  4. key id in the attach event is the key of the avatar to whom the HUD is attached. When the HUD is detached then key id = NULL_KEY so the code: if (id) ... request permissions. from the avatar who has attached (is wearing) the HUD the code snippet that Innula posted is a safer way to do this. Safer than what I posted about the syntax errors in your OP script delete the state_entry event. The event clause includes the ending brace } which is on the line above touch start. then carefully paste Innula's code snippet where the original state_entry event was the snippet is a new state_entry event and a new attach event be very sure that above you newly pasted state_entry event it says default { and below the end brace of the newly pasted attach event it says touch_start(integer start_param) for every ending brace there is a matching opening brace { ...code.. }. When the braces don't match up then we get a syntax error
  5. i dug up the post about using a list as a container for multi-dimensional structures. The post was in answer to a question about how to serialise/traverse a list structured as a unbalanced binary tree. The post shows a way to do this with a stack method which is non-recursive is here: as you mention tho, the bigger the tree (or any other unbalanced/jagged structure) gets the longer it takes to traverse and update. Is one the few blessings that comes from only having 64K memory for a LSL script. Our unbalanced structure is going to be relatively small so to fit it all into memory ps. Whenever topics like this come up I perk up and think ooo! thats interesting ! and I get lighty up eyes, itchy brain and even more itchy fingers. Type type type. And when I do then I can burble a whole lot. So I don't mean to run you all your thread tracking rainbow paw prints all over it i would encourage you tho to have a go at writing your transpiler. As a thing in itself is pretty interesting. And if you do get it to a point where the translation is close enough to good then you could as a further exercise take it to a whole next level have your new language compile to CIL Sei Lisa has already made the compiler part, drawing on Linden open source code. Is here: https://github.com/Sei-Lisa/LSL-compiler
  6. i looked it up, because I am nosey from the Fortran examples I found, seems a sparse array is a n-dimensional matrix with memory only taken up by used elements LSL equivalent is as you say lists within lists. Like: list a = [ 0, [1,[3,[7,8],4,[9,a]]], [2,[5,[b,c],6,[d,e]]] ]; i thought it was more like a tree because 'list a' is a binary tree. But I can see now that a tree is only a subset view of a n-dimensional sparse matrix i did read also that Fortran has quite a lot of helper functions/methods to quickly address/traverse the sparse array a answer on stackoverflow, was the most helpful in my understanding of this https://stackoverflow.com/questions/62255387/sparse-array-in-fortran Fortran sparse arrays are pretty cool. And I can see how extremely useful they are to engineers and scientists who have heaps of variable data to model
  7. my thoughts on this the mood of this forum has changed in recent months for a long time, many years, the mood of this forum was to not be overly helpful. Based on a premise that scripting is a commercial endeavour and we should not write scripts for our competitors the effect of this was that this forum had very few people new to scripting, posting to it. Just the odd experienced scripter asking for help on obscurities. New person often told to go somewhere else for help then the mood changed a few months ago due to the postings of one new person to the forum, and a lamentation from a elder forum regular. I thought about that and decided to support these two people. Type type code code post post post, like the new person is doing, and what the elder person was lamenting. The lack of help for new people as a consequence others who had observed the don't help the competitors rule for ages have also starting to go code code post post post as well new scripters now getting lots more help. code snippets, work flows, engaged conversations, etc. And more and more new people are now posting and becoming engaged with this scripting forum community. This forum today is now like the the ancient forums, when everybody was new to LSL back in the ancient days everybody posted code just because they could. Is how we got the wiki and the ancient scripting forums full of scripting wisdom and the travails of the elders in acquiring that wisdom in another thread I mentioned all the elder old school scripters I miss. I miss them because they shared their knowledge, and they were never afraid that I newbie scripter would ever eat their scripting lunch. May be one day in some distant future I might get to a level where we could have a shared lunch, but even then they will be bringing the main course and I am bringing the entree is the same beginning to happen now today like it was in the olden days Some new forum person goes: hi! I am trying to make my lunch. And I go: have an entree to get you started. And they go thanks! And then another person pops in and goes: try this for your main. New person goes; wow! thanks then after a bit, new person goes: hey! look how cool is this. I made dessert! Not sure what is going to taste like, but I made it! woohoo! You want some? And we all go woohoo! thanks! and everybody is happy! then another new scripter person sees all this and posts: Hi! people, I am trying to make dinner but am a bit stuck, here's the ingredients I have and what I think is the recipe. And we go; oooh! dinner! And go: hmm! that recipe is for lamb, and at the moment all you have is a chicken. I give you a piece of lamb to get you started. And they go: thanks ! and we go: you welcome! and everybody happy i am enjoying this forum now, is friendly, helpful and welcoming and nobody who is now a elder is afraid of getting their lunch eaten by somebody else
  8. you did get some of the pieces in place so good on you. To progress you further then, the next steps go something like this set up a global variable integer Flee when Flee is TRUE the sensor is On. When Flee is FALSE the sensor is Off in the run_time_permissions event set Flee to FALSE take controls set up a touch_start event. In this event toggle Flee TRUE or FALSE on successive touches. Flee = !Flee; (this lets you start/stop Flee mode manually) if Flee is TRUE start the sensor else Flee is FALSE stop the sensor in the control event use integer start (=keydown) to set Flee to FALSE. OnKeyDown you are moving yourself use integer end (=keyup) to set Flee to TRUE. OnKeyUp you are not moving yourself start/stop the sensor on Flee (as above) set up a attach event when script is attached, request permissions
  9. is not easy to implement this as is effectively a unstructured nested tree. And it might be better to create a new tree type for this with tree helper functions otherwise list a; for (i = 0; i < 100; ++i) { a += [[a]]; } will take a lot of time when the traversal of this lists within lists can only be coded in LSL. Whereas a tree type could have traverse functions a thing is that we can use a list now as a tree already with slow traversal this said most people I think, think of list within list as a 2-dimension thing as a substitute for a table array, which can be done already with strided list start adding 3,4,5,...,10 dimensions then is going to crawl and use heaps of memory without traverse functions
  10. your next challenge is to mod the script so that the sensor only starts when your avatar is not moving under your manual control. This way you can move yourself normally and when in running away mode you can manually run away in other directions as well fa way to trigger when to start/stopthe sensor is with: http://wiki.secondlife.com/wiki/LlTakeControls
  11. i think is something to do with the url. My other urls from audacy.com work fine. I think Prokofy has also ran into a similar type of url. How similar I don't know i have tried it on a number of regions. Idu, Lewis, Hanshin to name some. Same error everywhere I try
  12. the Catwa Queen does both. Can use the shape sliders like normal to change eyes, nose, mouth, chin, etc. And then can tweak the face further with the Catwa HUD to reach places that the shape sliders can't so can tell your friend to use the shape sliders and then use the HUD to tweak if needed ps. I said before that it was the Gear icon on the HUD. Is not, is the Shapes icon
  13. it happens with my attached media player. I can reproduce it while trying to use that url when I close both message boxes then toggle my sound off and on, and then pick another url from my media player dialog then my other urls start playing and the viewer carries on as if nothing has happened why I dunno
  14. it only started happening with the viewer https://releasenotes.secondlife.com/viewer/6.5.0.564805.html which auto-installed on me yesterday Prokofy probably got the same viewer as me
  15. if there is an immediate advantage to LS+ it would be for people new to SL who have some experience with dev languages like Java, Ruby, Delphi, C#, VB, etc i agree with your sentiment tho that any performance or extensibility gains would not come just with a pre-processor. It would come when the LS+ compiler was built. Things like structs for example would be a LS+ extension. Introducing struct to LSL has always I think been problematic for Linden as it introduces a syntax addressing paradigm not included in LSL. Whereas struct is a natural language fit for LS+ LS+ example: list People; // is not specified As Stride so is a standard list struct Person { key id; string name; vector pos; } touch_start(integer num) { if (num.detectedKey(0) == self.owner) { integer i = -People.length(); for ( ; i; ++i) { Person this = People[i]; self.ownerSay(this.id + " " + this.name + " " + (string)this.pos); } } else { Person thisPerson; thisPerson.id = num.detectedKey(0); thisPerson.name = num.detectedName(0); thisPerson.pos = num.detectedPos(0); People += [thisPerson]; } } ps. just add that I kinda agree with not introducing new paradigms to LSL itself. As when so can easily end up butchering the naturalness of the language. Like butcher a language enough can end up with C++ pps. I have been having a play with Apple Swift language. Keeps all the advantages of Objective C. But adds a whole new level of usability, richness and elegance. Is really nice to work with. I got it running on Windows in Visual Studio 2019. I am never going to do anything in C++ ever again
  16. the Catwa HDPRO Style F v1.4 HUD for the Catwa HDPRO Queen head. Is on the Gear wheel tab altho to be fair it doesn't tweak the Linden body shape itself. I think it uses animations to move the skeleton bones, which can be saved into a slot on the head
  17. the error comes when the script is transferred to another person while playing = TRUE. When the next owner touches the HUD then the script tries to stopAnimation when it doesn't have permission. What should happen the first time the HUD is touched by the new owner then playing = FALSE, so that the script requests the new owner's permissions the simple fix is to add a changed event changed (integer change) { if (change & CHANGED_OWNER) { playing = FALSE; } } http://wiki.secondlife.com/wiki/Changed
  18. i got this error today on Linden Viewer Second Life Release 6.5.0.564805 (64bit) it happened when I went to change the url on my attached scripted media radio player llSetPrimMediaParams(0, [ PRIM_MEDIA_AUTO_PLAY, TRUE, PRIM_MEDIA_CURRENT_URL, llList2String(stations, i + i)]); where stations url is: http://95.216.153.146:8040/dance98128kbps.mp3 when I type this url into my web browser (Firefox) the web page says: "The connection has timed out The server at 95.216.153.146 is taking too long to respond." when I close the Linden Viewer error message box then the viewer doesn't break and I can change to another media url and they play fine. All my other stations are audacy.com urls, so I will just use those from now on, at least until there is a fix
  19. i am always happy to get feedback. So thanks you too is always better to ask questions. As is true about debugging frustrations later on in life. It can drive us nuts getting conked on by a script thats been working perfect for ages, right up til the moment it doesn't. Oh! man I am sooo lucky, a 1 in a zillion chance of getting conked on and I won 😸
  20. adding more thoughts events. I wouldn't propose changing event names or the way in which they work but as we are treating variables as objects then we can do this touch_start(integer num) { key id = num.detectedKey(0); string name = num.detectedName(0); vector pos = num.detectedPos(0); } the script would refer to itsef as self. Like self.say(0, "hello"); self.regionSay(id, channel, "hello"); self.requestPermissions(id, ...); // the script is requesting perms from id for itself self.memoryLimit = 20000; integer freemem = self.freeMemory(); listen(integer channel, string name, key id, string msg) { if (id.owner() == self.owner()) { if (msg.charAt(0) == "@") ... do @ stuff ... } } thinking about linked objects more, the method I mentioned previously might be to much effort to implement. Alternatively then we put the onus on the scripter to specify the link numbers correctly. Same as it is now in LSL #specify Apples As Link 2 #specify Bananas As Link 3 self.messageLinked(Apples, 0, "hello", id); link_message(integer sender, integer num, string msg, key id) { if (sender == Bananas) { if (msg == "change texture on surface 1") { self.texture = [id, 1]; // llSetTexture if (self.color(1) != <1.0, 1.0, 1.0>) // llGetColor self.color = [<1.0,1.0,1.0>, 1.0] ; // llSetColor } } } with Get/Set Params then list params = self.params([ list of parameters ]); // llGetP.. ... do something with params ... self.paramsFast = [ list of parameters ]; // llSetP..Fast list params = Apples.params([list]); // llGetLinkP... Apples.paramsFast = params; // llSetLinkP... the thought behind me posting all of this is that I don't think we should model our language on a existing language. What we would be better to do is design a syntax for LSL++ which largely follows the existing LSL API naming conventions. The syntax also reflecting the syntax conventions in languages like C#, Java, etc as when we do this then people moving from LSL to LSL++ will find it easier. As will new people coming to LSL++ from object-oriented languages LSL++ might be too ambitious as a name. LS+ might be more appropriate. Linden Scripting + a little bit. As all we have done here is skinned LSL. A skinning tho that lends itself to making a pre-processor that has a one-to-one mapping to the LSL API. A pre-processed code that in turn lends itself to interfacing in a fairly straightforward way with the existing LSL->CIL compiler in sum if it went all the way then would just be a 3rd compiler option in the code editor: LSO LSL LS+ using the idea of a pre-processor: LS+ > LSL, as a syntax and API mapping tool to help design the LS+ language
  21. it depends on the head. Some heads are better rigged to the Shape sliders than others. And some heads have additional sliders in their HUD if you say the name of your head then somebody with the same head maybe will come by and give some advice
  22. suppose we wanted our pre-processor to bring Object.Method into life string s = "Hello World "; integer len = s.length(); string chr = s.charAt(3); string str = s.strAt(3, 7); string trim = s.trim(STRING_TRIM); translations: integer len = llStringLength(s); string chr = llChar(s, 3); string str = llGetSubString(s, 3, 7); string trim = llStringTrim(s, STRING_TRIM); levelling up: s.insert("One ", 6); s.delete(6, 4); s.replace("One", 7, 11); integer i = s.find("World"); all translating to the appropriate LSL function same with lists list myList = [something,something]; myList.insert(["One"], 2); translation: myList = llListInsertList(myList, ["One"], 2); #specify myTable As Stride 2 list myTable = [some,thing,some,thing]; myTable.insert([this,thing], 1); // insert as row 1 myTable.delete(1); // delete row 1 myTable.replace([this, thing], 1); replace row 1, columns 0 and 1 myTable.replace([newthing], 1, 1); replace row 1 column 1 integer i = myTable.find([athing], 1); // find a thing in column 1 // calculate row from i row = i / 2; ps. is all pretty interesting for me thinking about these kinds of things. I am not going to do it tho. I just like to think about how it might be done i am wait for Rider Linden to make LSL++ in this kinda way. Like one day maybe Rider Linden will go: gosh! I ran out of things to do, other than come to work and eat my lunch. So I better look busy or the boss might give me the sack. And go off and make LSL++ like before next Friday 😸 pps. Never know but LSL++ might come with a memory upgrade to 256K. Hope so
  23. some thoughts on lists and arrays, and how might this be done with a pre-processor i quite like the list type as it can store different types of data in the same structure we can think of the list as a multi-column table also and code it up that way. LSL has some list strided functions to help with this we can also think of a list as a traversable tree. I won't get into it here, just say that there is a example of how to do this way down in the Scripting Forum somehwere the thing I find most tedious about lists is that we have to type functions to get the list element value integer value = llList2Integer(myList, index); i would like to be able to code: integer value = myList[index]; the pre-processor inferring the appropriate function from the type of value. Translating to: integer value = llList2Integer(myList, index); string value = llList2String(myList, index); key value = llList2Key(myList, index); key value = (key)myList[index]; as this is preceded by a cast then the appropriate translation is key value = (key)llList2String(myList, index); Firestorm pre-processor does the reverse already: myList[index] = value; Translating to llListReplaceList once we have got to this point then can look at the strided list as a n-column array (a table) #specify list myTable As Stride 2 list myTable; myTable = [123, 456]; myTable += [789, 100]; integer value = myTable[0, 0]; // == 123 value = myTable[0, 1]; // == 456 value = myTable[1, 0]; // == 789 value = myTable[1, 1]; // == 100 as myTable has been specified with a stride of 2 then the pre-processor can resolve the indexing integer row = 1; integer column = 0; value = myTable[row, column]; translates to: value = llList2Integer(myTable, 2 * row + column); // == 789 a 3-column table goes: #specify list myTable As Stride 3 list myTable; myTable = ["abc", 456, 789]; myTable += ["def", 100, 123]; integer row = 0; integer column = 0; string s = myTable[row, column]; integer i = myTable[row + 1, column + 2]; translate: string s = llList2String(myTable, 3 * row + column); // == "abc" integer i = llList2Integer(myTable, 3 * (row + 1) + column + 2); // == 123 the pre-processor knowing that (row + 1) has to be wrapped in parentheses should the scripter not have provided them already
  24. i just add another thought about ordinary Second Life has proofed ordinary again. Bellissaria. Home making It doesn't get more ordinary than this. We look at the World Map and Bellissaria is huge and its occupied. People are paying for this most ordinary of things i met a lady a couple of weeks ago inworld. She has 11 Premium accounts now. I was like: What for!! And she says I can't help myself. I only ever one account before. Is all Patch Linden's fault. He gets me. This lady is an outlier for sure. But is a heaps of people now with more than one Premium account because they just like making comfortable little homes and gardens, with nice clothes on
  25. given the massive success of the Legless Metaverse then nah! Oh! wait given the amount of money and people resources they are going to throw at it then anything is possible but I think they pretty much will start over again with legs. Mr Zuckerberg is quite serious about The Metaverse being the next big thing the only other big company that could crush Facebook Metaverse in its infancy would be Google, if they ever got serious about Google Earth. Real world shopping, concerts, travel, stay in a hotel, go to sports events on your screen in 3D. Can't travel to the World Cup then click here for $20, and will put you in in any seat you want in the stadium to watch the final. And able to switch to any live feed camera that you want, open a replay window, hear the live commentary, hear the crowd in attendance other thing is could even live in your own real world home virtually with Google Earth. Go to the park down the road from your house, have a picnic, turn the sun on is kinda intriguing what a Virtual Earth could be, in the most ordinary of ways
×
×
  • Create New...