Jump to content

GManB

Resident
  • Posts

    237
  • Joined

  • Last visited

Everything posted by GManB

  1. Oh, what a wish! KT, Thanks for the test code. Looks perfect. Hexadeci, Looks like you are creating a really useful tool. For this project I am pretty far down the road with FURWARE and use non-8-face prims and touch queries extensively so I will stay with it and keep your work in mind for the next project! Thanks everyone!! G
  2. I agree.The option to just test the return <<somehow>> and if it's not displayable use the username seems, at this point, a decent choice. But, will look into Media as Que suggests. G
  3. DoteDote, I might be missing something. Let's say the string that is a display name and returned from llGetDisplayName() that we see in most places looks like 'Vincent Ten'. (actually the icent and en are small upper-case characters). When I output that to FURWARE I get 'V?????? T??'. Now, in the string those '?'s have a numerical value of, (probably) two bytes.. Let's say the first '?' after the 'V' has the value 0xBEEF. If I understand what FURWARE is doing is mapping that value to some index in CHARS to get the character. Now, no matter what we do the binary values returned by llGetDisplayName() will include 0xBEEF as the second character. So the FURWARE code, I would imagine, checks the value of the characters and if it is larger than the largest index in CHAR then returns a '?' to be output to the prim face. So, to make this work wouldn't I have to both change CHARS AND manipulate the string I give FURWARE to be within the largest index of CHARS? Or, change the code of FURWARE to accommodate a larger CHARS array so that 0xBEEF is less than the max. IDK, seems like a lot to do to get the display name on a set of prim faces and fraught with potential potholes. Or maybe I am missing something. Maybe the answer is to just convert the returned string to ascii. There are some conversion routines I found on the web. Whatever conversion though it would seem to have to be subjective, e.g., replace any character that *looks* like and 'e', with 'e'. G
  4. the av in question isn't online atm so llGetDisplayName() silently does nothing, as documented. So I tried llRequestDisplayName() and displayed the results from the dataserver event in chat and in the FURWARE box. Looked correct in chat but had the '?'s in the FURWARE box. So, seems the issue is with FURWARE... I think tried llRequestUsernameI() and as one would expect that looked fine both places. I guess I will write a function that takes the av key and tests the return from llGetDisplayName() to see if any character is non-ascii and if not returns that result or if so returns the result of llGetUsername(). Although this seems less than desirable. Anyone have any ideas about how to test? Or maybe just use username always (ugh). Or any ideas/suggestions at all. Thanks, G
  5. I'm writing some code for a person who wants to create a table game that uses pairs of notecards with questions and answers. He would like to be able to sell extensions to the game by offering new and different parts of notecards. Of course he doesn't want these distributed to anyone other than the purchaser and also doesn't want the purchaser to be able to cut and past sets into new notecards. I am wondering if ppl here feel it is reasonable protection to suggest that he simply distribute the new pairs of notecards set to 'no mod' and 'no trans' and maybe even 'no copy'. Creating a dialog for the purchaser to select pairs of notecards will be straightforward. I'm currently just thinking about have the pairs named in such a way to easily pull them out of the Contents of the object. Thanks for any suggestions. G
  6. I can see his display name correctly in his profile when I bring it up and the characters don't look too odd. Seems like I should be looking for a code bug then. (I have had a few of those on this project lol). G
  7. When I call llGetDisplayName() with a valid key for an av in the region I get back, for this one particular av, 'V?????? T??'. He says there are non-ascii characters in his display name. Reading the doc for llGetDisplayName() I see it can return '?' if it cannot return the name. But, given that I get back the correct first character of both his first and second display name I wonder what is going on. I am outputting the name to prim faces using FURWARE. He says he has not seen his name displayed with the '?'s before. Do I need to think about UFT-8? Or use a dataserver request via llRequestDisplayName()? Thanks as always, G
  8. Ok, thanks. That clears up my misunderstanding! Thanks, G
  9. This isn't my dialog that I crated with llDialog(). It is the automatically generated one from llRequestPermissions(). However, do the same semantics apply? I.e., no event is generated to the script calling llRequestPermissions() for any of the three cases, No, Block, or dialog times out and disappears. (I know the doc says the dialog doesn't time out but maybe the are referring to ones generated by llDialog()). My guess is that I'll just have the script wait for a while and then call llDie(). G
  10. llRequestPermissions() documentation says the permissions dialog never times out. Yet, it does. When requesting PERMISSION_ATTACH permission users are given three choices in the dialog, Yes, No, Block. Selecting 'Yes' generates a run_time_permissions event with a perm flag of PERMISSION_ATTACH. How/what/where can I catch an event if the user answers 'No' or 'Block' or, worse yet, just lets the dialog expire? Thanks, G
  11. Ah, I think I finally see the point you are getting to. It doesn't matter that the board rezzed a HUD as a result of a message from seat x because the HUD can be unbound. It isn't youare saying, necessary to bind a HUD to an av until the HUD gets the av key and requests permission. I actually do something similar in a different version of this code where the participating avs are not sitting, e.g,. at an event. The board just rezzes a bunch of HUDs and the avs click on one to make the binding between HUD and av. It's a little more bookkeeping but more general, I agree. G
  12. The rezzing of a HUD could proceed at very different rates in different viewers, no? Say the order of sitting is av A then av B. The board gets two listen events from the two seats and order doesn't matter here because the incoming message contains both the seat number and av key. So board rezzes two HUDs in some order. But, when the HUDs fully rez and respond to the handshake the events could arrive at the board in a different order from that which the board rezzed them, just due to user system/viewer relative speeds. By passing the seat number in the llRezAtRoot() call there is no possibility of mis-ordering because the binding of the seat number to ak key is atomic in the board script and the HUD always includes the seat number in its messages to the board. G
  13. Wulfie, I, think, I actually need the opposite (and I have experimented with on_rez), Here's more detail on what I am trying to accomplish, in case someone sees an issue or there a simpler way. . There are up to 17 objects involved, 8 chairs (sit targets), a main scoreboard, and up to 8 HUDS. The chairs tell the board the chair number and the av key. The board rez's the HUD and tells it (via the on_rez start parameter) the chair number. This binding of chair number (and, thus, av key) and getting the seat number to the HUD happens atomically in a listen event in the board so I don't have to consider ordering of avs sitting and the binding to a HUD. My first implementation did indeed use lots of lists to keep track of things but it was gettign complicated. Once I learned how to reliably get a datum from the rezzer to the rezzzee the code became much simpler and straightforward. What, I guess, I am concerned about is the temporal ordering of events in the underlying runtime if, e.g., two av's sat almost simultaneously) the board would get the events in some order. Now the binding of seat to av key is ok, that's fixed but the board, without some tricky bookkeeping, doesn't know the order of arrival. Then, the rezzing of HUDs occurs in the order the sit events arrived but I am unsure about whether the underlying system guarantees the ordering of the object_rez event. By passing the seat number to the HUD on rez I eliminate this temporal ordering issue ( I think ).. G
  14. I am seeing examples where llResetScript() is called in on_rez and this seems to give nice stability to the code. Is this practice common and is it good? I would really like to pass an integer to an object being rezed by another object so that the second object can be identified by that integer by the rezzing object to use for bookkeeping. However, the start_param of on_rez is lost, I have read and experienced, when llResetScript() is called even if I save start_param in a global in state_entry. The same issue happens with llGetStartParameter(). Thus, it seems that calling llResetScript() in on_rez eliminates the possibility of passing in an integer. Is there another place to call llResetScript() that would allow me to input the integer or is there another method of getting something to an object being rezzed? Thanks, G
  15. At first I got the same UUID even with substantive changes. However, after I closed the script window and re-opened it I would get a new UUID after each save (substantive or not). I read something in the UUID info page about modified assets not getting new UUIDs until they are derezzed or taken. BTW, I tried launching the external editor from the SL viewer and see filenames of the same form. G
  16. Hmmm The changes I made were in '//' comments so a recompile would not technically be necessary on the save but how would the system know that except to recompile. I will try again with substantive changes. G
  17. Ah, interesting... could very well be... I wonder what 'name' SL/Firestorm is giving the external editor? G
  18. Things are getting interesting. If I: rez a cube click new script in contents paste in your script execute it save it I get, as you say, different output after each save HOWEVER, if: in the 'Scripts' direction in Inventory I right-click and choose, 'New Script' open in in-world paste in your script save it rez a cube drag the script from Inventory into the Contents of the cube execute it make a change save it execute it make another change save it execute it I get the SAME output after each save. Please try it to make sure I am not nuts So, if you can replicate my test results we can say that once a script is in Inventory AND (although this isn't tested so far) is in the Contents of and Object then it IS immutable, i.e., it's UUID stays the same through changes and saves. G
  19. Thanks Rya! I will check into the axis conversion in export preset. That may save me from having to go through the steps in Setting and then flipping the object and freezing transformations. I am now wondering if this preset is specific to an export type. I also export in FBX to upload into other tools. Not sure if having the Z-axis up for those exports would have consequences. G
  20. Wulfie, I am not seeing this for scripts. create a new script, 'Test Script' double click on it in Inventory to open in-world click 'Edit' to open in Sublime Test (ST) the file on disk is /private/var/folders/_v/vdj2_b7j51x295f8g0nrc2080000gn/T/sl_script_aa42bbcc13ecaf0cd475b5de99afb1a1.lsl I assume that between '....script_' and '.lsl' is the UUID of this asset (the script, Test Script I just created. Make some changes in SL and save Command-S changes appear in the in-world window with Test Script in it. close ST close in-world window with Test Script double-click on Test Script in Inventory to open it in-world all changes are still there, which is normal click 'Edit' to open in ST the file on disk is /private/var/folders/_v/vdj2_b7j51x295f8g0nrc2080000gn/T/sl_script_aa42bbcc13ecaf0cd475b5de99afb1a1.lsl same as before if we make the assumption that the UUID of the asset is aa42bbcc13ecaf0cd475b5de99afb1a1, then it seems that the asset isn't immutable This leads to two outcomes, either the asset is immutable as you say and aa42bbcc13ecaf0cd475b5de99afb1a1 is just some temp ID that SL uses for this file or aa42bbcc13ecaf0cd475b5de99afb1a1is the UUID and the asset is mutable. I just thought of a way to test some of this.. closed everyting renamed script open in-world Edit name in ST still have aa42bbcc13ecaf0cd475b5de99afb1a1 in it. So, if the script is immutable and new versions get new UUIDs then what is aa42bbcc13ecaf0cd475b5de99afb1a1? and what binds aa42bbcc13ecaf0cd475b5de99afb1a1 to the script? UUID changes and name changes yet aa42bbcc13ecaf0cd475b5de99afb1a1 sill remains in the name given to ST??? G
  21. I am using Sublime text to edit in-world scripts and notecards. First, I have observed that unlike a notecard with gets a new UUID each time is is modified and saved it seems scripts always have the same UUID, is this observation correct? Second, the issue: Assume I have made changes to a script in Sublime and not saved it to it's in-world version because the changes are such as to not allow a clean compile. Now the viewer crashes or I get logged out of SL from some reason (this happened last night due to some region difficulties). Now I can safe the version in Sublime (with the weird UUID-based filename to a weird temp place on disk. But, when I restart the viewer and log in and open the script in-world I cannot save the Sublime version to the in-world version, the connection appears to have have survived the viewer restart. AND, if I click 'Edit' on the in-world version it will overwrite all the changes in the Sublime version (which is dangerous behavior). The only solution I have found so far is to copy the Sublime version, paste it over the in-world, click 'Save' (which, although it does not compile still saves it), close the file in Subliime, and click 'Edit' Any ideas on a cleaner workflow? Anyone know Sublime well enough to suggest an option to keep the truth copy of the script on my system (MacOS) instead of in-world. BTW, while writing this and doing some testing I discovered a workaround. If I save a script from Sublime that will not compile it does actually get saved in-world with all the errors. So, I'll keep saving often even when making non-compilable changes. The in-world version will then be mostly up-to-date if the viewer crashes or I get logged out. I don't like this workaround cause I often forget to save (I use auto-save on all tools that support it). Thanks, G
  22. I think I have it figured out. In Maya the coordinate axes are slightly different from SL. Maya has, looking toward the 'front' of an object, X-axis left/right, right being positive. Y-axis, up/down, up positive. and Z-axis in toward the object, inward negative. If I am building a complex or multi-object item I go through a few steps to get the axes the same as in SL. For this simple flat plane I didn't do the axes swap. Went back in, swapped the axes and re-imported to SL and I could rez on it. Apparently, a mesh having its local axes different from world axes in SL seems to confuse the code in the runtime that does rezzing. Always good to find out the cause of weirdness! Thanks! G
  23. I am surprised it is a common thing. I will have to investigate more. I'll give the inworld prim a try! Thanks, G
  24. I created a simple thin cube in Maya with a stone texture. Nothing out of the ordinary at all. But where ever I put down this floor I cannot rez anything on it. If I lower the floor through what ever surface is under it I can rez. If I try to rez just a smidgen off the floor everything works. I've used this floor in two places now, on a building platform above my house and on the Playa of Burn2. Same oddness happens in both locations. Any ideas at all? This seems very weird. Thanks, G
×
×
  • Create New...