This partially solves a race condition when avatars revoke animation permissions on stand, but the message needs to travel through several scripts and, in case of extreme lag conditions, can attempt to stop animations after the revocation arrives, resulting in an error.
It still suffers a TOCTTOU race, as demonstrated by the reporter. That race is probably unsolvable.
Fixes#119. Big thanks to @ohhmye for reporting and investigating this bug.
- Add a Quick Summary for the impatient / tl;dr.
- Try to refer to both SL and OpenSim without discriminating.
- Clarify when to save to a box (step 5). A user was confused by this step.
- Make emphasis in "Compile successful/Save complete" to ensure they don't get an error, especially now that it will err if not saving in Mono.
- Add misc. notes.
BUTTON is documented to pass the UUIDs of the controller *and* the sitter when they are different, separated by a "|".
ADJUST is not documented to do that (yet), but it behaves that way.
Both behaviours are undesirable for generic scripts that respond to a link message without being specifically designed for AVsitter, because they don't expect the extra UUID. This can be seen as an AVsitter shortcoming, therefore we implement backwards-compatible workarounds.
For ADJUST, the AMENU argument's range has been extended:
0, 1 and 2 behave the same as before.
4, 5 and 6 behave as 0, 1 and 2 respectively, but also inhibit sending the second UUID.
For BUTTON, two special values have been added for the ID field: <C> and <S>, which will be replaced with CONTROLLER and SITTER respectively. For example:
BUTTON text|num|str
behaves the same as before, sending both CONTROLLER and SITTER in the UUID field when they differ; however:
BUTTON text|num|str|<C>
always passes only the UUID of the person who controls the menu. Similarly for <S>.
Follow-up to a65d7cd, which failed for the main menu. That's because current_menu is -1 for the main menu.
Since current menu is either -1 or points to a MENU entry, it's safe to add 1 to it and bring it to a correct range.
While on it, remove redundant `if`.
Per bug report by RiderDavis.
Fixes#95.
When the same BUTTON appears in different submenus, with different parameters, pressing it always picked the one that appeared first in the notecard.
Fix that by making the search start at the current menu.
Per bug report by AceyXx.
llGetSubString("abc", 3, -1) gives "abc"; llList2List(L, 1, -1) gives L when L has length 1. In general, llGetSubString or llList2List return the whole thing when the starting index is grater than the last element in the list.
There were a number of spots with that hazard, so fix all we found.
It should help ensuring that you have the right script contents when saving. It also provides a short description, to get a rough idea of what it's about.
The only code change is the product name in [AV]xcite! to add a TM symbol to Xcite!