Miranda Umino
-
Posts
411 -
Joined
-
Last visited
Content Type
Forums
Blogs
Knowledge Base
Posts posted by Miranda Umino
-
-
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.
- Attached
- Child prims (non root prims)
- pos is a local coordinate relative to the root prim.
- 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.
- Sets the rotation of a child prim relative to the root prim
- Root prims (or single prim objects)
-
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
-
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
-
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:
-
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
-
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 .
-
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
-
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
-
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 .
- 1
-
For more informations about ANS (and direct delivery ) :
http://wiki.secondlife.com/wiki/Direct_Delivery_and_Automatic_Notification_System
-
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"); } }}
-
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
-
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
-
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.
-
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 ?
-
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
-
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
-
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
-
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
-
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
-
lllookat and llrotlookat may be useful too
-
it works fine for me .
Only "share with the group" in the general tab f the object is enough .
Strangely i have thought we needed to activate the same group to be able to move it , but we even don t need to avtivate the group
-
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
-
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 .
[Request/Help] My Hud needs simplizing
in LSL Scripting
Posted
I am sorry , but i don t make the work of others..
It s your job , dude ! Courage , stop to be lazy and work !