Jump to content

Miranda Umino

Resident
  • Posts

    411
  • Joined

  • Last visited

Everything posted by Miranda Umino

  1. integer anim_index;default{ state_entry() { anim_index = 16; llSetTimerEvent(2.0); } timer() { if( (anim_index == 16) && (llGetTime() >= 5.0) ) { llOwnerSay("Blink!"); llSetTextureAnim(FALSE, ALL_SIDES, 0, 0, 0.0, 0.0, 1.0); llSetTextureAnim(ANIM_ON|REVERSE, ALL_SIDES, 16, 16, 0.0, 2.0, 0.5); //play blink in reverse & end on the idle frame llResetTime(); } else { llOwnerSay("pong"); } }} Is it what you are expecting ?
  2. Check better how is modified the variable anim_index Oh , and write : if( (anim_index == 16) && (llGetTime() >= 5.0) ) to avoid confusions with if( anim_index == ( 16 && (llGetTime() >= 5.0)) ) You could do some mistakes of evaluation order if you keep using to forget some "()"
  3. Firstly replace all the costly strings : if(comp == ".Mat1"){llRegionSay(FullSetRCV,"FullMat1");}if(comp == ".Mat2"){llRegionSay(FullSetRCV,"FullMat2");}if(comp == ".Mat3"){llRegionSay(FullSetRCV,"FullMat3");}if(comp == ".Mat4"){llRegionSay(FullSetRCV,"FullMat4");}if(comp == ".Mat5"){llRegionSay(FullSetRCV,"FullMat5");}if(comp == ".Mat6"){llRegionSay(FullSetRCV,"FullMat6");}if(comp == ".Mat7"){llRegionSay(FullSetRCV,"FullMat7");}if(comp == ".Mat8"){llRegionSay(FullSetRCV,"FullMat8");}if(comp == ".Mat9"){llRegionSay(FullSetRCV,"FullMat9");}if(comp == ".Mat10"){llRegionSay(FullSetRCV,"FullMat10");}} by if( llGetSubString(comp, 0, 3) == ".Mat"){llRegionSay(FullSetRCV,"Full" + llGetSubString(comp , 1, -1));} Same analog method for the "FrmMat*" , "StsMat* etc ... You will earn 4 kb for a trivial job Next , notice that the user-defined functions FrameMat, FullSetMat are nearly the same , except : * the channel used by llRegionSay * the suffix of the string "FullMat" or "FrameMat" You may factorize this in a function for the 3 functions in adding some parameters to the function Notice too you have a parameter in these user function ( string name) but you don t use it Notice too , always in these functions , that in FrameMat function , the function returns the string "i" . But this variable is local and is never set . Same with the user defined SidesMat function : it returns the string "data " . But this variable is never set . In many different places of your script , you return data , but data is empty .( SetSlction, OptSlction, LensMat etc ... )
  4. I am sorry , but i don t make the work of others.. It s your job , dude ! Courage , stop to be lazy and work !
  5. Everythnig is already described in the wiki : llSetPos Specification Coordinates frame Root prims (or single prim objects)Attached pos is a local coordinate relative to the attach point. Not attached pos is a region coordinate. Child prims (non root prims) pos is a local coordinate relative to the root prim. llSetRot Caveats If the prim is attached, then this function offsets the rotation by the avatars rotation. If the prim is not the root prim it is offset by the roots rotation. llSetLocalRot Summary Sets the rotation of a child prim relative to the root prim
  6. With windlight settings , llGetSunDirection is probably useless for what you want to do . The sun in the viewer is different of the sun in the sim ... Nevertheless you may force the windilight settings if your users use RLV
  7. As said by Rollig , it s imposible . It s possible to know where is the avatar who has talked . So of course , if the avatar is > 20 meters away , he could n t said or whispered ; so he has shouted . But you can t know if , for instance , an avtar at 5 meters around has whispered , talked , or shouted
  8. For me , teleports within the cube triggers collision events Nevertheless , in my opinion you don t need neither sensor , neither collision .. When someone requests a demo house , control with a flag initially to TRUE If the flag = TRUE , rez the demo house . Initiates a timer ( normally the time allowed for the visitors to use the demo . For instance 15 minutes) After he has rezzed his demo house , set the flag at FALSE If new people come and requests a demo house , you will control with the flag . But as it has changed to false , you won t rez .. When the timer ends , unrez the demo house , delete the timer and set the flag to TRUE ETA : waves rollig .. hi hi :matte-motes-wink-tongue:
  9. If you want to rez something relative to a position , you need to compute the position add an offset multiply this offset by the rotation For instance , to have an object rezzd one meter in front of the avatar , no matter how he is turned : vector offset = < 1,0,0>;llRezObject( llGetInventoryName(INVENTORY_OBJECT, i), // name of object llDetectedPos(0) + offset * llDetectedRot(0) , // position ZERO_VECTOR, // velocity llDetectedRot(0), // rotation 1 // start parameter ); Nevertheless, in practice it s a bad way . It s because you may rez some objects only 10 meters around the rezzer . And to add , it fails silently .. So generally , we rez at a fixed position, and the rezzed object has a script to move to the final desired position . By this way , you are not limited at 10 meters
  10. Your try to hide the defaukts of TPVs behind the fake opensource excuse TPV are open source .. Of course , because Linden Lab is open source ... Their code may be viewed .. Of course because the license given by Linden Labs impose it . But it doesn t mean that everybody who uses open source is honnest . More and more developpers use open source , and because of their success, more and more developpers of virus , frauders , phishers , etc use open source . . http://news.cnet.com/8301-1009_3-10356421-83.html To add , even if the code is available , you can t talk for every users , not educated to computer science , and tell them : "read the source if you don t trust them" . You are able to read in 2-3 hours the code of Firestorm ? Congratz , dude .. I have the source of the Linden lab viewer in my computer , and it takes 60 megabytes only for the sources .. You read very fast .. I am not convinced that the majority of users could read as fast as you some obscure C++ code . You don t read the sources as fast as a poetry book You will explain me too how some newbie in computer can read as fast the code in 2 hours and all a bunch of developpers are unable to read in 2 years the code to fix their so numerous bugs ....no comment ... I m sorry but i am able to do a big difference between some serious developpers of open source as the developpers of emacs , firefox, apache etc ...and some developpers who develop maybe 1 month , maybe 1 year , sometimes for a viewer , sometimes for an another viewer , even sometimes for linden labs , sometimes for onyx viewer , sometimes for cryolife ...and often who disappear of the scene ... so often ... For your information , about the IPS , the website need to know your ip ... to answer to the request .. But i didn t see any web brower collecting some IPS from their users and making a database with it . ( except when they collect carsh reports , who is even not activated by default ) . When Mozilla collects some money to their financment , it s because of the advertisements , and of the financement from other sites as google who detect the user_agent . They don t sell a collection of IPs to someone because they don t have it . A viewer is not a website .. it s a kind of browser .. So it was not its role to collect some IPs and to transfer them to an another server .
  11. Oh yes ! .. You need to recall your requestpermissions when you attach of course It s because the owner of the object has changed when it s attched temporary to the other avatar
  12. bad idea , suzanne .. very bad idea to share a password An another possibility is to use a textbox . you wear an atachement or un an hud scripted . you touch it , a text box is displayed , you type your message in the text box , you validate , your script sends your message to the object without displaying it in the local chat Same thing if you use an HTML form on a media on prim @sassy : you forget too fast : to refresh your mind http://alphavilleherald.com/2010/05/emerald-site-security-broken-data-mining-shocks-linden-lab.html
  13. float g_delay_after_rez = 5.0;float g_delay_after_attach = 60;default{ touch_start(integer num_touches) { llRequestPermissions( llDetectedKey(0), PERMISSION_ATTACH ); } run_time_permissions( integer vBitPermissions ) { if( vBitPermissions & PERMISSION_ATTACH ) { llAttachToAvatarTemp( ATTACH_LHAND ); } else { llOwnerSay( "Permission to attach denied" ); llDie(); } } attach(key avatar) { if ( avatar ) { llSetTimerEvent(g_delay_after_attach); } } on_rez(integer rez) { llSetTimerEvent(g_delay_after_rez); } timer() { llDie(); }} Check this if it s that you are looking for You may replace llDie par llDetachFromAvatar too .
  14. For more informations about ANS (and direct delivery ) : http://wiki.secondlife.com/wiki/Direct_Delivery_and_Automatic_Notification_System
  15. For http://grooveshark.com/#!/ , this intenal browser is already unable to play the sounds . If the internal browser can t , your media on prim can t . QTWebkit has not been updated . And even in its last version , QTwebkits is late for the actual standars of HTML . Some sites play mp3 now with HTML5 balises . They are unknown for the intrenal viewer . So for the medias on prim too . But let s do a simple : go to http://mp3.com who promotes some artists . Choose a song you like , right click on the play button and copy url . You will have for instance http://freedownloads.last.fm/download/34369868/Modern%2BMystery.mp3 1st way : you may directly set the url of the media on prim with this URL advantage : no conflict with several technologies disavandtage : can t know when the song song has finished to play 2nd way : go for instance to http://www.strangecube.com/audioplay/ Paste the url of your mp3 . choose the other options if you wish ( autoplay and all these things ) Copy the embedding code You will have some kind of code as it <!-- Generated by AudioPlay Online Generator (http://www.strangecube.com/audioplay/) --><div><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="30" height="30"><PARAM NAME=movie VALUE="http://www.strangecube.com/audioplay/online/audioplay.swf?file=http://freedownloads.last.fm/download/411799275/Wind+In+Her+Hair.mp3&auto=yes&sendstop=yes&repeat=2&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playpause"><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent><embed src="http://www.strangecube.com/audioplay/online/audioplay.swf?file=http://freedownloads.last.fm/download/411799275/Wind+In+Her+Hair.mp3&auto=yes&sendstop=yes&repeat=2&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playpause" quality=high wmode=transparent width="30" height="30" align="" TYPE="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object></div><!-- End of generated code --> Go to your favourite editor and replace all the double quotes by simple quote ( or escape them from " to \" ) You will have some kind of code as it <!-- Generated by AudioPlay Online Generator (http://www.strangecube.com/audioplay/) --><div><object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='30' height='30'><PARAM NAME=movie VALUE='http://www.strangecube.com/audioplay/online/audioplay.swf?file=http://freedownloads.last.fm/download/411799275/Wind+In+Her+Hair.mp3&auto=yes&sendstop=yes&repeat=2&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playpause'><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent><embed src='http://www.strangecube.com/audioplay/online/audioplay.swf?file=http://freedownloads.last.fm/download/411799275/Wind+In+Her+Hair.mp3&auto=yes&sendstop=yes&repeat=2&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playpause' quality=high wmode=transparent width='30' height='30' align='' TYPE='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object></div><!-- End of generated code --> Encloded your string with the strings "<html><body>" and "</body></html>" Create one script to serve the page in the media of prim For instance string html_base; // Our playlist : a strided list with 3 elements : the url of the mp3 , the title of the track, the name of the artis // Maybe it will be safer to verify the special characters , quotes and all these things. not testedlist g_playlist =[ "http://freedownloads.last.fm/download/30892127/Galanteria.mp3", "Galanteria", "Muchi" , "http://freedownloads.last.fm/download/411799275/Wind%2BIn%2BHer%2BHair.mp3", "Wind in her hair", "Motorama", "http://freedownloads.last.fm/download/1589252/Hahahaczyk.mp3", "Hahahaczyk", "Akurat", "http://freedownloads.last.fm/download/62581279/Cidad%25C3%25A3o%2Bde%2BPapel%25C3%25A3o.mp3", "Cidadao de Papelao" , "O Teatro Magico", "http://freedownloads.last.fm/download/38422548/What%2527s%2BWrong%2BWith%2BMe%2B%2528Nouvelle%2BVague%2BRemix%2529.mp3", "What s Wrong With Me", "Skye", "http://freedownloads.last.fm/download/14320335/Etrezomp-ni%2BKelted.mp3", "Etrezomp-ni Kelted", "Omnia", "http://freedownloads.last.fm/download/120677617/Rock%2527n%2527roll%2BHall%2BOf%2BFame.mp3", "Rock n roll Hall Of Fame", "pornophonique", "http://freedownloads.last.fm/download/100653832/All%2BMy%2BPain.mp3", "All My Pain", "Otklonenie" ]; //We could copy paste the embeded code drectly in the string of the html page . // But this function will help us to avoid to have to rewrite the same html code several times // if we need several players in the same page // Note it s not lever to have a lot of flash in the same page . // Generally we change them dynamically with some javascript and an anchor // INPUT : urlMP3 the url of the mp3 to send as paremeter for the flash object // OUTPUT : a fragment of html code containing the flash player with tthe url of the mp3string generateEmbededObject(string urlMP3){ // <!-- Generated by AudioPlay Online Generator (http://www.strangecube.com/audioplay/) --> return " <div><object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0' width='30' height='30'><PARAM NAME=movie VALUE='http://www.strangecube.com/audioplay/online/audioplay.swf?file="+ llEscapeURL(urlMP3)+ "&auto=yes&sendstop=yes&repeat=2&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playstop'><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent><embed src='http://www.strangecube.com/audioplay/online/audioplay.swf?file="+ llEscapeURL(urlMP3) +"&auto=yes&buttondir=http://www.strangecube.com/audioplay/online/alpha_buttons/negative&bgcolor=0xffffff&mode=playstop' quality=high wmode=transparent width='30' height='30' align='' TYPE='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object></div>" ;//<!-- End of generated code -->} // this function returs the html page as string // INPUT : urlMedia : the url served by the prim // playList : a strided list of 3 elements , url of the mp3 to send as parameter // of the flash player , title to display in the page, artist to display to the page // OUTPUT : the string conaining the html code of the page to serve string generateHTML(string urlMEdia, list playList){ string string_ ="<html><style>th{ background-color:#bf00e6;}tr { border-style:solid; border-width:1px; background-color:#b0e0e6;}.artist { font-size:110%; }.title { font-style: italic; color:red; }</style><body><table><tr><th/><th>Title</th><th>Artist</th></tr>"; integer n = llGetListLength(playList); integer i = 0; while ( i < n ) { string_ += "<tr><td class='track'>" + generateEmbededObject(llList2String(playList, i)) + "</td>" + "<td class='title'>" + llList2String(playList, i+1) + "</td>" + "<td class='artist'>" + llList2String(playList, i+2) + "</td></tr>" ; i+=3; }string_ += "</table></body></html>";return string_;}string g_url; // INPUT url : the url of the media of prim // OUTPUT : nothing . creates or update the media of prim show(string url){ integer error_code ; if ( g_url == "" ) error_code = llSetLinkMedia( LINK_THIS, 0, // Side to display the media on. [PRIM_MEDIA_AUTO_PLAY,TRUE, // Show this page immediately PRIM_MEDIA_CURRENT_URL,url, // The url currently showing PRIM_MEDIA_HOME_URL,url, // The url if they hit 'home' PRIM_MEDIA_HEIGHT_PIXELS,512, // Height/width of media texture will be PRIM_MEDIA_WIDTH_PIXELS,512]); // rounded up to nearest power of 2. else if ( g_url != url ) error_code = llSetLinkMedia( LINK_THIS, 0, [ PRIM_MEDIA_CURRENT_URL,url , PRIM_MEDIA_HOME_URL,url ]); if ( error_code != 0 ) { llOwnerSay("ERROR SET MEDIA " + (string) error_code ); } else { llOwnerSay( "MEDIA HOME URL AND CURRENT URL CHANGED " + url); g_url = url; } } default{ state_entry() { g_url = ""; llRequestURL(); } on_rez(integer n) { g_url = ""; llRequestURL(); } http_request(key id, string method, string body) { if (method == URL_REQUEST_GRANTED) { llOwnerSay("URL GRANTED"); show(body + "/"); } else if (method == URL_REQUEST_DENIED) { llOwnerSay( "URL DENIED " + body); } else if (method == "GET") { llSetContentType(id,CONTENT_TYPE_HTML); llHTTPResponse(id,200, generateHTML( g_url, g_playlist) ); } } changed( integer c ) { if ( c & CHANGED_REGION ) {// we want that the our HUD continues to play if we change the region,// even if the media of prim is invalid// if the user refereshes it .. it s dead .. llOwnerSay("CHANGED REGION"); } }} Set up your media options of your viewer correctly ; Turn your medias on , rotate the prim to the right face , and wear it as hud. Buid too an another prim to link with your hud to let the user reduce it on the screen or display it To have a hud who plays several playlists, it will be better to have the flash player replaced by javascript . Here one instance The site archive.org tells who must embed an Iframe by the code <iframe src="url" width='500' height='400' frameborder='0'></iframe> We define an id to be able to change this iframe dynamically by javascript . We will change the src element So we create by instance <iframe id='frameArchive' width='500' height='400' frameborder='0'></iframe> and the javscript will react to an event by document.getElementById('frameArchive').src=url; // our list of playlists .// in fact, the links are the links of the main page .// In this site (archive.org , the documentaion of the site // tells that http://archive.org/details/xxxxxxx// has a generated page http://archive.org/embed/xxxxxxx// that we can set inside an iframe// We will replace the URLs in the javascriptlist g_urls =["http://archive.org/details/1920s-billyMurry-101-110","http://archive.org/details/ShostakovichSymphonyNo.5","http://archive.org/details/SibeliusSymphonyNo.4","http://archive.org/details/1920s-gusArnheimHisAmbassadorHotelOrchestra-41-44","http://archive.org/details/JohnMcCormack];string LSLList2JSArray(list l){ return "['" + llDumpList2String(l,"','") +"']" ;}string generateHTML(string urlMEdia ){ string string_ ="<html><head><script>URLS ="+ LSLList2JSArray(g_urls)+";index = 0;function firstPlaylist(){ url = URLS[0].replace('details', 'embed'); url += '?playlist=1&autoplay=1'; document.getElementById('frameArchive').src=url;}function updatePlaylist(delta){ index+=delta; if ( index >= URLS.length ) index = 0; if ( index < 0 ) index = URLS.length; url = URLS[index].replace('details', 'embed'); url += '?playlist=1&autoplay=1'; document.getElementById('frameArchive').src=url;}</script></head><body width=512 onLoad='firstPlaylist()'><p>Click on the next button to change playlist</p><p> <input type=button onClick='updatePlaylist(-1)' value='Previous' /> <input type=button onClick='updatePlaylist(1)' value='Next' /> </p><p><iframe id='frameArchive' width='500' height='400' frameborder='0'></iframe></p></body></html>";return string_;}string g_url;show(string url){ integer error_code ; if ( g_url == "" ) error_code = llSetLinkMedia( LINK_THIS, 0, // Side to display the media on. [PRIM_MEDIA_AUTO_PLAY,TRUE, // Show this page immediately PRIM_MEDIA_CURRENT_URL,url, // The url currently showing PRIM_MEDIA_HOME_URL,url, // The url if they hit 'home' PRIM_MEDIA_HEIGHT_PIXELS,512, // Height/width of media texture will be PRIM_MEDIA_WIDTH_PIXELS,512]); // rounded up to nearest power of 2. else if ( g_url != url ) error_code = llSetLinkMedia( LINK_THIS, 0, [ PRIM_MEDIA_CURRENT_URL,url , PRIM_MEDIA_HOME_URL,url ]); if ( error_code != 0 ) { llOwnerSay("ERROR SET MEDIA " + (string) error_code ); } else { llOwnerSay( "MEDIA HOME URL AND CURRENT URL CHANGED " + url); g_url = url; } } default{ state_entry() { g_url = ""; llRequestURL(); } on_rez(integer n) { g_url = ""; llRequestURL(); } http_request(key id, string method, string body) { if (method == URL_REQUEST_GRANTED) { llOwnerSay("URL GRANTED"); show(body + "/"); } else if (method == URL_REQUEST_DENIED) { llOwnerSay( "URL DENIED " + body); } else if (method == "GET") { llSetContentType(id,CONTENT_TYPE_HTML); llHTTPResponse(id,200, generateHTML( g_url ) ); } } changed( integer c ) { if ( c & CHANGED_REGION ) { llOwnerSay("CHANGED REGION"); } }}
  16. I *not* want to play parcel music, thanks. I want to create a HUD which plays an mp3 file. Does the mp3 need to be embedded in a web page? No, you may enter directly the URL of the mp3 file if you wish . Nevertheless , only mp3 is recognized directly in this way . The Ogg format are not played . To add , you could n t advance the position in the mp3 file . If you want to be able to advance forward and backward , the best way is to use a flash as the player of yahoo or the player of google
  17. Maybe you may try llList2List before to store the result of llgetagentlist in a variable . Logically you will have more than 64kb but maybe it doesn t give the time to the memory manager to crash your script . Probably it s very unsafe . I remember may times some scripts crashing when we use as it I am just giving this instance of script , but i don t hint it . It s not a solution list keys;list dummy;integer half;default{ link_message(integer sender, integer num, string s, key k) { if ( num == 1000 ) { llOwnerSay("======= 1st Half ========"); llScriptProfiler(PROFILE_SCRIPT_MEMORY); llOwnerSay("before="+(string)llGetUsedMemory()); half = llGetRegionAgentCount() / 2; keys = llList2List( llGetAgentList(AGENT_LIST_REGION, []) , 1, half ); llOwnerSay("after="+(string)llGetUsedMemory()); llOwnerSay((string)llGetListLength(keys)+ " keys"); llScriptProfiler(PROFILE_NONE); llOwnerSay("This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory .") ; keys = []; llMessageLinked(LINK_THIS, 1001, "", "" ); } else if ( num == 1001 ) { llOwnerSay("======= 2nd Half ========"); llScriptProfiler(PROFILE_SCRIPT_MEMORY); llOwnerSay("before="+(string)llGetUsedMemory()); half = llGetRegionAgentCount() / 2; keys = llList2List( llGetAgentList(AGENT_LIST_REGION, []) , half + 1, -1); llOwnerSay("after="+(string)llGetUsedMemory()); llOwnerSay((string)llGetListLength(keys)+ " keys"); llScriptProfiler(PROFILE_NONE); llOwnerSay("This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory .") ; keys = []; llMessageLinked(LINK_THIS, 1002, "", "" ); } else if ( num == 1002 ) { llOwnerSay("======= Full ========"); llScriptProfiler(PROFILE_SCRIPT_MEMORY); llOwnerSay("before="+(string)llGetUsedMemory()); keys = llList2List( llGetAgentList(AGENT_LIST_REGION, []) , 1, -1 ); llOwnerSay("after="+(string)llGetUsedMemory()); llOwnerSay((string)llGetListLength(keys)+ " keys"); llScriptProfiler(PROFILE_NONE); llOwnerSay("This script used at most " + (string)llGetSPMaxMemory() + " bytes of memory .") ; keys = []; } } touch_end(integer n) { llMessageLinked(LINK_THIS, 1000, "", "" ); }} WIth a 70 avtars sims : sometimes it s ok : [11:50] Object: ======= 1st Half ======== [11:50] Object: before=7036 [11:50] Object: after=11220 [11:50] Object: 39 keys [11:50] Object: This script used at most 11220 bytes of memory . [11:50] Object: ======= 2nd Half ======== [11:50] Object: before=7036 [11:50] Object: after=11016 [11:50] Object: 38 keys [11:50] Object: This script used at most 11086 bytes of memory . [11:50] Object: ======= Full ======== [11:50] Object: before=7036 [11:50] Object: after=15200 [11:50] Object: 77 keys [11:50] Object: This script used at most 15200 bytes of memory . sometimes it s dnagerous [11:51] Object: ======= 1st Half ======== [11:51] Object: before=7036 [11:51] Object: after=11310 [11:51] Object: 41 keys [11:51] Object: This script used at most 11380 bytes of memory . [11:51] Object: ======= 2nd Half ======== [11:51] Object: before=7036 [11:51] Object: after=15660 [11:51] Object: 39 keys [11:51] Object: This script used at most 15660 bytes of memory . [11:51] Object: ======= Full ======== [11:51] Object: before=7036 [11:51] Object: after=15388 [11:51] Object: 80 keys [11:51] Object: This script used at most 15458 bytes of memory . It seems be important to leave the event or to wait a few moment between 2 calls two llgetagentlist to have the memory freed
  18. Nevertheless the solution told by this JIRA is not a solution ... Neither exact , neither satistfying The "solution" doesnt solve some memory issues caused by other functions llGetParcelPrimOwners, llCastray , llGetLinkPrimitiveParams and in a general way , every functions returning a list The "solution" doesn t give a way to have some exploitable, functionnal , useful datas . What could i do with 20 random keys of agents present in my sim if there are 100 agents ? For instance , if i want to use llgetagentlist to check who are the agents in my sim who meet a particular criteria , how could i do it with a truncated list ? How i do for instance to know all the avatars with an agentsize below of 1m , if the list returened by llgetagentlist is truncated ? Second instance , this function has been required , for instance to check who has entered in a sim and who has left : how could i know it with a truncated list ? Of course , i agree to secure our scripts . But this solution is not helpful. If it was possible to use some callbacks of user defeined functions it would be nicer. For instance , with a callback who returns always a boolean , and have the key of agent in parameter integer mycallback_has_no_display_name( key avatar){ string name = llGetDisplayName(avatar); if ((name == "???") || (name == "")) return TRUE; else return FALSE;}llRegisterCallback("mycallback_has_no_display_name");list results = llGetAgentList(AGENT_LIST_REGION, "mycallback_has_no_display_name" );And internally llgetagentlist applies our callback for each element of the list . The list "results" could contain only the avatar with no display names.
  19. Wrong problem : firstly 10kb is few when your script is limited to 64kb secondly there is absolutely no reason tu compile new scripts with new functons in LSO thirstly you are not obliged to keep the 10kb . You need them only when you parse the answer of llgetagentlist . So the memory will be freed after the next event . Save only the keys who interest you. fourthly there are other finctions as http://wiki.secondlife.com/wiki/LlGetParcelPrimOwners who may return 100 values . In fact , its a strided list , so llGetParcelPrimOwners may return 100 keys and 100 integers , so 1.5 X more than llGetAgentList . Nobody has complained about this . Nobody has requested about llGetParcelPrimOwners to limit the size of returned datas. And its more frequent in-world to have 100 different prim-owners in a sim ( for instance in a sandbox , or in a group ) . To have 100 avatars in a sim is less frequent llCastray may return a strided list of 256 elements , so , with additional flags 256 keys , 256 postion vectors , 256 integer , and 256 normal vectors . It s s something around 40kb llGetLinkPrimitiveParams may return more than 10kb if you call as llGetLinkPrimitiveParams(LINK_THIS,, [options, PRIM_LINK_TARGET , link2, option2, PRIM_LINK_TARGET, link3, options3 .. PRIM_LINK_TARGET,link255, option255] ) with a 256 prim linked Only with 4 prims a call as l = llGetLinkPrimitiveParams(LINK_THIS, [ PRIM_TEXTURE, ALL_SIDES, PRIM_LINK_TARGET , 2, PRIM_TEXTURE, ALL_SIDES, PRIM_LINK_TARGET , 3, PRIM_TEXTURE, ALL_SIDES, PRIM_LINK_TARGET , 4, PRIM_TEXTURE, ALL_SIDES] ); may take 10kb . It depends of the number of faces of your prims ( sphere with one face or mesh / tortured torus with 8 faces) Firthly , you have some additional filters to llgetegentlist to limit to a parcel . How many sims have 100 avatars on . And how many parcels have 100 avatars on ? I don t see a lot of them in-world To forbid and to limit scripters are bad . This limitation to 20 is not meaningful : Which avatars will be returned ? The nearest of the prim ? It s long and costly for the sim . The fisrtsly laphabetically named agents ? Some random keys ? It s useless for the scripter to have 20 random agents in the region. And more stupid if you want to limit to 20 the results of llGetAgentList is the absence of pagination. Something like list llGetAgentList( integer scope, list options, integer page ); Why to have some keys about a subset of agents , when there is no rule to determine this subset , and there is no way to switch from a subset to an another subset ? I don t see any interest But even if some pagination would exist , the datas won t be coherent : if Linden Lab adds some pagination to this function , how will be coherent the datas returned between the call for the first page and the call of the second page if people enter and leave in the sim between the two moments ?
  20. An annoying point with these #includes is that the preprocessor comments the old code and it reaches the limit size of the source sooner . I don t want to waste my time to rewrite completely all my scripts when i have a small modification to do
  21. So , nothing new .. zero changes . Because it has already existed a long time ago and it has been deleted after Some people try to tell they make some new features when they only bring back the past and old features
  22. Use your max bandwidth to the Maximum ( 10000 kbps) by default . If you use other programs connected to internet , set a lower value to share your connection between second life and the other program . That s all . Everything else is wrong Test 1 : i have an internet connect with 800 kbp /seconds ( it s my router who tells it , and it s a bit lower when i test with speedtes ) i set the max badnwidth to 100 kbps : i verify with the statistic tools control+shift+1 my bandwidth displayed inside second life Results : the connection is capped , the textures takes awfully long time to display the FPS are high , but who cares ? everything is either grey (textures ), either invisibles (alpha , meshes, scupts) !!! What is the goal to have a high display who doesn t display anything ? Test 2 : i set max bandwidth to 10000 kbps i verify with the statistic tools control+shift+1 my bandwidth displayed inside second life Results : You think it will be 800 kbps ( the absolute max of my internet connection ) but it s wrong . The bandwidth displayed in the statistics window goes around 1700 kbps ! I guess that these bandwidth inside second life is a bandwidth of uncompressed datas . But the datas between SL and my viewer may be sometimes compressed . My FPS fall of course . But only while it loads . And who cares ? It s temporary , and after some seconds my FPS go back to the normal value . It s normal that more your viewer has to load from the nework in a short time , more your viewer needs to work and process these datas and takes some time . But it s its job . Don t busy your CPU with your viewer if your viewer is lazy
  23. It s certainly too much strict for your use of xytext. llescapeurl doesn t encode these characters [A-Z, a-z, 0-9] But you have many characters who are neither inside A-Z ,a-z,0-9 but who can be displayed by xytext (dot , space , quote etc .. ) You may use too some variants of xytext too for special characters Genarally these variants given in the wiki library use the same template of code and build an array of chars (often named gCharIndex) who are recognized by their algorithm
  24. We do some rollbacks on the test servers now ? As people are so scared about a JIRA , why not to do rollback on on the aditi servers tomorow ? And after tomorrow , why not to do rollbacks on developpers servers ? And why not to ask to Havok to rollback their product too ? ... And this , only because this incompatibilty is an incompatibilty who can happen while the deployement but who could n t happen after a complete deployement ? This situation is absurd . There are too many whiners in second life
  25. lllookat and llrotlookat may be useful too
×
×
  • Create New...