RFC: @touchXXX=n
@touch=n was originally intended to be a replacement command for “interaction blocking” that’s commonly present in restraints and is currently done by a HUD attachment.
There are several downsides to using a HUD attachment for it though:
- each attachment will require its own HUD attachment to be present and not that many allow the user to configure which HUD attachment point they should use which can result in conflicts
- a lot of restraints don’t properly delay marking their HUD attachment @detach=n until it is actually in use which prevents people from being able to take snapshots without all of their HUDs getting in the way
- the HUD attachment can become detached or replaced in which case most restraints end up rezzing a new copy which only works if the parcel allows build (the user will either be annoyed with messages they can’t resolve without going somewhere else – assuming they can; or they can ignore the messages and keep on cheating)
- anything that controls the avie through a relay has no way to force a HUD attachment on an avie so it is impossible to block touching or interacting
After poking a few people for feedback on what they actually wanted to accomplish I ended up with the following “wish list”:
- Prevent someone from touching specific prims while still allowing them to touch anything else
- Prevent someone *only* from being able to touch things around them while still allowing them to do everything else
- Prevent someone from being able to “interact” with SL without having to use a HUD attachment (which in some cases just isn’t possible – ie when the controlling object is issuing commands through a relay)
I decided that it wouldn’t be possible to combine all those varying scenarios into one single command so the first two were addressed by the @touchXXX family or restrictions:
- @touch:<uuid>=n – prevents a specific object from being touched (along the lines of @showhovertext:<uuid>=n).
(Note that @touch=n has no meaning and will fail with the “failed option” error) - @touchworld[:<uuid>]=n – prevents the avie from touching any object that is rezzed in-world *and* attachments from other avies
- @touchattach[:<uuid>]=n – prevents the avie from touching any object that is attached to their body
- @touchhud[:<uuid>]=n – prevents the avie from touching any of their HUD attachments
(If noone has any specific need or desire for @touchattach then it can just be folded in with @touchworld btw)
One important thing to note is that those commands really don’t compare to @fartouch=n since they block *only* the ability to touch (or grab) objects. I.e. if someone is @touchworld=n restricted then they will not be able to touch a couch to get its “multi pose” menu but if someone else does it for them they will be able to just right-click the pose ball and pick “Sit” (force-sit RLV scripts are commonly used to cheat @fartouch=n and “interaction blocking” HUDs that way already).
It also allows for more fine-tuned restrictions: someone who’s @touchworld=n,sit=n,rez=n,edit=n restricted would still be able to go shopping for instance (since “Buy” or “Pay” aren’t blocked – although I guess we might need a restriction for those as well
) but not a whole lot else.
With a hypothetical @buy=n another combination could be: @touchworld=n,rez=n,edit=n,buy=n,showinv=n in which case about the only thing that person would be able to do is sit on things (which would allow them to sit with others to socialize for instance).
A lot of combination may or may not make practical sense but it does allow for some specialized and selective restriction to fit a specific situation
.
Hello. These are great ideas.
A small remark though: considering you have to give an uuid, these commands are highly redundant (unless I misunderstood). A single uuid refers to a single object. Let the nature of the object (rezed in world, body attachment or hud) decide on the nature of the command instead, and just keep @touch:blah=n, where “blah” can be either a key, or one of the following strings: “world”, “attach” or “hud”, or a float number (maximal distance you can touch).
In all logic, @touch=n should restrict touching everything.
Should I assume that if I issue
@touchworld=n,touchattach=n,touch:NNNN=y
where NNNN is the UUID of an attachment that I can then touch that attachment?
In general, it seems like @touch: should work like the exceptions such as tplure or sendim or recvim. But, maybe I am missing something.
I agree with Satomi, that @touch=n could well block everything.
As I think about it… (with a little prodding.. and you know who you are
) I cannot imagine when I would want to separate @touchworld from @touchattach – it also makes some consistency… @touchworld blocks all touch for inworld objects, and @touchhud for those that aren’t really in the world. I would like @touch to mean both…
or @touchall=n to mean both.. like the @showhovertext approach.
Thanks
OK.. big thing from a usability point of view… please.. just one command to allow exceptions or specific restrictions.
So I want @touch:=add to work for attachments, rezzed objects, and HUDS.. there’s no reason to have multiple commands I think.
Ohhhhh … I forgot to say… I love the @touch restrictions… it is awesome… and I like being able to sit on things or buy stuff, but not be able to touch. This is really great.
It might make more sense if you look at it from the prespectice of the @showhovertext set of commands.
@touch:uuid=n leaves everything touchable *except* the prim identified by
@touchworld=n,touchattach=n,touchhud=n would leave you not able to touch anything. In the case where someone restricted themselves they’re now rather stuck and would need to cheat by not using RLV to get rid of the restraint to get out. Which is what the @touchattach:uuid=add is for so that they can touch the restraint that’s blocking their touch
.
*nods*
That would work too
. But then the current @touch:uuid=n has to go *poof* because right now:
@touchworld=n,touch:uuid=add <- means “restrict touch on anything that is not one of your attachments” *and* “restrict touch on this specific UUID”
I’m a little confused, I thought that touch:uuid=add meant that I could touch the specified object – that would be consistent with the way add/rem works and is born out by my @touch-enabled armbinder. I agree that having @touch:uuid=add is redundant with @touch:uuid=y but I think it leaves the commands more usable.
Based on Satomi’s comment, why not make this mirror something like @detach
@touch:world=n would block the ability to touch any in-world objects whether or not they are attachments.
@touch:hud=n would block the ability to touch any hud objects
@touch=n would block the ability to touch either inworld or hud objects
@touch:uuid=add would make an exception for the object with that UUID