Feature request - distance limiting on instant messages

Issue #129 new
Chorazin Allen created an issue

Some of my products implement the feature where they dynamically deny IM to nearby people as a way to avoid striking up an IM session to get around speaking or hearing limitations whilst still allowing IM to operate as a means of communication over distance and between regions. This is done by applying/lifting the :uuid versions of the syntax to target each avatar separately.

From a script point of view, this means scanning frequently with llGetAgentList, holding a list of which avatars have been restricted and lifting the restriction as they go out of range. It’s intensive for a script to do and eats memory both in keeping tracking of who’s restricted and processing the return from llGetAgentList which could give a list of up to 100 entries to diff against the previous list to figure out which to restrict and which no longer need it.

It’d be way simpler if the viewer could be instructed to manage the permitted ranges by adding a concept of IM distance.

RLVa implemented its own version of this around 2.0 as below (quoted from: https://wiki.catznip.com/index.php?title=RLVa_2.0_Release_Notes ) . I’m not necessarily recommending doing the same, but providing this for reference so that you’re aware that this exists.

  • @recvim:<min-dist>[;<max-dist>]=n|y - User can only receive IMs from people that are within the specified range (see documentation for examples)

    • Example: @recvim:0,20=n - user can only receive IMs from people within chat-range (20m)
  • @sendim:<min-dist>[;<max-dist>]=n|y - User can only send IMs to people that are within the specified range (see documentation for examples)

    • Example: @sendim:256=n - user can only send IMs to people who are at least a region away (256m)
  • @startim:<min-dist>[;<max-dist>]=n|y - User can only start IM sessions with people that are within the specified range (see documentation for examples)

    • Example: @startim:0,256=n - user can only start IMs to people who are on the same region they are (between 0moh oh and 256m)

However, the assumption that 256m represents “within a region” is wrong - the maximum would be 0,0,0 to 256,256,4096 which is 4112. It might be that the command is better expressed with a new syntax/new command in terms of chat ranges giving separate control of within whisper, within say but not whisper, within shout but not say, within region but beyond shout and outside region.

Another option might be a bitfield value for when to restrict with b0=0-10, b1=10-20, b2=20-100, b3=over 100 and in region, b4=outside region

Note: the viewer’s cache of avatars gets a bit fuzzy beyond the maximum draw distance so although you’ll know if an avatar is within the region, getting clear distances beyond about 1000m gets unreliable so trying to do something which allows specifying of distances is likely to have problems handling avatars within the same region but beyond maximum draw distance.

In terms of priorities, I’d see this coming second to the :uuid commands that block or permit specific avatars so the model would be that range settings don’t affect someone that’s always blocked or always permitted. Conceptually @recvim/sendim/startim=n would mean a block of all the ranges so whilst that’s in effect it wouldn’t be possible to permit any ranges. There’s also the question what happens if two devices use this new feature. It should probably do an OR across all relevant restrictions to decide if the range is clear or blocked - that would also fit in with viewing recvim/sendim/startim=n as ranged commands to deny all the ranges.

Comments (0)

  1. Log in to comment