Tuesday, January 26, 2021

Product updates

Updates, both large and small, to several products are on their way.  First, The Enforcer 1.1 will be up in vendors and on MP soon, followed by minor updates to both the Owner's HUD and the Noise-Cancelling Headset.  I expect to push these updates out to Vendors and Marketplace within the next couple of weeks.

Owner's HUD 1.0.1

I'm making a very small update to the Owner's HUD - just the addition of the "Find" functionality, for locating #RLV folders when you can't quite remember where they are.  This will be an additional button on the HUD's "Dress" page.  If the sub has a large set of #RLV folders, Find can save you having to perform a bunch of list/getinv operations to track down the item you're looking for. Since the Find command sets the rlvpaths variable, after performing a Find, if you want to add, say, the third instance that was found, you can simply specify $rlvpaths.3 as the thing to be added.  This works both in the Owner HUD and as a Mesmerizer command.

As an example, let's say that you know that your sub owns a set of Real Restraint Vixen leather cuffs, and you remember that she has divided them into two subfolders called "Cuffs" and "Collar".  You want to add the cuffs, but you can't remember where in her #RLV folders the Vixen folder is.  You also can't remember exactly what it was called, other than it had "Vixen" in its name.  So first you do a find operation, and specify "vixen" as the search string.  This will result in the Mesmerizer saying something like this to you:

1: /Clothing/Lingerie/Vixen Chain Teddy
2: /Clothing/Shoes/Leather Vixen Heels
3: /Restraints/Cuff Sets/Vixen Leather

Obviously, the third one is the one you want.  So to make your sub wear her Vixen cuffs, which you remembered were in a "cuffs" subfolder, you'd press the Add button and enter "$rlvpaths.3/cuffs" (without the quotation marks) as the folder to add.  If you wanted to use the command line instead of the HUD, you'd use: /99 wearover "$rlvpaths.3/cuffs".  Note that in the command line version, you do need quotes, since there's punctuation in the string.  If you use the HUD's Add button, though, it will add those quotes around whatever you type, so you don't need to type them yourself. 


Noise-Cancelling Headset 1.1

This update fixes a very intermittent bug, where after many relogs wearing the headset, it might no longer detect RLV.  In addition to that fix, this update will permit resizing in all three directions (rather than just the two in the original headset), as well as allowing you to change the color of the plastic parts.  There are a handful of preset colors, plus the ability to specify a tint by its RGB value.

There is also an additional restriction: "OwnerDeaf", which works in conjunction with the existing "Deaf" restriction.  Previously, the wearer would be able to hear chat from their owner, even if the "Deaf" restriction were enabled.  In 1.1, when the new "OwnerDeaf" restriction is enabled, then enabling the "Deaf" restriction will also prevent the wearer from seeing their owner's chat.

Finally, the LED on the opposite side of the headset to the microphone is now functional, and indicates the deafness restrictions in effect: green if just "Deaf" is enabled, and red if both "Deaf" and "OwnerDeaf" are enabled.


Enforcer 1.1

Delayed events

The main enhancement in 1.1 is the ability to schedule events to run after a delay, either from the menu or via the new !eventin command.  !eventin works just like the existing !event command, except that it has an additional first parameter which specifies an interval to wait before running the event.  So to run an event called "Test" for me, presetting a variable called "answer" to 42, I might use the following !event command, 

!event Test::Nue Broome::answer=42

And if I wanted to run that same event in 30 seconds from now, I'd instead use:

!eventin 30s::Test::Nue Broome::answer=42

The first parameter to !eventin, in this case the string "30s", is an example of an interval.  An interval is simply a string that represents a length of time.  It's composed of alternating numbers and letters, specifying the duration in seconds, minutes, hours, days and/or weeks.  Some examples should make it obvious:

Interval Meaning
30s 30 seconds
1m 1 minute
1m30s 1 minute and 30 seconds, or 90 seconds
1h30m An hour and a half, or 90 minutes
3d 3 days
1w2d21h3m2s 1 week, 2 days, 21 hours, 3 minutes and 2 seconds

The different units can be given in any order (so "1h30m" could be given as "30m1h"), and spaces are allowed between the numbers and letters (but not between the digits of a number).

There are already some operators that deal with intervals in expressions, so they're not a new concept, although the syntax has been tightened up a little.

Delayed events are in general preferable to the use of the !delay command for any significant delay.   If you want to have a pause of a second or two between issuing Mesmerizer commands, !delay is appropriate.  But if you wanted to wait for, say, 10 minutes before doing something, then doing that something in a delayed event is a much better choice.  This is because an event executing a !delay is still active and consuming resources even while it's waiting.  It's much better to schedule a new event after a delay, as that won't use any resources until it fires.

External Controllers

The Enforcer's main menu has been rearranged a little to make room for the second new feature: External Controllers.  I mentioned these in a previous post, but the idea is to permit other devices to be connected to The Enforcer in a way that allows those devices to create events and/or issue Mesmerizer commands.  

The immediate reason for wanting to do this is to allow for the creation of an external scheduler that can create events at specific calendar times.  This is very different to the delayed events above in that delayed events are mostly intended to be kicked off from within other events, and are therefore delayed with respect to the parent event, whereas scheduled events will run at specified times, regardless of anything else that might be running.  Scheduled events may also be set to repeat automatically. 

While the CHAOS Scheduler is a (near) future product, the ability to connect such a device as an external controller is in The Enforcer 1.1.  In order that this feature actually does something before the Scheduler is available, I've included a simple controller "button" that will let you fire events within The Enforcer at the click of a mouse.  To set it up, rez the button, edit it to set its name to something meaningful, and set the description field to a string of the form "Event-name:Avatar-name", and then switch to the "content" tab and press "Reset Scripts" to make the button pick up the changes.  The button should display green hovertext giving its name, and also its status, which should be "INACTIVE" after the script reset.  Click the button to make it "AVAILABLE" so that The Enforcer can see it.

Then in The Enforcer's menu, press the "Cntrllers..." button and choose "Find New...".  After a few seconds you should be presented with a menu listing the controllers found in the sim, which should include the new button.  Choose this to connect the button to The Enforcer.   Once connected, the button hovertext should disappear after a few seconds, and each time you click on the button, your specified event should fire within The Enforcer. 

For instance, if you set the Description field of the button to "Test:Nue Broome", then each press of the button would cause an event called "Test" to run on my behalf.  You can omit the avatar-name field ("Test") or leave it blank ("Test:") if you don't want The Enforcer to look for avatar-specific notecards to handle the event.

By default, only the owner of the button can click it.  You can change this by prefixing the description field with "*>" to mean everyone, "&>" to mean anyone in the same group as the button, or an avatar legacy name followed by a ">" to mean just that avatar.  So if I changed the description above to "Susan Calvin>Test:Nue Broome", then only Susan Calvin could operate the button (although when she clicks it, it will run the event for me).

While originally intended as a demonstration of an external controller, the button does allow the triggering (from anywhere in the sim) of complex programs to be run in The Enforcer.  I can imagine quite a few uses for this functionality.

Bugfix

The Enforcer 1.1 also addresses a bug in the initialization of namespaces by the Event menu command, so it's well worth picking up, even if the new features aren't of interest.  This bug is a major reason for releasing The Enforcer 1.1 now, rather than waiting for the release of the Scheduler, which was my original intent.

Upgrading

The process for upgrading The Enforcer is a little complex, due to the user-installed Notecards in The Enforcer.  Future versions of The Enforcer will simplify this process.  For now, the procedure described below is the best way to perform an update.

  1. Create a folder in your avatar inventory to use as a temporary storage for notecards.
  2. Right-click your existing (running) Enforcer, and edit it.   Switch to the "Content" tab.
  3. Select all the notecards in the Content tab, and drag them into the inventory folder you created in step 1.  Close the edit window.
  4. Rez a copy of the new Enforcer.
  5. Right-click the new Enforcer and change its name to something meaningful.  This will help if you need more than one Enforcer in the future.  If you renamed your original Enforcer, then you can give the new one the same name.
  6. Switch to the Content tab in the new Enforcer 
  7. Drag the notecards you saved in step 3 from your inventory into the new Enforcer's Content tab.  Close the edit window.
  8. Use the new Enforcer's menu to connect it to your Hub(s).  As each Hub is connected to the new Enforcer, you can disconnect that Hub from the original Enforcer.
  9. Once all the Hubs have been moved over to the new Enforcer, you can take the old one back into inventory.

No comments:

Post a Comment