Jump to content

Profaitchikenz Haiku

Resident
  • Posts

    2,837
  • Joined

  • Last visited

Everything posted by Profaitchikenz Haiku

  1. "I and I are the livin' dread, in the land of the livin' dead..." I use Blender as little as possible, likewise GMax and 3dCanvas/3DCrafter. If I must build outside of SL I prefer to use Sketchup, the wide open space is similar to SL-builds, whereas the other three programs make me think of cutting two armholes and a view port in a cardboard box and mounting my work in a lazy-susan inside, then peering in whilst fumbling with gloved hands in the gloom. (I do actually do something close to this when I'm spray-painting model-railway things because my partner is badly asthmatic and reacts badly to the solvents. If she keels over I might starve to death.)
  2. If only it gave you the chance to bomb and strafe other people.... I left the train simulators for a similar reason, it was far too solitary a pastime. SL gives you collaborative building and people with minds of their own, (even though this can sometimes be infuriating and lead to your wishing to bomb and strafe them),
  3. Sl can't be that difficult otherwise we wouldn't be there. However, what might help newcomers is a sort of recap of why certain things are the way they are. But this is probably the biggest hurdle a newcomer has to leap over, given that it includes the invidious prejudice several places have against newcomers.
  4. This is a pure stab in the dark, but as a bezier curve requires more then two points (minimum a start, and end, and a control), the three loop events are to create a curve segment from three such points. Coefirst starts with llGetPos() so the bezier curve begins with the current position, but coefisnext and coefislast each begin with the third point from the previous call result (coefnext uses P3 from coefirst as it's P0. coefilast uses the P3 from coefnextt as it's P0). There's a clue here, I'm sure. ETA just playing with Dora's script in a sandbox (always worth looking at Dora's things) there are a number of bezier curves produced, each starting from the last position, so the loops are starting with a point that is either an initial point or the end of a previous point. I still haven't looked at how she gets the final curve to close the circle. More reports may follow. Yes, got it, look at how she uses global variable Po0. There are three loops because each curve starts either at the initial point or where the last curve ended, and comprises an initial and an end point and some in-between. an initial set of curves is produced outward-bound from the start, a middle set of curves is produced following on from where the outbound ones end, and a final set of curves is produced to return to where the first set of curves began. your vector bottom_left and your vector top_right combined with your starting position can provide the X Y Z figures to feed into her Range box (something like Xrange = Xtr - Xbl, Yrange = Ytr - Ybl, Zrange = Ztr - Zbl assuming you ar stood smack in the middle of such a box) If you just want the positions and rotations rather than doing KFM, grab the KfmList and work through it thus: From your origiinal llGetPos and llGet Rot, add the first list item to your position and multiply your rotation by the second list item, skip the third item Add the next (4th) list item to the last position you obtained, multiply the last rotation you obtained by the 5th list item, continue in steps of three. The result will be a list of region Pos and Rots constrained within the box and forming a closed path ETA playing further, the number of KFM triplets of pos,rot, speed is dependent upon the twin parameters Frames/curve and Curves, so if you set those both to 3, the list length after the plotting from coefisFirst will be 9, after coefisNext 18, and after coefisEnd 27,. With the default values a much much greater list is produced (over 144 entries), which is probably why you got a crash trying to dump the list?
  5. I'm not sure which viewer you are using, but on Catznip in the mini-map part of the people floater I see parcels with ban-lines shown as a reddish hue. It should therefore be quite easy to use it as an inflight-radar and steer around such parcels. ETA I am seeing a lot more posts on the theme of "something other people are doing is inconveniencing me, I want them to stop doing it/be disallowed from being able to do it". Apart from the obvious rejoinder of ""they might be doing it because of things people like you are doing", the general trend of lobbying LL to net-nanny-cancel some/all individual freedoms is a worrying one. Socialism has some fine ideals, but Libertarianism still has a lot to offer as a way forward for societies.
  6. Yay, bots and NPC's can now do para-roleplay instead of terse one-liners.
  7. You will get a better range of answers iff you ask this question in the building forum in creation, but once you have uploaded a mesh object you cannot change the LI in world. The most you can try is to upload it again with different LoD and physics settings and possibly get some reduction in LI.
  8. I just had a play with it, nice addition The texture is specified as a string giving the name of a texture in the inventory, or if as a key, it must be in the form of a string llSetPrimitiveParams([PRIM_PROJECTOR, string texture name or uuid, float FoV, float Focus, float Ambience]); It's write-only, not quite sure why, but it's great to be able to use it to throw textures on a screen. The prim must have the point light already activated, either by the edit tab for feattures, or by setting params.
  9. I think this is a viewer question, not a scripting one. Your best starting place is in the edit - preferences tab, then look under the colours tab, or the privacy one, or the system/vanity ones of it's a TPV.
  10. ^^^^ do { llShout(0, "YES PLEASE!"); } while(PRIM_POINT_TEXTURE == NOT_YET_IMPLEMENTED);
  11. Diversity of minds. The desire to see human-like behaviour in other species is one of our oldest traits, there's strong evidence for it in the cave paintings. It's almost as fundamental to us as is the need to beat the bejasus out of others from time to time, there's strong evidence for that in most of the archaeological excavations. The first is probably due to a fear of loneliness, the other due to a fear of others.
  12. I just finished watching the video, and when I flipped back to the news there was a bit of breaking news - "Facebook has changed it's company name to 'Meta', apparently as a result of the recent bad PR" I don't know why I've started humming to myself "shaved her legs and then he was a she..."
  13. I think the look that Musk is giving Zuck is priceless I've said it elsewhere but it's still relevant. If we let the metaverse be created by an organization for financial(*) reasons, we won't get what we want, we'll get what they think they can sell us. This isn't just the simple case of "you pay, you use..." It's also "we find what you like so we can sell it to others..."
  14. Actually, you were just about there... Snippets follow (with a caveat, some days my typing is so bad I would do better if I used my feet instead and chanted "isa you wasa born in Naples? We pressa da grapes together" key isOktoSit = NULL_KEY; touch_start(integer touches) { if(llDetectedGroup(touches - 1) == TRUE) { isOktoSit = llDetectedKey(touches - 1); llWhisper(0, "You have ten seconds to park your behemoth"); llSetTimerevent(10.0); } else { llWhisper(0, "Must be in the group to us this..."); } } changed(integer change) { if( change & CHANGED_LINK) { llSetTimerEvent(0.0); key avatar = llAvatarOnSitTarget(); if(avatar != NULL_KEY) { if(avatar != isOktoSit) { llUnSit(avatar); llWhisper(0,"Must be in the same grou, please touch to try again"); isOktoSit = NULL_KEY; } } else { isOktoSit = NULL_KEY; // in case it was valid sitter who left the edfice } } } timer() { llSetTimerEvent(0.0); isOktoSit = NULL_KEY; }
  15. The plan sounds OK. have a global variable key OktoSit intiialised to NULL_KEY; Inside the touch event, test llDetectectedGroup. If True, set a timer for ten seconds, and set llDetectedKey value as the global variable OktoSit; if FALSE, set global variable OktoSit to NULL_KEY If the timer goes before any changed event, set OkoSit to NULL_KEY Inside changed, in changed link, cancel any timer then test the value for llAvatarOnSitTarget. If it is Not NULL_KEY, then check if it is the same as OktoSit. If different, unsit whoever it was. If somebody just right-clicks and sits without first touching, OktoSit will be NULL_KEY and so they will get thrown off. If they don't know they must be in the same group they might keep on trying, so when you unsit somebody, whisper a message such as "Please touch me first to perform the group check" Or have a sign or hovertext advising them. Don't forget that llAvatarOnSitTarget will return NULL_KEY when somebody has just got up, so seperate thoe two conditions carefully.
  16. Not that I know of. Go back to where you were going to add the group-check and have another go. If the toucher is also the sitter, then do the llDetectedGroup() check. If that check is false, unsit the sitter. If nobody is sitting but you get a touch, what is your plan? Ignore the touch? Tell them to sit?
  17. Not a problem, "Non credo, ergo sum" I do actually know that parcel, it's just I so rarely have parcel media turned on that I would have missed it. Mostly I have my own music playing on the big speakers. I find it hard to concentrate fully when modern music is playing, hence my love of Buxxtehude, Vivaldi, etc.
  18. Very comprehensive. I have a simpler method since it was developed for a very specific pair off application // A method of implementing sparse arrays using a list // NOTE, this relies on the fact that any list entry can have the type determined // by llGetListEntryType() to actually make use of the dtata in the records // method 1, simple structure // advantages: // easy to amend since each record counter is relative not absolute // drawbacks: // must be traversed from start to finish // hard when doing a listFindList to determine the actual record start list sparse = [ integer numFields // count of how many fields in this record ,// data,... (any number of entries ,integer numFields // entries in next record , ... ]; // from the start of the list, to access data record n, // get the number of fields in the current record. // If the current record is not the desired one, // add the number of fields to the current positon and repeat // to delete an entry, // delete the sublist starting at the record count consisting // of that number of fields in the sub-list. // to change the length of an entry, // delete the record and put in a new one of // the required number of fields with the apprpriate count // method 2, using a -ve counter for the fields // advantages: // can be traversed forwards and backwards // ( in the middle of a record, decrement the list index until a -ve integer is // found to locate the precise star pf the record) // start of record can be determined from a listFindList position by // moving backwards until a -ve integer is found // disadvantages: // -ve integers cannot be a part of the record // some extra processing at each step through the data from record to record list cleverSparse = [ -VE integer // number of fields ,// data,... (any number of entries ,-VE integer numFields // next record ,... ]; // Access, amendments, deletions are as the simple method vith the extra step of // negating the number of fields entry
  19. Your best bet here is to remove the line in state_entry and then let the dataserver event announce the name. If other parts of your script need to use displayName then all I can suggest is you set it to "" before the request for data and then elsewher in the cod check for an empty string and defeer action until it is no longer empty. The dataserver can be as quick as a flash when doing things like reading notecards where the data is there in the region, but if the avatar in question is elsewhere it might take much longer for a return.
  20. I am, and this technique comes from there and various Macro assemblers such as Macro11 on the early machines I started with. Up until Coffee's advice that each function consumes 512 bytes regardless of how little there is in it, I was using this technique quite extensively, to control various aspects of program behaviour via a few functions and some global variables. Rolig made a point in another thread after examining code that somebody was asking for help with, that the chatter was making it impossible to see what was going on, and this is going to have to be addressed later in the sticky, how to selectively output diagnostics. I have used a method much as described above, where debug has a value, and by increasing it more and more routines start hollering. However, thinking through what others have posted here, I agree tht for a newcomer, this is a bit too esoteric, given that what they really want to do is get their script to work, not learn the intricacies of LSL. The other issue I think we are going to have to put in a sticky is how to track down incorrect pairing or braces, not just one isn't there, but what happens when you have got them matched but not are the right places. I wouldn't want to see a mass of stickied threads at the top of the forum so I would rather like such advice to be collected into a single topic.
  21. On this matter, I have no experience at all. If there's a channel playing Buxtehude I'll experiment. Just a guess, but you could try passing such an invalid string and seeing hat the function return codes are, that' most likely where youre going to get some indication of what didn't agree with the recieveer.
  22. This is a derivative of a method I've used when coding in C, and if there was an inbuilt macro method for LSL I would probably have used it, but again, it's expecting a bit too much knowledge from the target audience, who may not know about pre-processors in the first place. Many of the help requests we see on the forums are from people who have picked up script that has escaped from Freebies Dungeon or Yadniis Junkard, and are trying to tweak it. They are bypassing the traditional scripting tutorials in favour of starting off with something that works, sort of, (and I have to admit I am exactly this sort of person myself). We have to assume they know nothing of LSL functions not already present in the script and probably don't even know about the LSL portal. They need to be shown short succint examples of what to do, because they are hell-bent on completing their project and will b reluctant to be sent off on missions to learn and understand something that has no immediate chance of solving their problem. We could respond to their requests by insisting they learn to code from the bottom up first, research the LSL portal before asking for help, etc. I don't think those are fruitful paths for either them or us. I am amazed at just how much I personally have learned over the past nine months after deciding t try and help a couple of newcomers who were determined to learn things their way rather than the prescribed way. If it means anything to those reading this, I found myself in the position described by Erasmus in Anathem when he realised that he should try and help Barb to understand the universe, and I have noticed the benefits much as Erasmus did.
×
×
  • Create New...