Jump to content

elleevelyn

Resident
  • Posts

    577
  • Joined

  • Last visited

Everything posted by elleevelyn

  1. grabbing physical objects and moving them was part of the New User Orientationl back in the day. I dunno if it still works but the tutorial path on Orientation Island Public has a grab tutorial station down by the creek below the temple. Grab the ball on the ground and place it on the table. Not part of the tutorial was throwing the ball off the island, but a few people would give that a go as well
  2. with a significant value sudden devaluation then a way that this can be done is overnight. We log off with L$250 in our account. The next day we log in and our account balance is L$500. The suppliers according to their own timetable adjust their prices accordingly the other way this can be done is to adjust the money supply. To devalue, Supply Linden starts pumping LS into the Lindex. To revalue Supply Linden turns off/turns down the pump a few years ago now Linden appeared to do this. Supply Linden appeared to be pumping approx. L$10 million blocks onto the Lindex on a regular weekly basis - the effect was the exchange rate moved to about USD1 = L$350. Was a whole lot of chatter about this at the time all over. Then after some time the pumping rate slowed and the exchange rate moved back to USD1 = L$250 only Linden could tell us what this was about (and they have never said). But it did mirror the mechanics of how to devalue and revalue a currency in a domestic market using money supply
  3. to grow a domestic economy relative to another target (foreign) economy then we devalue our currency relative to the target. We don't revalue it as OP proposes instead of revalue USD1 = L$100 from USD1 = L$250 then if do anything then devalue USD1 = L$775 the effect of this is the foreign buyers (SL Account holders of USD) are able to obtain more products and services within the domestic SL economy. The ability to obtain more means that the buyers are able to spread their L$ to more suppliers, and/or provide more L$ to fewer suppliers the issue OP highlights is that the suppliers affected by revaluation/devaluation are foreign suppliers - SL creatives who extract value - USD currency from the SL domestic economy. Following from this, when it becomes uneconomic for foreign suppliers to extract value from a domestic economy then they stop supplying products and services. However, stopping supply only happens when there is a oversupply of suppliers; and/or when there is an undersupply of local currency within the domestic economy revaluing to USD1 - L$100 creates an undersupply of local currency. This has a far more detrimental effect on the economy than does the movement of foreign suppliers in and out of the market the fortunes of individual foreign product and services suppliers is of far less importance to the robustness of a domestic economy than is the supply of local currency. Or in other words: Where there is a customer - a supplier can always be found. When there is a supplier - a customer cannot always be found so if anything was to change then devaluation, not revaluation
  4. given that the stated aim is for the NPC to act as a tour guide (with the ability to give a tour guide patter and answer questions about the tour locations) then is not a overly-complex project, and some people (not just new accounts) be into doing this the NPC would not (should not) be able to go to regions it knows nothing about it gets complex should the NPC accept friend requests and should it be able to correspond in IM (thats more complicated as the chat between user and NPC can become untethered from location) as a tour guide working to a set of tethered/known parameters then a reasonably simple NPC project. As a untethered friend then not simple
  5. i haven't done any testing, but I think with Newton then is about up to 24 iterations (precision) on a 32-bit float type, breaking early on match thinking about the quake method a bit more then we can get a union of some kind using fui() and uif() from the LSL Combined Library which I am not going to test as would be terribly slower (two calls to llPow) than llSqrt this said, even if we did this then as I haven't tested it (so not sure what the fui() bit arrangement is) then if the bit arrangement is something other than a C-like union then the magic number would be something other than quake which would be discoverable but yeah so agree with your TLDR. Use llSqrt
  6. i think the best we can get without using any LSL library function is the Newton example. Probably using the precision parameter from the babylonian example for finer control on the result not sure tho that it would be any faster than just using llSqrt the quake method (Q_rsqrt) might be possibly faster if there is a substitute method for the magic number 0x5f3759df, but I dunno what that method might be, or even if there is a substitute at all
  7. just on this. When we use Other People license (closed or open source) is still incumbent on us to do our own legal due diligence when we include a licensed work in our own work for example, just because I include a Public Domain notice in a script I might post to the Scripting Library it means that the Public Domain notice applies only to the script as a whole body of work. My Public Domain notice doesn't mean that I am necessarily the legal owner of all methods that may be included in the posted work. Methods can be encumbered by patents and/or user licenses that can come back and bite us when we not careful pretty much yes to both points generally in most countries we can't dictate on-sell prices unless the product is part of a franchise agreement and in most countries we can encumber a user license with pretty much anything we want (Linden Terms of Service for example), provided that we also provide a legal dispute remedy. Is not enough to just say to the customer that the legal remedy is DMCA. We typically have to do more than this not making a User License available before purchase, is usually legally actionable as a dispute. In this case we could petition Linden to make us whole. Get our money back and remove the product from our inventory. If Linden doesn't do this then we can use the Linden Dispute Arbitration process. https://wiki.secondlife.com/wiki/Linden_Lab_Official:Terms_of_Service_Arbitration_FAQ basically in the do-nothing case we sue Linden for enabling this to happen on their site however, from what Orwar says the seller has addressed this issue by providing a Demo Product accompanied by a User License. My assumption is that the demo is not the Full Product which the user can buy after reading the User License we received the User License before we purchased the Full Product. Typically in this case the act of purchase after receiving the User License would be seen as agreeing/signing in most jurisdictions
  8. this is what I do i can tho easy use all 38 attachment points after linking all I can i consider myself still naked after attaching all body, hair, neko ears tail, wings + jewels. Jewels and body piercings I wear heaps off as standard me so not typical of most other people. I also have 6 huds that I wear standard me. I am a bling bunny so yes I have to ration my actual clothing due to the current 38 attachment limit sometimes I think I would like more but am pretty sure that I would use them all up as well and still want more Pretty Linden please. So I can be a double bling bunny 😻 is the same with layers. Back in a previous life when baked layers was being introduced, like how many layers would be reasonable? I said at that time I could use 22 layers just for face and body, nevermind additional for clothing layers. Since BOM layers came I can use about 40 just for face and body, nevermind clothing layers, without even trying
  9. this ^^ breaking it down integer beginswith(string str, string substr) { return llSubStringIndex(str, substr) == 0; // return TRUE when str begins with substr, else return FALSE } // do it with the NOT operator integer beginswith(string str, string substr) { return !llSubStringIndex(str, substr); // returns TRUE when str begins with substr, else return FALSE } // inline it for efficiency if ((ItemType == INVENTORY_SOUND) & !llSubStringIndex(ItemName, "Radio: "){} // TRUE & TRUE == TRUE
  10. i agree with this approach. The only time an existing code should be deleted (or reverted after a bad edit) is when there is an actual bug in the code (bug in this case meaning the example doesn't actually do what it purports to do) editing code can also break (introduce a bug or introduce a behaviour that was not intended by the orginal submitter) a instance of this came about some years ago due to a convo over the street. The convo lead to discussion about a modification to an existing LSL wiki general purpose method that would make the matter being discussed be slightly more performant somebody edited the existing LSL wiki code entry as a result of the discussion, which broke the generality of the LSL wiki method. An edit which had to be reverted. The editor didn't understand that negative zero and positive zero are two different things even tho in most common use instances they equate to the same value
  11. llSay(PUBLIC_CHANNEL, ...) vs llSay(0, ...) stylistics can make people go nuts sometimes
  12. my advice is not to edit other people's code submissions for stylistic reasons. Stylistics is subjective, what the writer sees is not necessarily the same as what the reader sees stylistic is not the same as substantive. Stylistic is used in tutorial materials. Substantive is used in reference materials. While at the same time a wiki typically tries to fit both roles. Another way to think about this is the difference between longhand and shorthand. In some (if not most) uses of shorthand the reason is that the shorthand version is often substantively more efficient is best I think to not to attempt to edit/change existing reference material to tutorials. Is best to add new code tutorial submissions. Which should typically have the tutorial function embedded in a complete executable script. The student able to copypaste the entire tutorial script and run it
  13. have a look at the wiki for changed event: https://wiki.secondlife.com/wiki/Changed look at the first example and how to used the change parameter bitfield to section your code to deal with the different types of changes that can trigger the change event
  14. with passwords make them as a passphrase. A sentence, saying or lyric from a fav book, poem, or song that you can easily recall as it means something to you other than just being a password. If you worried about somebody working you out then use a saying or words meaningfully imparted to you by a person, parent, teacher, mentor who means something to you basically the longer a password is, the more secure it is from attack this said, also do as Kathrine said. Use 2FA as well whereever it is obtainable
  15. i love this cover of Gimme Shelter by Pretty Enemy. Live music is the best
  16. you don't say what happens (error message, crash, etc) when you try to run the viewer if you haven't already try starting the viewer from the commandline using the --noprobe parameter https://wiki.secondlife.com/wiki/Viewer_parameters
  17. on the first you are correct that single script routines execute in order on the second coordinating multi-script flow can be a bit involved as events in the second script(s) occur independent of the first script (as you know). So I think your approach (have the first script change event trigger the notecard reader script) will help with the flow the first script may tho have to wait till the notecard reader script has completed its task. Is a number ways to do this. One way is to raise a flag accessible to both scripts (linkset_data / object description). The first script raising the flag, the notecard reader script lowering the flag on completion. The first script polling the flag til is lowered. Something like: in first script changed (integer change) { if (change & CHANGED_INVENTORY) { ... stop animations ... raise flag (linkset_data or object description) ... link message to notecard reader to start reading // wait for notecard reader to complete // or stop after some_quite_long_time to prevent the script going catatonic // should the notecard reader script fail to complete float pause = llGetTime() + some_quite_long_time; while ((flag is raised) && (llGetTime() < pause)) { llSleep(1.0); // .. this sleep helps prevent wait from over-thrashing } if (flag is raised) { ... notecard reader script has failed to complete in some_quite_long_time ... do something about it } else { ... we are good to continue } // ... potential catatonic wait method, avoid doing this // ... while (flag is raised); } } in notecard reader script ... on_read_complete, lower flag
  18. be best to begin debugging from the change event. Where in this event are the running animations stopped ? and where in this event are the config cards reread ? If the latter comes first then does the notecard reader set the global variables to 0 ?
  19. a alternative approach can be multiple scripts in the region monitor. Something like: 1) Scanner script: - timer scan for agents on region llGetAgentList(...REGION...) - loop thru - if (agent no longer on region - llGetAgentSize)) then tag agent KVP Active = False (or remove from KVP) and done - if (agent not in experience) then - if (agent tagged in KVP as OOC after X invites) then skip/ignore else hand off agent key + delegated Ping script id (link_message) to Invite script else if (agent in experience) then hand off agent key + KVP Active status (link_message) to available Ping script 2) Invite script: - receive agent key + delegated ping script id (link_message) - if (agent no longer on region - llGetAgentSize) then tag agent KVP Active = False (or remove from KVP) and done - invite agent to experience - if (agent accepts invite) then hand off agent key + KVP Active status = False to delegated Ping script else if (agent refuses/ignores invite after X scanner-prompted invites) then tag them in KVP as OOC 3) Ping script: - receive agent key + KVP Active status (link_message) - if (agent no longer on region - llGetAgentSize) then tag agent KVP Active = False (or remove from KVP) and done - if (agent no longer in experience) (people can leave an experience at any time) then tag agent KVP Active = False and done (inviting them again on next scan) - if (agent KVP Active status = False is new entrant) then attach HUD and tag KVP Active = True else ping the agent's HUD - if (ping response) then done else if (after X time) attach HUD - on_attach HUD (HUD checks for presence of existing HUD) - if (existing HUD) then remove/delete the newly attached HUD 4) HUD monitors for presence of companion Meter. Check on HUD attached, Meter detached, and on changed region. Attaching new when Meter not found. When HUD detached then HUD detaches Meter 5) KVP Writer script: Any script can read the KVP for info. In the multiple script scenario tho is often better for scripts to pass a Write link_message to a dedicated KVP Writer script to do this work in this approach there are as many Invite and Ping scripts as needed to better handle the volume of agents present at any one time. The scanner script farming (handing off) the work to the Invite and Ping scripts the objective with this approach is to only rez things when they are needed and to have the scanner script do the least amount of work as possible
  20. it can when use a self-replicator. Which goes: 1) Make a box. Put a copy of the box and a giver script in the box 2) On_rez copy of box from contents. Give the copy of box the contents of the rezzer box is useful for things like sit teleporters and vehicles which are available for anyone to drive. Saves having to provide a rezzer post. Person sits on the vehicle. On_sit the vehicle rezzes a copy of itself, person drives away leaving a new vehicle behind in its place for the next person
  21. Gossipgirl was a promotion partnership between Linden and the Gossipgirl franchise. The name could come back if the partnership was renewed
  22. example of a reversible arithmetic feistel network. Reversible meaning encoder/decoder // reversible arithmetic feistel network // public domain: elleevelyn February 2024 // credits: irihapeti/16/elizabeth // // typical use case: obfuscation of a sequence of ordinal numbers // - generate a sequence of "random-looking" unique numbers that can be mapped back // to the sequence set // - for further obfuscation (given that the encoder/decoder algorithm is public) // then the simplist is to changeout the pseudorandom number generator for another // keeping the changeout a secret known only to yourself // - more obfuscation can be obtained by adding more layers to the mixing as // irihapeti did. Note that i keep the mixing to the barest so will be easier to // add layers of your own design // galois lfsr pseudorandom number generator integer raN; // state generated by raD integer raD(integer magnitude) { raN = (raN >> 1) ^ (-(raN & 0x1) & 0xD0000001); return (raN & 0x7FFFFFFF) % magnitude; } // brute factor magnitude integer raF(integer magnitude) { // return low factor of magnitude integer result = (integer)llSqrt(magnitude); integer n = 1 + (magnitude & 0x1); result -= ((!(result & 0x1)) && (n == 2)); for (; (result > 2) && (magnitude % result); result -= n); return result; } // arithmetic feistel network encoder integer encode(integer value, integer magnitude, integer lowfactor, integer seed) { // encode value using magnitude, lowfactor, seed raN = seed; integer highfactor = magnitude / lowfactor; integer i; // forward mixing : fixed to 8 rounds integer low = value % lowfactor; integer high = value / lowfactor; for (i = 0; i < 8; ++i) { integer m = high % lowfactor; low = (low + (m * m) + raD(highfactor)) % lowfactor; m = low % highfactor; high = (high + (m * m) + raD(lowfactor)) % highfactor; } return high * lowfactor + low; } // arithmetic feistel network decoder integer decode(integer value, integer magnitude, integer lowfactor, integer seed) { // decode value using magnitude, lowfactor, seed raN = seed; integer highfactor = magnitude / lowfactor; integer i; // get the PRNG outputs used by encoder list prng; for (i = 0; i < 8; ++i, prng += [raD(highfactor), raD(lowfactor)]); // reverse mixing : fixed to 8 rounds integer low = value % lowfactor; integer high = value / lowfactor; for (i = 14; i >= 0; i -= 2) { integer m = low % highfactor; high = (high - (m * m) - llList2Integer(prng, i+1)) % highfactor; if (high < 0) high += highfactor; m = high % lowfactor; low = (low - (m * m) - llList2Integer(prng, i)) % lowfactor; if (low < 0) low += lowfactor; } return high * lowfactor + low; } default { state_entry() { // encode/decode set [0..9] within magnitude range [0..9] integer seed = (integer)llFrand(0x10000) << 16 | (integer)llFrand(0x10000); integer magnitude = 10; integer lowfactor = raF(magnitude); integer i; for (i = 0; i < magnitude; ++i) { integer encoded = encode(i, magnitude, lowfactor, seed); integer decoded = decode(encoded, magnitude, lowfactor, seed); llOwnerSay(llDumpList2String(["i: ", i, " enc: ", encoded, " dec: ", decoded], "")); } // encode/decode set [2000..2009] within magnitude range [0..99999999] seed = (integer)llFrand(0x10000) << 16 | (integer)llFrand(0x10000); magnitude = 100000000; lowfactor = raF(magnitude); for (i = 2000; i < 2010; ++i) { integer encoded = encode(i, magnitude, lowfactor, seed); integer decoded = decode(encoded, magnitude, lowfactor, seed); llOwnerSay(llDumpList2String(["i: ", i, " enc: ", encoded, " dec: ", decoded], "")); } } }
  23. this viewer could come to be seen as SL 2.0 I think also that this SL 2.0 view of the inworld could be subscription-only equivalent to Premium Plus (approx. 10/12USD month) with all the current PP benefits (land, stipend, uploads, etc) I assume/speculate/guess this as the Alpha invite was to existing Premium Plus accounts which is interesting. Interesting, given that there are also any number of other account type holders who would otherwise be very invested in this mobile version
  24. i parked my car on the street outside my friend's house when I went visit them. My car was immediately towed away when I go out of my car. I am outrage about this as there wasn't any No Parking sign
  25. no what I am saying is that a scripted solution can do everything that parcel Auto-return can do and more. For the widest number of people having more choices in how to manage their land, is better than having fewer choices. Even tho as an individual land owner we might think the way we have chosen is the best way. Which it is, for us as the individual most concerned.
×
×
  • Create New...