[Opensim-users] Sensors are not detecting NPC avatars on git r/17830
Chris
mewtwo0641 at cox.net
Fri Jan 20 07:52:44 UTC 2012
Now that I know there is an NPC constant I can see where this would be
an advantage :) I had previously thought that NPC detection was just
completely disabled. I was able to get the sensor to detect both AGENT
and NPC by means of a bitwise OR ( llSensor("", NULL_KEY, AGENT | NPC,
scan_radius, PI); ) which is exactly what I was looking for.
In my scripts that utilize sensors I always either tell the script to
hard limit at the 12 (if using a simple menu system to show the output)
closest avatars / whatever other type I've picked, so as not to or I
will utilize a more advanced menu that is capable of handling more than
12 buttons at a time. Since the sensor limit is 16, would it be wise for
me to have the script stop sensing at the 16th avatar... or would it
even make much of a difference (at least "under the hood")? I did manage
to successfully get the sensor to detect with 30 NPC's close by using
the advanced menu script and with the hard limit 12 in my script and I
didn't see any apparent issues with the script or otherwise.
Just my 2 cents but, as far as actually detecting if an avatar is an
NPC, instead of having llGetOwnerKey() return
00000000-0000-0000-0000-000000000000 (I'm assuming that is essentially
what UUID.Zero is in the server code) would it be possible to do a
simple check routine against the UUID's in the useraccounts table? If
the ID does not exist then it must be an NPC; if it does exist then it's
an AGENT? Not sure how efficient this would be though if the
useraccounts table is rather large... Or perhaps put a flag (transparent
to the viewer) on each NPC created and have the code check for this flag
each time it needs to deal with a targeted NPC; if the flag is there
then it's an NPC, and vice versa. Reason I ask is, it's not so much as
the sensor having issues dealing with an avatar that has
00000000-0000-0000-0000-000000000000 for a UUID, but the rest of the
code actually having to deal with that number for an avatar's key. Like
a poseball script for example, most of them are coded to assume that no
one is sitting on it if the avatar key is NULL_KEY, therefore I would
think that it would really confuse the script if the NPC was directed to
sit on the poseball and its key is 00000000-0000-0000-0000-000000000000
. This is just a simple example but I have ran into problems with more
complex scripts that utilize a list of owners in order to determine if
an avatar is able to have access to its functions and the avatar being
NULL_KEY.
I think having a OS_NPC_SHOW_AS_AGENT (or perhaps maybe OS_NPC_AS_AGENT
just to keep things short and sweet? :) ) option to the npc create
command would be a good idea and a handy option to keep compatibility
with older sensor scripts (especially ones that are no mod and can't be
changed to include the NPC type) if it would allow the NPC's actual UUID
to be seen by script(s)?
On 1/19/2012 5:57 PM, Justin Clark-Casey wrote:
> This is indeed correct. It means that sensors using the LSL AGENT
> type will not detect NPCs. To detect an NPC you must specify the
> currently OpenSim-only NPC constant. This has been true since 7518b07
> (Fri Jan 6 22:35:06 2012).
>
> One reason for doing this is because the sensor limit is 16 and one
> doesn't want the return to be overwhelmed by NPCs. It means that
> sensor using scripts not designed with NPCs in mind (both in the past
> and the future) won't work with NPCs without alteration. It strikes
> me that sometimes this is a disadvantage (e.g. a light that should
> come on when it detects any presence) but for other items an advantage
> (e.g. non-NPC aware radars that wouldn't be designed to pick them up
> anyway).
>
> So one option is to change the default so that AGENT will pick up
> NPCs. However, this is a problem with the 16 avatar sensor limit.
> Even if this is turned up, it might then cause script problems (e.g.
> ones designed to work with only 16 avatars).
>
> Another slightly messy option is to provide something like an
> OS_NPC_SHOW_AS_AGENT option to osNpcCreate() that will show such NPCs
> as agents. I'm favouring this option right now.
>
> Either way, what is missing at the moment is a way to actually tell if
> a particular agent is an NPC. One possibility is to make
> llGetOwnerKey() return an owned NPC's owner. For an unowned NPC, this
> would need to return UUID.Zero - I'm not sure if there's a problem
> disambiguating between an unowned NPC and a situation where no entity
> with the ID is found.
--
OpenSim: 9 Region Standalone on 0.7.3 Dev
Physics: Open Dynamics Engine
OS: Windows XP 32 Bit
CPU: AMD Phenom II X4 840 3.2 GHz
Memory: 3 GB DDR3
Database: MySQL 5.1.11
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://opensimulator.org/pipermail/opensim-users/attachments/20120120/327dab45/attachment.html>
More information about the Opensim-users
mailing list