Jump to content

Miranda Umino

Resident
  • Posts

    411
  • Joined

  • Last visited

Posts posted by Miranda Umino

  1. Everythnig is already described in the wiki :

     

    llSetPos Specification Coordinates frame

     

    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

     

  2. 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

     

  3. 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 

  4. 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:

  5. 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

  6. 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 . 

     

     

     

  7. 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

  8. 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 .

    • Like 1
  9. 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");             }    }}

     

  10. 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

  11. 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 

  12. 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. 

     

  13. 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 llGetAgentListinteger 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 ?

     

     

     

     

  14. 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 

     

  15. 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 

     

  16. 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

     

     

  17. 30 textures are very few . Think about the torley's free pack textures or other free organizers used by builders  : several dozens of thousands of textures uploaded for free but who costed to the owner

    Local textures are more useful than temporary textures . Because you don t need to upload 2000 textures to pick up or choose which texture is the best  and it saves me some laggy texture organizers.

    You may show the result of your work , by a screen sharing program . There are a lot of  screen sharing programs who are frees with limitations but enough useful for second life

    With local textures + screen sharing program , it s perfect for me : the customer may see in real time when i pick up an another texture  . And we may even discuss together about the tint of the texture inside gimp/paint.net/photoshop 

     

    I have always thought it was more useful to test on the aditi grid when i need to test some textures before upload  than using these crap temporary textures.

    You don t force the buyer to be online when you upload your textures . With temporary textures you do.

    And there is always some boring sim crasher/griefer  who guesses/knows you upload temporary textures and who wants to annoy your work 

     

  18. Lydia Craig  write :

    As for graphic, yes they have gotten better but graphics cards in general have gotten better and this has absolutely nothing to do with Linden Labs, but rather with Nvidia and the rapidly growing game market in general that places constantly greater demands on video cards. 

     

    A graphic card gives the opportunities and the ways to create better graphics . But it doesn t improve the graphics if the game doesn t request them. If the game doesn t call the new features of the graphic card , the graphic card won t take the responsability . Have you seen an old 199x game call the physX  and cudas  from your new GTX560 Nvidia card ? Surely you have bad interprated your observations .

    A lot of computers are 64 bits CPU .. But the majorty of applications doesn t take profit for these 64 bits and work again to 32 bits . It s the same thing

    A program built with an old compiler won t use the new instructions of a new CPU . It s the same thing

    So you try to blame some people without proves and without rationnal argues  . 

×
×
  • Create New...