Jump to content

KT Kingsley

Resident
  • Posts

    1,072
  • Joined

  • Last visited

Everything posted by KT Kingsley

  1. From Inara Pey's report on the last Simulator User Group meeting (https://modemworld.me/2020/06/16/2020-simulator-user-group-week-25-summary/),
  2. The mask cutoff value only seems to do anything in masking mode, where it specifies the level in the alpha layer that switches between fully opaque and fully transparent.
  3. If you're asking about altering the emissivity dynamically, you'd need a series of textures with different alphas. It's the texture's alpha that's used rather than the face's.
  4. Register your bot-alt as a scripted agent and end any worries you might have about illegally gaming your traffic count. To keep it logged in at all times you can either run it on a computer you own that's always on, or you can subscribe to a bot hosting service that runs it for you on their own computers. But don't expect to find a free bot hosting service. One consideration is the need to relog after a region restart or a viewer crash. A hosting service should do this for you automatically. There used to be a text only viewer that also had this feature, but that's long gone. I don't know of any current viewers that will let you do that, but I'm not that familiar with most current viewers. Moving around and following you are things that can be done using scripts. Talking can be sort-of faked (but easily seen-through) using scripts. A bot-orientated viewer (if one exists) could do this, and may even be able to interact with IMs. A bot hosting service might also provide this facility.
  5. @Mazidox Linden, the grid status update just posted refers to main channel rolls on Tuesday as a switch in the usual day for the Main Channel to roll. I think this may be a case of recycling the previous week's message when the main and RC channel rolls did actually switch days.
  6. I've just seen this happen, too, along with Oz's earlier posts, though the one of his on this page is still visible to me.
  7. In Firestorm you can use Area Search (from the World menu in the top bar) to find the object (searching by it's name, or your own name as owner or creator), then right click and select Edit and/or Zoom.
  8. @Oz Linden: long, long ago it was mooted that all experiences might become grid-wide (or something like that). Nothing has come of this, and I suspect even if it were to happen it would require the experiences to be specifically enabled by individual land owners. Given how extremely useful the key-value store feature could be, may I suggest that it be detached from the experience scope, and enabled across the grid, except, perhaps, where specifically disabled by individual land owners. Edit: is this worth a JIRA feature request?
  9. You don't need an external server to communicate using HTTP within SL. However, using HTTP, the problem is that the target URL is not fixed and needs to be made known to any object anywhere on the grid, hence the frequent use of a fixed external server to supply this information. The function llEmail sleeps the script after sending the email, so unless there's a requirement for a rapid back and forth of messages, you can use a second script just to send the email when it's asked to do so via a link message from the first script. The first script can then get on with whatever it's doing, which can include receiving emails from remote clients. I've never done it myself, but the above suggests it'd be possible for a remote client to send an email requesting the server's URL, to which the server could respond by using HTTP or email, using a URL supplied by the client in it's email message, or by using the email address supplied in the email event. When both objects have each other's URLs they can establish a fairly fast communications channel using HTTP.
  10. In Firestorm, try Preferences/Privacy/LookAt/Don't send my selection target hints.
  11. When you send the text to the second script you have to wait for that script to reply with the result. You'll know when the second script has replied because it'll trigger a link_message event. It's only when you check that link message that you'll know the result, so anything you do that depends on that result has to wait until the link_message event. default { listen(......., string message) { If( pointer == 0) //listening main menu buttons { if(message == "enter number") { llTextbox... Pointer = 1; button = 1; } else if( message == "enter string") ....... else if(message =="enter float") ...... else // this equivalent to if(message=="enter again") lltextbox.... } else //when pointer=1; { if(button==1) { llMssageLinked(.....,messag); //send text box result to second script //if what you want to do here depends on the result of the conversion //to an integer it should be done in the link_message event, where you //learn what the result is. If it's something you're going to do //whatever the result, it's fine here ? ? ? // Here I wanna do something ??? } else if(button == 2) ........... else if........ ........... } } //result comes back from second script link_message (integer sender, integer number, string message, key id) { If(not integer) //the failure of the conversion should be flagged somehow //e.g. number == 0, message == "error" { Pointer = 0; enterAgainMenu(); //it gives menu with button ["enter again"]; } else { llOwnerSay("number = "+message); pointer = 0; mainMenu(); // it gives back the main menu again } } } I hope this makes sense.
  12. If you're using the number parameter in the link messages from the second script to return the converted integer, and the value returned is only zero when there's been an error, have the main script check the return value, and if it's zero, pop up the error dialog there. So the link_message and listen events in the main script would look something like this: link_message (integer sender, integer number, string message, key id) { if (number == 0) { llDialog (user, "Invalid integer.", ["Enter again"], channel); } else { //do whatever you're going to do with the valid integer } } listen (integer channel, string name, key id, string message) { if (message == "Enter again") { //do the text box thing again } //all the other listen stuff }
  13. Please forgive this digression, but I have to ask how do regressions happen? Is it that the old buggy code accidentally gets pulled back into the build at the expense of the fixed code? Or does some completely new code somehow set up a chain of events that triggers the bug in a new and unexpected way?
  14. If you want it to work with avatars other than the owner of the object, then yes, but with the additional requirement that the colliding avatar must have joined the experience. If it's something you only need for yourself, then llTeleportAgent does work for the owner without any other requirements.
  15. Replacing touch_start with touch_end seems to work for me. touch_start has a reputation for being a bit iffy sometimes. Incidentally, to be properly proper, you should check that PERMISSION_ATTACH has actually been granted by checking with the function llGetPermissions, or in the run_time_permissions event if (llGetPermissions () & PERMISSION_ATTACH) llDetachFromAvatar( ); or run_time_permissions (integer permissions) { if (permissions & PERMISSION_ATTACH) llDetachFromAvatar( ); }
  16. Yes, and yes. If you want to allow constantly repeating code to be interrupted you can put it in a timer event. The timer will persist over changed states, but you'll need the appropriate code in the timer event for each state. The code in the timer event must first finish before another event is triggered.
  17. I see that's what I've ended up with, rather than the Builder's Brewery package. Which is fine by me, and explains the absence of the =BB= part of the name. Anyway, here's the GitHub link for it: https://github.com/Makopo/sublime-text-lsl.
  18. Thank you so much! The GitHub repository does show a README file, but it's in .md format, with which I'm unfamiliar, and which appears virtually unreadable in Notepad. Even now there's no README file in my installation folder after installing the LSL addon. And I did try the search in the package list, but I guess I typed in lower case, and got a huge list of entries that included the letters L, S and L but mostly separated by other letters, so that may be why I missed "LSL". And who'd've thought that "selecting =BB= LSL" actually meant "selecting LSL".
  19. I've installed Sublime Text and I've installed SublimeLinter. But when I... open Sublime Text open the command palette via Tools > Command Palette select Package Control: Install Package select =BB= LSL ... I can't find =BB= LSL in the list of selections. Does anyone have any idea what's going wrong here?
  20. Thanks again, Innula. I've followed those instructions, but nowhere in the list can I see "=BB= LSL". I think I'd better start a thread specific to this. Edit: resolved. See this thread:
  21. Thanks, Innula. Can you, or anyone else, remember where the =BB= LSL .sublime-package file can be found?
  22. According to the requirements on the Builder's Brewery GitHub page you link to, Sublime Text build 4073 or greater is required, but the link there takes me to build 3211, with no 4073 in sight. And 3211 doesn't seem fit with the installations instructions suggesting using "Install Package Control..." from the Tools menu: that option isn't there. Any ideas as to where I might find a build 4073 or greater? Or where I'm going wrong? .
  23. The limitations and extents of string/key interchangeability are one of those things nearly all of us learn about the hard way.
  24. When the list List is created the value is stored as a string, so when you look for the key returned by llDetecedKey a match is not found. So, either specifically cast that key as a key when you create the list (which you can't in a global declaration, so you'd have to build the list in the state_entry event) list List; default { state_entry () { List = ["n","n", (key) "aa430197-791d-480d-90ed-5c0b4588416d"]; } touch_start(integer total_number) { list TOUCHER = [llDetectedKey(0)]; integer found = ~llListFindList(List,TOUCHER); if(found){llSay(0,"Found");llSay(0,(string)found);} else{llSay(0,"Not Found");llSay(0,(string)found);} } } or cast the return from llDetectedKey as a string when you search for it in the list. list List = ["n","n","aa430197-791d-480d-90ed-5c0b4588416d"]; default { touch_start(integer total_number) { list TOUCHER = [(string) llDetectedKey(0)]; integer found = ~llListFindList(List,TOUCHER); if(found){llSay(0,"Found");llSay(0,(string)found);} else{llSay(0,"Not Found");llSay(0,(string)found);} } } Edit: Actually, you could globally declare that List like this: key me = "aa430197-791d-480d-90ed-5c0b4588416d"; list List = ["n", "n", me];
×
×
  • Create New...