Tuesday, December 18, 2018

RealRestraint update to v1.31

Hi !

Here is the latest update to v1.31 to all the products in the RealRestraint line, mostly with bug fixes but also with several interesting improvements.

There are many changes, but the main highlights of this update are :

- A fix for the RLV not always being detected upon login. I will explain below the reasons for this bug and the fix so that other designers may have an idea how to track and fix it in their own products too, because this is not restricted to RR.

- The RealRestraint_HUD object no longer being mandatory. This was a long-standing wish of mine, and to make the HUD optional was no trivial task, but now you will be able to completely do without it if you are using a viewer that implements RLV 2.9 completely (not Firestorm at the time of this writing, but the original RLV and Kokua do as well as several other viewers) and if your arms cuffs are not set to "Block". This will therefore let you save an attachment slot even if you are using a RR blindfold.

As for every RR update, you are given the choice between "update" and "replace".

"Update" means the updater merely updates some of the scripts contained inside the main object of your set (for example the right wrist cuff in the Police Handcuff set) and does not touch anything else. It may, depending on your product, add, remove or rename some items inside it but it won't change the shape of the object nor any texture, nothing.

"Replace" means that the product is deactivated, i.e. the contents inside its root prim are removed, and you are given a new one. This is the preferred option but it comes at the cost of having to resize it all again. There are some good news however : only the main object of your set is deactivated, the rest is untouched so you can still use the old secondary objects (left wrist cuff for example) with the new set you are given. This works... except if you are getting a replacement specifically to get new secondary items, of course. For example, if the update modifies the left wrist cuff, you will obviously not use the old left wrist cuff but the new one, which you will have to resize.

The update folder contains two scripts named "Copy Shape" and "Paste Shape", that you can use to transfer the shape of an old object to the corresponding new object. For example, if you don't want to adjust your new left wrist cuff because you've spent a long time adjusting the old one, you can drop the Copy Shape script in the old one and the Paste Shape script in the new one after putting them both on the ground, and if all goes well you will have very minor adjusting work to do, if at all (the scripts do some guesswork as to how each part of the new object has to adjust itself compared to its old counterpart, and it works perfectly unless other parts are too close in position, rotation and size). The way to use the scripts is described here, but I'm afraid the videos are broken because YouTube removed them for some reason and I didn't have a backup. I'll have to shoot them again soon.

So, should you update or replace ?

This is a difficult question and it depends entirely on what product(s) you are updating, what changes have occurred in this update for this product, and whether you really want such or such feature. If a feature requires a replacement but you really don't want to replace and you can do without the new feature, you can safely stick to a soft update.

This is why each feature below has a little code that indicates whether it requires an update or a replacement, and if it requires a replacement, it indicates whether you need to use the whole new set, or if you can use the main object of the new set and keep using the secondary objects of the old set. This is the case for updates that involve changes to scripts contained in a child prim of the main object (for example, a script inside the cuff part of the right wrist Police Handcuff, knowing that the root prim itself is actually an invisible cylinder). Here are the codes :

- "U" : You only need to soft-update, meaning choosing "UPDATE" while wearing your object, this is the nicest option for you.

- "G" : You need to soft-update but you must rez your object on the ground instead of wearing it because some some items inside it that are no-copy need to be updated, most likely animations. If you don't rez your object on the ground, the updater won't break it, it will just notify you that it could not replace some of its contents and that you'll have to retry.

- "R" : You need to have your main item replaced (for example, the right wrist cuff of a set of handcuffs), but you can keep using the older secondary items even though you received new ones, so you don't have to resize it all again. They are not deactivated upon replacement, only the main item is, and this particular enhancement does not break the link between both.

- "A" : You need to replace your whole set, even the secondary items are modified in this one, because this change impacts some or all the objects included in your set. If you keep using the old secondary items, chances are things won't work properly.

Attention, if you are updating your Restrained Elegance set, Police set or Vixen set, the table assumes that you have the mesh versions of them. If you don't, you will need to get a replacement in all cases.

Also, if your product, whatever it is, is v1.26 or below, you will need to replace it in all cases.

On top of the code explained above, each modification included in this update has its own unique identification, like A1, A2, B1 etc. In the table at the end of this post, you will find for each product (one per row) and for each modification (one per column) what choice is the best, update or replacement.

For example, modification "A1" (the fix for RLV not being detected) only requires a soft update ("U") regardless of the product you are updating.

A. All restraints

A1 (U) : Make sure the RLV is detected on log on every time.

This bug was weird and I suspect a change in the simulator software that happened a few months ago and that broke the ability of an object to speak on the chat while you log on. I mean, it had worked flawlessly for years before then. This also disturbs the ability of an object to detect your RLV, as it simply sends an owner message to your viewer and expects a response within a given time. But if the viewer cannot hear the message due to the object not sending it (but not knowing that it did not send it), the restraint waits for the response until it times out and decides there is no RLV on your side.

The fix is simply to send the RLV request once (that's llOwnerSay ("@version=xxxx") ) and then a second time 15 seconds later. In several months of testing, this has never failed to detect my RLV, even under heavy lag and/or with a very poor connection. So if you own a brand of products that need to detect the RLV of your users, I recommend you do it the same way : send one RLV version request at the moment the object rezzes, then another one if the first one times out, some time later. That way, if the RLV is detected right away, fine, the user cannot detach (for example) the product. Otherwise, the second request should act as a fail safe and avoid configuring your product for non-RLV usage while the user clearly has the RLV active and let them think there's a bug in your product.

A2 (U) : Make the RealRestraint HUD completely optional.

Without RLV, this HUD is used for 3 tasks :
- Block your clicks to prevent you from interacting with the environment (arms restraints only).
- Force you to stay in Mouselook by turning your screen black when you're in third person view (arms restraints only).
- Cover your screen with a more or less opaque prim (blindfolds only).

If your RLV implements the RLV API v2.9 (that's the version introducing vision restriction spheres used by blindfolds), and in the case of blindfolds if you set the Blindfold plugin to "Method: RLV" (because you have the choice there), then the restraint won't even rez a RealRestraint HUD anymore and if you are already wearing one, you will be able to detach it and it won't nag you for another one. But when you switch to "Method: HUD" (for blindfolds) or if you activate "Block" (for arms restraints), a HUD will be rezzed and will attach to your screen like before, and become non-detachable until those options are cleared.

This change therefore lets you spare one attachment slot by not wearing the RealRestraint HUD when it is not needed.

A3 (U) : The RealRestraint HUD used to update its own physical status once per second while seated. Not a big deal, but an unnecessary resource consumption nonetheless.

A4 (U) : You could be completely locked out from your own arms cuffs by doing the following :
- Turning /77 off.
- Restricting speaking on private channels, especially channel 77, thanks to the Control plugin.- Restricting "touch self" with the Touch plugin.
- Locking and setting a timer.

When the timer would end, the key would return to you but you wouldn't be able to access the menu of your cuffs.

The fix makes the main script send a signal to Control when the timer ends, and Control no longer restricts you if you have your own key and there is no timer set.

A5 (U) : RR API additions for third-party plugins.

- New link messages from Lockable :
  * -41 : Timer just ran out (ID field is irrelevant).
  * -42 : Timer was just set (ID field contains the time in seconds), also sent right after a -41.
  * -43 : Same as -21 but sent only on request with a "Data" link message sent to Lockable. The NUM field is different so a third-party plugin relying on -21 messages to count time will not be confused by one of them being sent on request from another plugin.

- New link messages to Lockable (strings are case-sensitive, don't include the quotes)) :
  * "Data" : Tells Lockable to resend its latest -21 link message, but with a -43 number instead.
  * "Names" : Tells lockable to resend its latest "Locks" message (not "ForceAnim" to avoid displaying an "Autoref" button on the main menu of a restraint that does not animate the avatar).
  * "Name" : Tells Lockable to set its keyholder display name to the one specified in the ID field. Attention, Lockable does not check that it matches the display name of the avatar whose UUID is the keyholder, you can set what you want.

- Specification of the -21 (and -43) link message sent by Lockable every 10 seconds (the new fields are Keyholder UUID and Name at the end, after a comma) :


- Aliases for "Lock", "Tie", "Unlock" and "Untie". Now when you send a "Cmd:Lock" link message to Lockable, it will work even in the case of a rope (which would expect a "Cmd:Tie" message). Same with "Unlock" and "Untie".

- Aliases for "Take keys", "Tighten", "Leave keys" and "Loosen". Same thing.

Please note that all that is explained above in this modification does not impact you as a user directly, but those changes are relevant to third-party plugin creators, so some of those third-party plugins may later issue updates that require you to update your RR products to v1.31. Don't worry though, if you're updating your RR products to get the other modifications and enhancements, you will get this one automatically too.

A6 (U) : Autolock sometimes forgot the names of the available locks until a reset. Now Autolock sends a "Names" link message (see modification A5 above) upon reset to request the list of locks from Lockable.

B. Blindfolds

B1 (U) : Locking to "Medium", "Thick" or "Opaque" then unlocking or locking to "Blurry", "Very thin", "Thin" or "Lock" used to clear most of the RLV restrictions but not all (for examples @shownames wasn't cleared). Now all of them are cleared as they should be.

C. Gags

C1 (U) : When turning Autorefresh off while wearing another RR gag, the former will do "as if" it were unlocked so that the other gag will animate your mouth, regardless of its type and lock (remember, RR gags negotiate among themselves to find out which one must garble and which one must animate so there is no conflict).

C2 (U) : Fixed the "Anim" field going blank which made the gag stop animating you until it was reset. This was due to another gag superseding this one and then being unworn before it.

C3 (R) : Ball gag & Ring gag : The neck piece is now non-detachable when the gag is just locked with "Lock". If this bothers you, you must detach the neck piece before the gag is locked.

C4 (U) : Added an "OOC" switch in the Gag plugin menu to allow Out-Of-Character chat when gagged (it is off by default). Attention : if you are using the original RLV, this fix requires that you use RLV or above, because prior versions would not let OOC go through at all (this was a bug that needed to be fixed urgently in the RLV, was released only a couple of days before this RR update).

C5 (U) : Now any "Total" lock takes precedence over any other lock in any other RR gag when it comes to garbling, to avoid cheating.

C6 (U) : Now "Typing" is no longer monitored when RLV is active. This is to avoid viewers like Radegast, which triggers the Typing animation even when the chat is redirected, from showing the world map continuously while typing when gagged.

C7 (G) : Deluxe Gag and the Ring Gag : The "Ringgag_Lelutka_Big" animation could be overridden on the upper right lip corner by other Bento animations.

C8 (A) : Deluxe Gag with Bridle : The Bridle would bring up the menu when touched, which was desired but allowed for cheating around /77 restrictions, so it has been removed. I have no idea if this fix was already live or not before this update, so I'm putting it here. Please test with your own Gag+Bridle combo before trying a replacement if you're not sure, by wearing both and clicking on the Bridle HUD. If you get the menu, then this modification is for you.

D. Restrained Elegance set

D1 (A) : The new Restrained Elegance set (the mesh one) was not compatible with Lockmeister at all, meaning it would not let chains spawn to some specific pieces of furniture.

D2 (A) : The particle chains should look better and tighter now on lower spec computers.

D3 (A) : The particle chains are now desaturated and no longer yellowish like before.

D4 (U) : Legs cuffs only : The Style plugin was not "per-lock" so setting the style to "invisible" in a lock would not let the ankle cuffs show again when unlocked.

D5 (A) : The engraving on the elbow cuffs would disappear when unlocked.

D6 (A) : The leash chains would not appear in u-shape.

D7 (A) : Keys reappeared on the secondary cuffs when reattaching them while the keys were taken (attach two cuffs, take the keys, detach the left one, reattach it, the key would reappear on it).

E. Serious Shackles set

E1 (A) : Same as D7.

F. Vixen set

F1 (U) : The "Deny" button was missing from the VixenTex plugin.

F2 (A) : Did a sanity pass on the particle chain scripts to make sure there is no conflict between the chains going between the cuffs and the ones going from the cuffs to pieces of furniture.

F3 (A) : A chain was missing in the "hands to collar" and "r-prayer" locks.

F4 (R) : Added a Style plugin to let you choose whether to hide or show the elbow cuffs in any lock or even unlocked (please note that you can still detach them at will in "Lock", regardless of the style you choose).

G. Police cuffs

G1 (A) : Added several rings hidden inside the wrists, elbows and ankle cuffs to let you adjust the cuffs to the rigged chains more easily if you don't want to stretch the cuffs too much. They're aligned with the rest of the chains so if you want to use them, you need to :

- Edit the cuff you wish to modify, check "Edit Linked" in the edit window.
- Cam inside your body (disable camera constraints if you have to, that's in the Advanced menu, Ctrl Alt D if you don't see it).
- Switch the ruler to "Local" instead of "Attachment" on the drop down list in the edit window.
- Click on the rings you want to move and move them out, aligning them with the rest.

You can see them on these pictures (I've made them glow in the pictures to emphasize them, but they don't glow in the retail product) :

Four rings in the left wrist cuff (four more in the right one too)

Four rings in the left elbow cuff (four more in the right one too)

Four rings in the left ankle cuff (you guessed it, four more in the right one as well)

Attention : This modification implies that since the number of prims changes, there is no way to port the times over the update, sorry about that.

G2 (A) : same as D7.

H. Police Collar

H1 (A) : Added a switch in the Zapper plugin to let the sub activate or deactivate the electric shocks, as some people might find it too hardcore or sadistic. The Zapper plugin is now deactivated by default, the sub has to activate it manually (if the collar is locked by someone else, the keyholder has an "Ask" button). Once activated and locked, the sub cannot deactivate it again until it is unlocked.

H2 (A) : Slightly increased the time for the blurriness effect to clear after being zapped.

H3 (U) : The Style plugin did not distinguish "Lock" and "Unlock".

I. All collars

I1 (U) : The Spy plugin didn't escape URLs, so regions with a space within their name would not give correct slurls.

J. Jammer

J1 (U) : The Jammer would not reset its target nickname upon owner change (you don't have to update your Jammer for this if you don't want to, you can simply reset it from the main menu and the nickname will be reset too).

Here is the table recapitulating all the features :

That's all ! This update is no way mandatory, but as you can see, there are a number of fixes and improvements that will make your life easier.

You can find an updater at the following places in-world :

My little shop

Dark Wishes

Roper's Dark Playground

Chorazin's main store

It looks like an orb floating above a pedestal, just click on it and follow the instructions.

Please note that Pak (where my little shop is) seems very laggy these days, I don't know why yet, and it interferes with the update process. I recommend you try one of the other three slurls in priority. Chorazin's place is the least laggy of all.

Have fun and Merry Christmas in advance !