Jump to content

Mollymews

Resident
  • Posts

    5,768
  • Joined

Everything posted by Mollymews

  1. i don't ever want this one to be my friend either. If don't ever want to get a Friendly Greetings from them 😸
  2. i can't recommend a complete script, but since Linden gave us llChar and llOrd then we can pretty quickly pack and access as many as 3300 visitor avatar keys in a first-in first-out string queue (total number depending on code size of script) a method for packing keys is here so anyone wanting to make this for you Jennifer, if they haven't already, can use it
  3. punk band The Muffs. Which I only found out about today this a great cover
  4. on how it might work the orb hunter bot would have to have estate manager status. So that a parcel ban (as opposed to a orb ban) has no effect on the bot so if it was to be done by Linden AR comes in. Parcel location pulled from AR and added to hunter bot work list. Bot periodically gets the list. Bot goes to parcel, waits for 16 seconds, if orb tries to teleport or eject bot, bot zaps (returns orb). Bot can also do height check as well parcel owner will get the notification: YourOrb returned by ZapYourNawtiOrb Linden the zap is noted in the work list. Other Support process monitors how many times the orb has been zapped. After X times then Friendly greetings from YouAboutToWinAHoliday Linden. Next time you do this then your winning holiday will come true i am not exactly sure, but I don't think a Linden account can be ejected or sent home
  5. a note so the thread can come to a conclusion Sarzaza got a redelivery and it resolved the problem the issue had been present for some time for Sarzaza over multiple relogs i can't be totally sure of the cause, but my experience is that sometimes when a teleport borks and we are logged/crashed out, any HUD can break and go catatonic. The only fix in the No-Modify case is to get a new HUD
  6. i think the killer business metaverse application will be the multi-dimensional spreadsheet, able to turn it to any view. Then the multi-dimensional database. And for these to work then who ever owns the OS that enables this will own the business sector when go back in history, Lotus owned the 2D spreadsheet business up until Microsoft as the owner of the OS for business computers crushed Lotus by using their OS to their significant advantage. They did the same to WordPerfect as well unless Facebook build/own their own OS then they will get eaten in the same way ps. And if it isn't Microsoft it will be Google
  7. start with going to another region. Like go back to the Maitreya shop. Scripts are enabled there. And the HUD should work if it doesn't then get a redelivery of your Maitreya from the Redelivery terminal while you are there ps. I am at the Maitreya shop now. If you come then we can see what might be wrong
  8. check if scripts are disabled where you are try going to another parcel or region where scripts are enabled and see if that works for you
  9. i had a play with sparse array techniques for a way to preserve type in the simple 2-dimensional case (table with variable length records) example here:
  10. a conversation about sparse arrays here led to the topic about the inefficiencies of using strings to store variable length records in the form list table = [ "a|b|c", "d|e", "f|g|h|i", "y|z" ] which prompted me to have a play. A example of a general purpose 2-dimensional sparse array as a table with variable length records that preserve list element types i think is ok, but if it breaks I will fix it if you let me know fix: ACTION_FIND. Was finding last occurrence of pattern, not the first /* example of general purpose sparse array table with helper functions in row column format where a row (sublist) can have any number of elements (columns) row indexing is 0-based same as list for negative indexing use: rowcount-1, rowcount-2,rowcount-3, etc usage examples in touch_start below fix: ACTION_FIND. Was finding last occurence of pattern, not the first placed in public domain */ integer ACTION_APPEND = 0; // table += [some,data] integer ACTION_INSERT = 1; // llListInsertList integer ACTION_REPLACE = 2; // llListReplaceList integer ACTION_DELETE = 3; // llDeleteSubList integer ACTION_FIND = 4; // llListFindList list table; // data table list rows; // pointers to 1st element of each row integer currentrow = -1; // updated on action. is -1 when table is empty integer rowcount; // = length of list rows integer tablecount; // = length of list table. - list fetch(integer row) // llList2List { // fetch/get a list of elements (columns) in row if ((row > -1) & (row < rowcount)) { integer e = tablecount - 1; if (row < rowcount - 1) e = llList2Integer(rows, row + 1) - 1; return llList2List(table, llList2Integer(rows, row), e); } else return []; // return empty when row is out of bounds. bounds in [0 .. rowcount-1] } integer action(integer act, integer row, list data) { // default to -1 fail / not found. OnSuccess return currentrow integer result = -1; if (act == ACTION_APPEND) { if (data) { rows += [tablecount]; table += data; tablecount = llGetListLength(table); result = currentrow = ++rowcount; } } else if ((row > -1) & (row < rowcount)) // row in bounds else fail { integer r = llList2Integer(rows, row); integer e = tablecount - 1; if (act == ACTION_DELETE) { if (row < rowcount - 1) e = llList2Integer(rows, row + 1) - 1; else --currentrow; table = llDeleteSubList(table, r, e); rows = llDeleteSubList(rows, row, row); --rowcount; e = -(e - r + 1); result = currentrow; } else if (data) // fails when data is empty list { if (act == ACTION_INSERT) { table = llListInsertList(table, data, r); rows = llListInsertList(rows, [r], row++); ++rowcount; e = llGetListLength(data); result = currentrow; } else if (act == ACTION_REPLACE) { if (row < rowcount - 1) e = llList2Integer(rows, ++row) - 1; table = llListReplaceList(table, data, r, e); e = llGetListLength(data) - 1 - (e - r); result = currentrow; } else if (act == ACTION_FIND) { if (row) // can be memory expensive, but it does enable findNext e = llListFindList(llDeleteSubList(table, 0, r - 1), data); else // row = 0. search entire table e = llListFindList(table, data); if (~e) // not found when e = -1 { // get row number, disallow when found data pattern crosses row boundary e += r; integer continue = TRUE; for (r = row; (r < rowcount) & continue; ++r) { integer ee = tablecount - 1; if (r < rowcount - 1) ee = llList2Integer(rows, r + 1); if ((e >= llList2Integer(rows, r)) & (e < ee)) { // note fetch is called. This could be calculated result = llListFindList(fetch(r), data); if (~result) { // found wholely in row result = currentrow = r; continue = FALSE; } } } } } } if (act != ACTION_FIND) { // update rows pointers and tablecount for (r = row; r < rowcount; ++r) rows = llListReplaceList(rows, [llList2Integer(rows, r) + e], r, r); tablecount = llGetListLength(table); } } // return currentrow after action // return -1 when row out of bounds or not found return result; } emptyTable() { // empty table and reset supportives table = []; rows = []; currentrow = -1; rowcount = 0; tablecount = 0; } default { touch_start(integer num_detected) { llOwnerSay("BEGIN"); emptyTable(); // fill with some data. Data can be any type. // little strings used to easier see what is happening action(ACTION_APPEND, 0, ["aa", "ab", "ac"]); action(ACTION_APPEND, 0, ["ba", "bb"]); action(ACTION_APPEND, 0, ["ca"]); action(ACTION_APPEND, 0, ["da", "db"]); action(ACTION_APPEND, 0, ["ea", "eb", "ec"]); action(ACTION_APPEND, 0, ["fa", "fb"]); llOwnerSay("append: [" + llDumpList2String(table, ",") + "]"); llOwnerSay("rows: [" + llDumpList2String(rows, " ") + "]"); action(ACTION_DELETE, 1, []); llOwnerSay("delete row 1: [" + llDumpList2String(table, ",") + "]"); llOwnerSay("rows: [" + llDumpList2String(rows, " ") + "]"); action(ACTION_INSERT, 3, ["ma", "mb", "mc"]); llOwnerSay("insert new row 3: [" + llDumpList2String(table, ",") + "]"); llOwnerSay("rows: [" + llDumpList2String(rows, " ") + "]"); action(ACTION_REPLACE, 0, ["ya", "yb"]); action(ACTION_REPLACE, rowcount - 1, ["xa"]); llOwnerSay("replace row 0 and last row: [" + llDumpList2String(table, ",") + "]"); llOwnerSay("rows: [" + llDumpList2String(rows, " ") + "]"); list elements = fetch(3); llOwnerSay("fetch elements in row 3: [" + llDumpList2String(elements, ",") + "]"); // the pattern to find, can be any number of elements integer i = action(ACTION_FIND, 0, ["db"]); llOwnerSay("find row for [db] in entire table. Row = " + (string)i); i = action(ACTION_FIND, 4, ["da", "db"]); llOwnerSay("find row for [da,db] from row 4. Row = Not Found = " + (string)i); i = action(ACTION_FIND, 0, ["db","ma"]); llOwnerSay("find cross boundary fail for [da,ma]. Row = Not Found = " + (string)i); llOwnerSay("END"); } }
  11. it is possible but would involve your friend contacting Linden in the real world. Proofing their ownership of the account that established the group. Then asking for you to be made an owner of the group if the owner account hasn't been cancelled then if you were able to contact the person in the real world, you may be able to work out between you how to login their account and add you as group owner if you are unable to contact your friend in the real world then you are pretty out of luck
  12. yes you did and is great that you did sometimes when it a conversation starts to get a little bit too involved then can always take it to PM/IM
  13. is all good, but just be aware is quite a few forum police on there. The report button gets a lot of love and yes thats what we are trying to encourage in the scripting forum. Have a go at doing themselves
  14. naughty boy is against the Linden forum rules to promote our own products on the forum
  15. you are being silly I think buuut cool as is how is said where I am from like woo! that's cool as. I went to the beach today, it was cool as. Oh! that's a cool as car. I had a cool as dinner with my family ps. I did like the person who said they will sing for 10L in private. Who does that ?! Well that person does apparently. Which is cool as ! and who I am to say different 😺
  16. if the Metaverse was to become as ubiqituous then I think the winners will be Apple, Microsoft and Google (Android) when 3D view comes to the operating system UX then Facebook, etc will be relegated to the status they have now. Just another app running on the device
  17. about what else can be had for free i changed to audacy.com like any free-to-air radio it comes with adverts which I don't mind when is free listening what i really like about audacy is that it has some playlist stations for free (with adverts) which play music centred on a nominated artist. Like I have these 3 in my player https://www.audacy.com/paramoreradio/listen#schedule https://www.audacy.com/linkinparkradio/listen#schedule https://www.audacy.com/ohbabybaby/listen#schedule ohbabybaby is centred on Britney Spears. Get artists in the same general style. Like Jordin Sparks and Pussycat Dolls paramore and linkinpark centered on those bands they have quite a few other playlist stations in different styles another one is https://www.audacy.com/amyleesbitterinspirado/listen#schedule Amy Lee curated this station herself. Amy and the other artists she put into her playlist get a piece of the advert revenue. Which is pretty cool
  18. i like this as a first post. A plain example of using only llOwnerSay to show feedback messages roll it right back to the beginning and then in subsequent posts can introduce DEBUG like wrappers. I take on board Wulfie's thought about this. That while a DEBUG wrapper can appear pretty straightforward to the more experienced scripters, this is not true for a person new to scripting
  19. dang! on the bright side, i think you just found a persistent data storage for our parcel management application. Assume we don't care for music playing
  20. we can check the current url with as Prof suggested try sticking some random text in with llSetParcelMusicUrl i haven't got a own parcel at the moment to test it but I think that llGetParcelMusicUrl returns a empty string in the invalid/random case http://wiki.secondlife.com/wiki/LlGetParcelMusicURL
  21. yes. The recommendation has to work for any viewer including the standard Linden viewer out-of-the-box i agree with the suggestions that the first post should be stripped right down to the basics. The intended audience is people new to scripting. Then each successive post (which anyone can post) can introduce additional debugging features and techniques. With the understanding that should the reader never get beyond the first post they still have something useful to work with in any situation out-of-the-box i think that we should try here to come to a consensus on what that first post should contain. It needs to be simple, straightforward and plain speaking to the intended audience. Knowing that successive posts will be speaking to a wider audience
  22. the method to do this is: http://wiki.secondlife.com/wiki/LlSetParcelMusicURL if you want the others to be able to set the parcel music to anything they want then the script can offer a llTextBox for them to type in the url edit: what Qie said
  23. just some more info that I didn't think about at the time that url I posted is I am pretty sure a Shoutcast link Shoutcast have recently re-organised their business, and quite a few Shoutcast stations have been blocked where the station owner doesn't have a content licensing agreement to broadcast to a real world region i used to get all my radios from Shoutcast, but lots of them stopped working for me. So i changed to another provider and that url was the last of the previous
  24. i like Prof's thought to come up with a standard recommendation for new people. I like the idea of it being stickied as well i like Lucia's idea of passing a code to identify the event. There are 39 events so might have to go with whole number codes (1 thru 39) for the events in alphabetical order as the recommendation. Recommendation could be that custom codes start at 0x100 i agree with KT that the recommendation should be for DEBUG statement be flushed left on the line l think the message parameter should be a string. Examples can show how llDumpList2String can be used to pass multiple parameters i like Innula's mention of using DEBUG_CHANNEL so that the message goes to the Script Warning/Error window. Am not sure it should be a formal recommendation tho as DEBUG_CHANNEL is an open channel. Two or more new people working independently in a sandbox can result in seeing messages from sources not themselves. (hint! hint! Rider Linden. llOwnerSayDebug please!) i think DEBUG should be all caps, so the statement can be seen more easily i think the flag should be named DEBUG_ECHO as this is what the DEBUG command does. Echoes the message to the scripter's console (viewer) i think the echo should be preceded by the identifier "DEBUG"". So is clear to the new person that what they are seeing in their console is a DEBUG message putting all the thoughts so far together then something like integer DEBUG_ECHO = TRUE; DEBUG (integer code, string message) { if (DEBUG_ECHO) { llOwnerSay("DEBUG " + (string)code + " " + message); } } default { touch_start(integer num_detected) { DEBUG(38, llDetectedName(0) + " touched me"); } listen(integer channel,string name, key id, string text) { DEBUG(20, llDumpList2String([channel, name, id, text], " ")); } }
  25. some thoughts the Firestorm preprocessor can help with organising source code. Useful for inlining code snippets saved in secondary source code files states are most useful when we don't overdo them. A good use is when we want to initialise our application. A common initialisation is reading from a notecard one time. Example: default { ... read from notecard ... ... OnInitialiseComplete state main; } state main { } with multiple scripts then I think we need a compelling reason for doing this. A compelling reason can be a multi-avatar permissions application. A large in memory database in a second script, data pushed/pulled by our main script using link messages
×
×
  • Create New...