Jump to content

nikolsy

Resident
  • Posts

    23
  • Joined

  • Last visited

Everything posted by nikolsy

  1. thank you Oz Linden for the quick response. It actually makes logical sense to include that template. although for a personal project it was being a problem, that's why I asked.
  2. anyway, use one function or the other, the problem is the same. How to keep the UUID ?. Your partner has proposed an alternative, but to date, only theoretical, because I'm waiting for a practical example, it has never come. you understand me?
  3. on the other hand, squire of wulfie Reanimator, I sent this post to ask users if they know of any alternative solution. If we all think like you,then this forum does not exist, because we will send messages to Linden Lab. Fortunately, not everyone is like you, who responds in the simplest way.
  4. your partner wrote and ... of course, it's easy to say anything. I can say that when you disconnect from secondlife, then a prim with UUID:1111111-1111-1111-1111-0000000, becomes Santa Claus and with his sleigh he visits my house to give me a beautiful mansion as a gift then you tell me ;" Hey ..Do you have that script?" but..I disappear
  5. hi! When you use this function to send an email @, by default a template is added with data about the object that sends the email my question is ... there is any way to send the message without the default header I am aware of some functions to remove this template. But they are functions that apply within SL. for more information about llEmail, his wiki address is here llEmail - Second Life Wiki
  6. I am not surprised to find users like you, "Wulfie Reanimator" , unfortunately there are many of on the internet. Their behavior is identical, they say they know the solution to a problem, but when you ask them for the solution in particular, they disappear.
  7. On the other hand, about having a server and using a script that communicates with it to report changes and, from this system, maintain a permanent link ... It seems interesting, as long as the objective is reached. Let us remember the objective pursued. The communication between a prim and the outside of SecondLife, does not have to be lost, as a result of changes in the region. unfortunately for me, I don't have experience with servers, php programming.. . I use Windows as the operating system. But, if the procedure is not overly complicated, I can try setting up a server. You can provide me with some simple example?. (If possible, a free option for a first test.)
  8. thanks for answering. Now I have the impression that you have understood me. According to my previous examples where I compare both functions, for practical purposes, the llOpenRemoteDataChannel() function is more stable than llHTTPRequest() because if you have to make some modification in the script of the prim that provides the UUID, it does not change the UUID associated with the link, therefore, communication with the exterior of SL is maintained, without the need to use a server. I don't understand why Linden Lab advises against the use of llOpenRemoteDataChannel(). Rather, I think that the llHTTPRequest() function has to learn from llOpenRemoteDataChannel(), for example "copy a similar behavior. about maintaining supplied UUIDs". This was going to be a plus point
  9. an interesting difference between both functions 0º. you've two prims.. Each prim has a different function that is activated by clicking on the prim 1º. you touch the first click and the result is this llHTTPRequest() id = 00000000-0000-0000-0000-0000000 llOpenRemoteDataChannel() id = 00000000-0000-0000-0000-0000000 2º. you touch the second click and the result is this llHTTPRequest() id = 1111111-0000-0000-0000-0000000 llOpenRemoteDataChannel() id = 00000000-0000-0000-0000-0000000 3º. you touch the third click and the result is this llHTTPRequest() id = 1111111-1111-1111-1111-0000000 llOpenRemoteDataChannel() id = 00000000-0000-0000-0000-0000000 observe how that llHTTPRequest() changes with each click, instead the llOpenRemoteDataChannel is able to keep the previous UUID. this is the behavior i am looking for. Unfortunately, llOpenRemoteDataChannel will change its UUID when there are region changes I would like to know where that UUID is stored, is it in the region? if llOpenRemoteDataChannel is able to store the UUID in the region then it may be able to store in some other location
  10. well, thanks for answering but ....I think you are not understanding me 😢 I'm going to use an example with a more known function to try to be understood.. 1º. you've a prim in SL with a script that uses the llHTTPRequest() function 2º. this function generates an http:// for example this: http://example/lslhttp/d9eerpdlse-ddsa-erfs-dfer-34dfrswsg (note that the last part of the http is a UUID) 3º. This address can be used by functions external to SL(for example jQuery), to have communication with the prim from outside SL 4º. if you reset the script (for some reason), then llHTTPRequest() generates a new address, for example http://example/lslhttp/00000p00-000a-e00s-110r-300011sg 5º. the problem is that now you cannot communicate from the outside SL, the connection has been lost. 6º. the solution is to manually replace the new address in your code external to SL. if you've a single prim, it's not a big problem. But if you've more than 10 prims with different http://... then you've to replace many http: //... I hope the example has been understood... Now, I'm asking if there is any way for the function that generates the UUID, in this case llHTTPRequest(), not to generate a UUID new one every time a change originates. Is it possible to use the initial UUID..."forever"? === IMPORTANT !! Finally, remember that this is just an example to illustrate. Actually, I'm asking about the llOpenRemoteDataChannel() function .., but in a way, llHTTPRequest() and llOpenRemoteDataChannel() have a similar behavior, so, the solution for one function, maybe it works for the other
  11. what do you mean by this ?? do you know how to create a permanent identifier?
  12. In particular, I talk about this function llOpenRemoteDataChannel() (you can find information here -- wiki.secondlife.) This function generates a code very similar to a UUID, which is a channel for XML-RPC communication But that code, which I have called UUID to simplify, it is volatile, as I have already commented in the previous post. So, I ask if there is any way to create a permanent XML-RPC channel (a permanent UUID). I understand the difference between a permanent UUID, as I discussed earlier, the example of an object UUID, used for llEmail events. But these XML-RPC channels are mysterious. For example, when you use the llHttpRequest function, it generates a UUID. And if you reset the script, then llHttpRequest function generates a different UUID. Instead, the XML-RPC UUID is the same when you reset the script, but changes when it happens some conditions, for example: reset region, save in inventory, cross region Do you understand me?
  13. Hi. I am experimenting with some XML-RPC scripts and I have some questions. the problem is that these UUID channels are generated automatically by the script, but, they change automatically when the object goes into inventory the region has changes they cross to another region. Is it possible to create permanent channel UUIDs ?. Similar to the system used by email, where you only have to use the object's UUID (which is permanent)
  14. I have already read this recommendation before in this same topic. I have visited the page and it seems to me that it is written for people who are somewhat advanced in programming. I repeat that my situation is not that of an experienced programmer.
  15. thanks for the reply. I have downloaded OnLook viewer, and I am inside my openSim successfully. But I don't understand how to use your extra options. OnLook blog it seems outdated. Maybe it's a project that was done with another older version of OpenSim. I've also been studying other options like realXtend, but this option is too strange for me, I can't find the viewer and I don't have a tutorial. In conclusion, it seems that both projects are abandoned.
  16. Thank you all for responding so soon. It seems that LL is not very interested in having his viewers used outside his GRIDS, not even in OpenSim (localhost). What a shame.☹️ On the other hand.. NiranV Dean?, I'm not sure, but are you the creator of the Black Dragon viewer? If yes, it is a surprise to me because recently I am thinking of getting involved in a project to build my own viewer. A few days ago I sent this message to an existing topic in this forum to receive some guidance. In order not to divert the question related to this topic (the use of localhost or to be able to use viewers in OpenSIM), I thank you for visiting the other topic here to answer if you want. PD: By the way, the Black Dragon viewer is exciting ♥️
  17. It is true that some viewers contain some files in XML format that is related to the new GRIDS. But little can work if the interface does not have a drop-down option to select a new GRID.
  18. in the past it was possible to go to the viewer's shortcut, select properties and add a code similar to this -loginuri http://127.0.0.1:9000/ There are viewers like Black Dragon that do not have the option to choose GRID. I ask if there is any way to use the viewer in localhost...Or is it only possible to use in agni and aditi?
  19. Hi, my native language is not English, it is Spanish. I use openSim and I want to learn how to build my own viewer, particularly for use in OpenSim. I have been told that to build a viewer I only need to have knowledge of C #, Unfortunately I have no knowledge of C #. I have seen in video tutorials that many features are quite similar to other programs such as javaScript (which I do have knowledge) although obviously they are different languages. Not yet downloaded Visual Studio, because I would like someone to offer me guidance. What packages do I have to download with visual Studio? Is Visual Studio the best option or is there any other? What I want is to be able to design my own viewfinder options, because the vast majority of options that viewfinders have are not used by me. Has anyone tried to create a viewer and can you guide me?
  20. OK thanks!. You can forget the first script. I found another short script. This script works when the texture is applied to the faces of the prim. Here's an example of that I want get The problem now is that it is very difficult to configure. You do not know another way to create gifts, more simple?
  21. Hello, I need to modify some script commands. This script is designed to use a texture that takes inventory of the object, // :CATEGORY:Animated GIF // :NAME:MultiGIF_menu // :AUTHOR:Ferd Frederix // :CREATED:2012-10-18 09:27:59.460 // :EDITED:2013-09-18 15:38:57 // :ID:535 // :NUM:721 // :REV:1.0 // :WORLD:Second Life // :DESCRIPTION: // Add GIFS from the GIF 2 SL Animated Texture Program (http://www.free-lsl-scripts.com/Secondlife/Posts/gif/Create-Gif-in-Second-Life.htm) and touch the prim to change them // :CODE: integer SIDE = ALL_SIDES; // change to 1,2,3 for just one side // stuff you probably should avoid changing: //Effect parameters: (can be put in list together, to make animation have all of said effects) //LOOP - loops the animation //SMOOTH - plays animation smoothly //REVERSE - plays animation in reverse //PING_PONG - plays animation in one direction, then cycles in the opposite direction list effects = [LOOP]; // LOOP for GIF89 movies //Movement parameters (choose one): //ROTATE - Rotates the texture //SCALE - Scales the texture //Set movement to 0 to slide animation in the X direction, without any special movement. integer movement = 0; integer face = ALL_SIDES; //Number representing the side to activate the animation on. integer sideX = 1; //Represents how many horizontal images (frames) are contained in your texture. integer sideY = 1; //Same as sideX, except represents vertical images (frames). float start = 0.0; //Frame to start animation on. (0 to start at the first frame of the texture) float length = 0.0; //Number of frames to animate, set to 0 to animate all frames. float speed = 10.0; //Frames per second to play. // menu stuff integer listen_id; // int of the current listener integer menuChannel; // int of the channel number // from the menu system http://wiki.secondlife.com/wiki/SimpleDialogMenuSystem integer N_DIALOG_CHOICES; integer MAX_DIALOG_CHOICES_PER_PG = 8; // if not offering back button, increase this to 9 string PREV_PG_DIALOG_PREFIX = "< Page "; string NEXT_PG_DIALOG_PREFIX = "> Page "; string DIALOG_DONE_BTN = "Done"; string DIALOG_BACK_BTN = "<< Back"; integer pageNum; list DIALOG_CHOICES; giveDialog(key ID, integer pageNum) { list buttons; integer firstChoice; integer lastChoice; integer prevPage; integer nextPage; string OnePage; CancelListen(); menuChannel = llCeil(llFrand(1000000) + 11000000); listen_id = llListen(menuChannel,"","",""); llSetTimerEvent(60); N_DIALOG_CHOICES = llGetListLength(DIALOG_CHOICES); if (N_DIALOG_CHOICES <= 10) { buttons = DIALOG_CHOICES; OnePage = "Yes"; } else { integer nPages = (N_DIALOG_CHOICES+MAX_DIALOG_CHOICES_PER_PG-1)/MAX_DIALOG_CHOICES_PER_PG; if (pageNum < 1 || pageNum > nPages) { pageNum = 1; } firstChoice = (pageNum-1)*MAX_DIALOG_CHOICES_PER_PG; lastChoice = firstChoice+MAX_DIALOG_CHOICES_PER_PG-1; if (lastChoice >= N_DIALOG_CHOICES) { lastChoice = N_DIALOG_CHOICES; } if (pageNum <= 1) { prevPage = nPages; nextPage = 2; } else if (pageNum >= nPages) { prevPage = nPages-1; nextPage = 1; } else { prevPage = pageNum-1; nextPage = pageNum+1; } buttons = llList2List(DIALOG_CHOICES, firstChoice, lastChoice); } // FYI, this puts the navigation button row first, so it is always at the bottom of the dialog list buttons01 = llList2List(buttons, 0, 2); list buttons02 = llList2List(buttons, 3, 5); list buttons03 = llList2List(buttons, 6, 8); list buttons04; if (OnePage == "Yes") { buttons04 = llList2List(buttons, 9, 11); } buttons = buttons04 + buttons03 + buttons02 + buttons01; if (OnePage == "Yes") { buttons = [ DIALOG_DONE_BTN, DIALOG_BACK_BTN ]+ buttons; //omit DIALOG_BACK_BTN in line above if not offering } else { buttons = [ PREV_PG_DIALOG_PREFIX + (string)prevPage, DIALOG_BACK_BTN, NEXT_PG_DIALOG_PREFIX+(string)nextPage, DIALOG_DONE_BTN ]+buttons; //omit DIALOG_BACK_BTN in line above if not offering } llDialog(ID, "Page "+(string)pageNum+"\nChoose one:", buttons, menuChannel); } CancelListen() { llListenRemove(listen_id); } initAnim() //Call this when you want to change something in the texture animation. { integer effectBits; integer i; for(i = 0; i < llGetListLength(effects); i++) { effectBits = (effectBits | llList2Integer(effects,i)); } integer params = (effectBits|movement); llSetTextureAnim(ANIM_ON|params,face,sideX,sideY, start,length,speed); } fetch(string texture) { integer i; integer j = llGetInventoryNumber(INVENTORY_TEXTURE); for (i = 0; i < j; i ++) { string myTexture = llGetInventoryName(INVENTORY_TEXTURE,i); list data = llParseString2List(myTexture,[";"],[]); string name = llList2String(data,0); if (name == texture) { string X = llList2String(data,1); string Y = llList2String(data,2); string Z = llList2String(data,3); sideX = (integer) X; sideY = (integer) Y; speed = (float) Z; //llOwnerSay("Name=" + myTexture + " X=" + X + " Y=" + Y + " Z = " + (string) Z); if (speed) { llSetTexture(myTexture,SIDE); initAnim(); } } } } // Make a list of all bare names for the dialog list fetchAll() { list choices = []; integer i; integer j = llGetInventoryNumber(INVENTORY_TEXTURE); for (i = 0; i < j; i ++) { string texture = llGetInventoryName(INVENTORY_TEXTURE,i); list data = llParseString2List(texture,[";"],[]); choices += llList2String(data,0); } return choices; } default { state_entry() { } touch_start(integer who) { if (llDetectedKey(0) == llGetOwner() ) { pageNum = 1; DIALOG_CHOICES = fetchAll(); giveDialog(llGetOwner(), pageNum); } } listen(integer channel, string name, key id, string message) { integer where ; if ( message == DIALOG_DONE_BTN) { CancelListen(); return; } else if (message == DIALOG_BACK_BTN) { pageNum = 1; DIALOG_CHOICES = fetchAll(); giveDialog(llGetOwner(), pageNum); } else if (llSubStringIndex(message, PREV_PG_DIALOG_PREFIX) == 0) { pageNum = (integer)llGetSubString(message, llStringLength(PREV_PG_DIALOG_PREFIX), -1); giveDialog(llGetOwner(), pageNum); } else if (llSubStringIndex(message, NEXT_PG_DIALOG_PREFIX) == 0) { pageNum = (integer)llGetSubString(message, llStringLength(NEXT_PG_DIALOG_PREFIX), -1); giveDialog(llGetOwner(), pageNum); } else { //this is the section where you do stuff where = llListFindList(fetchAll(),[message]); if (where >= 0) { fetch(message); giveDialog(llGetOwner(), pageNum); } // add more buttons here } } } but I want to modify it to only have to use the UUID. May be used something like this: key delatextura = "e7888e00-d34f-899e-4bd0-1cfae51e320b"; default { state_entry() { llSetTexture(delatextura,ALL_SIDES); } } ..but where change this command? I also can be useful command to seek the UUID in a note, the note is within the inventory object.
×
×
  • Create New...