[Opensim-dev] llDetectedType and NPC's
Argus
argus at archimuh.de
Tue Jul 10 21:21:50 UTC 2012
Yes, opensource also means nothing can be trusted 100% and that anyone
can do whatever they want to fool the entire world. Most users do
however want a running system for everyone, so those people will not
deliberatly mess around, but thats all going off topic anyway.
Ok, Examples... I will go through some simple ones and increase the
difficulty degree with each example....
Very basic scripts:
-----------------------
Example 1: Giver script
Very basic and common scripts are givers triggered by touch which also
send a message to the owner to inform them that someone recieve an item.
NPCs cant recieve items sent by llGiveInventory so we can exclude NPCs
using llDetectedType and prevent the message also beeing sent.
Example 2: IM messengers
All the offline/online IM messengers sont need to respond to touches
via NPCs
Scripts that gather infos:
-----------------------
Example 3: Visitor lists
All the visito lists that use sensor do not need to count NPCs which
are using OS_NPC_SENSE_AS_AGENT
Example 4: Huds and other gimmics
Some huds and other gimmics show who is near by, e.g. a hug animation
gimmic. These normaly also do not need to show NPCs
Statistic scripts:
-----------------------
Example 5: Voting station
Voting stations such as the one by oliveira in Osgrid count the unique
touches to rank the places by popularity. NPCs definatly do not need to
be counted. Due to the easy and fast method of creating hundreds of
unique NPCs the NPCs can be used to manipulate votes. Bots are much more
complex to use and need to go through the grid registration. Comparing
bots with NPCs, then bots will extremly rare tool for manipulations.
Multigrid systems in hypergrid.
-----------------------
Example 6:
Now this is were the very complex situation starts with the multigrid
and hypergrid stough. I will add sections A,B,C.. to make it easier in
the discussions which will follow...
I am going to extract a very "basic" part of one of my projects which
includes a Rentbox and much more. I will add sections A,B,C.. to make it
easier in the discussions which will follow... Giving script code
example for this is not easy, so I will have to try to explain the
prosedure a bit.
A)
I am going to extract a very "basic" part of one of my projects which
includes a Rentbox and many more inworld tools, all of which is
connected to webtools for easy offline management etc etc.. One part of
my rentbox is, that it offers the inworld dialog boxes in multiple
languages. If a unknown avatar touches the rentbox, then the avatar can
select a language via a dialog box. If the avatar is known and
previously already selected a language, then the dialog box automaticaly
selects the last chosen language which is saved on a webserver for that
avatar. Sofar that should be clear
B)
The entire system is running in multiple grids, eg OSgrid, and these
also include closed grids such as SL and GermanGrid. Some grids are
hypergrid enabled and allow traveling between these grids. As my system
is hypergrid compatible, the last selected language is also automaticaly
available in foreign grids. Lets say a hypergrid visitor from GermanGrid
has selected german as language at a Rentbox in German grid, then they
also will have a german dialog when touching a rentbox in osgrid.
C)
The automatic recognition of the last selected language requires that
the avatar can uniquely be identified, otherwise it would mean that
everyone needs to reselect the language every time they touch a rentbox.
In a mutigrid hypergrid enabled enviroment without NPCs we have the
following basic data stored:
Gridtable
+----------------------+--------------------------------+
| Gridname | hg last name of avatar |
+----------------------+--------------------------------+
| OSGrid | hg.osgrid.org |
| GermanGrid | login.germangrid.de |
+----------------------+--------------------------------+
Avatar language table
+----+----------------------+--------------------+--------------------+----------------+
| id | Gridname | Avatar uuid | Avatar name |
language |
+----+----------------------+--------------------+--------------------+----------------+
| 1 | OSgrid | uuid-1 | Avatar 1
| en |
| 2 | OSgrid | uuid-2 | Avatar 2
| en |
| 3 | GermanGrid | uuid-3 | Avatar 3 | de
|
| 4 | GermanGrid | uuid-4 | Avatar 4 |
en |
| 5 | GermanGrid | uuid-5 | Avatar 5 |
en |
| 6 | OSgrid | uuid-3 | Avatar 6
| de |
| 7 | OSgrid | uuid-4 | Avatar 4
| en |
| 8 | OSgrid | uuid-6 | Avatar 5
| de |
+----+----------------------+--------------------+--------------------+----------------+
D)
Now lets look at the avatars with the id's 7-9
Case id 7: the Avatar uuid "uuid-3" can exist in other grids, eg.
GermanGrid id 3
Case id 8: The Avatar name "Avatar 4" can also exist in another grid, eg
GermanGrid id 4
Case id 9: The Avatar uuid "uuid-6" AND Avatar name "Avatar 5" can also
exist in another grid, eg GermanGrid id 6
Each avatar is however uniquely registered in each single grid and each
uuid and each avatar name cannot be reused multiple times within each grid.
E)
Now lets asume our Rentbox is standing in OSgrid. If:
1) Avatar with "uuid-1" and "Avatar 1" touches the rentbox, we know its
the avatar with id 1 which has english selected and its a local avatar
from osgrid
2) Avatar with "uuid-3" and "Avatar.3 @login.germangrid.de" touches the
rentbox, we know its the avatar with id 3 which has german selected and
is a hypergird traveler from GermanGrid
3) Avatar with "uuid-3" and "Avatar 6" touches the rentbox, we know its
the avatar with id 7 which has german selected. The uuid is not unique
in all grids, but the name didnt change to a hypergrid name!
4) Avatar with "uuid-7" and "Avatar 7" touches the rentbox, this is a
new avatar so we add it to our db and ask for the language
+----+----------------------+--------------------+--------------------+----------------+
| 9 | OSgrid | uuid-7 | Avatar 7
| ? |
+----+----------------------+--------------------+--------------------+----------------+
So the name change from hypergrid visitors makes it possible to reliably
identify the avatar eventhough the avatar uuid and/or avatar name is not
unique in all grids. If one only searches by uuid or name, then multiple
avatars would be returned.
F)
User friendly tools like a rentbox to offer functions to add Tendants by
name were the uuid is not known. Based on the fact that avatars have a
unique name and a unique uuid the identification via name + grid is
possible in a mutigrid system. We might not always be able to add a new
avatar with a uuid immidiatly e.g. due to script delays, but we can
update that information
So now lets add a tendant with the avatar name "Avatar 7" from OSgrid.
Lets also asume that the grid is very buizy and scripts are slow in
getting the uuid so we addthe agent without a uuid for now. Remember,
avatar uuid + names are unique, so what can go wrong?
+----+----------------------+--------------------+--------------------+----------------+
| 9 | OSgrid | ? | Avatar 7
| ? |
+----+----------------------+--------------------+--------------------+----------------+
G)
Now lets add NPCs to our table. NPC are currently imprisoned to the
region of creation. Lets again take a rentbox in OSgrid which gets
touched by a NPC.
1) we add NPC with NPC uuid "uuid-7" and NPC name "NPC 1". The NPC name
does not deliver any grid data, so the NPC is in the same grid as our
rentbox= OSgrid.
+----+----------------------+--------------------+--------------------+----------------+
| 10 | OSgrid | uuid-7 | NPC 1 |
? |
+----+----------------------+--------------------+--------------------+----------------+
We added a new user, so please select the language before continuing...
2) we add NPC with NPC uuid "uuid-8" and Avatar name "NPC.8
@login.germangrid.de". The NPC name is a typical hypergrid name, so the
NPC is from GermanGrid. Ups, a NPC currently cant teleport anywere,
especialy not hypergrid.
+----+----------------------+--------------------+--------------------+----------------+
| 11 | GermanGrid | uuid-8 | NPC 8 | ?
|
+----+----------------------+--------------------+--------------------+----------------+
We added a new user, so please select the language before continuing...
3) we add NPC with NPC uuid "uuid-9" and NPC name "Avatar 1". The NPC
name does not deliver any grid data, so the NPC is in the same grid as
our rentbox= OSgrid. Ups, "Avatar 1" is already in use in OSgrid. Who is
a NPC and who is a agent?
+----+----------------------+--------------------+--------------------+----------------+
| 12 | OSgrid | uuid-9 | Avatar 1
| ? |
+----+----------------------+--------------------+--------------------+----------------+
We have 2 x "Avatar 1" in OSgrid, one with english selected (id 1), and
another with no language selected (id12) As the uuid is unique, we asume
its id 12, so please select the language... Unfortunatly as of now we
cannot offer name based services for "Avatar 1" because we have 2 entries.
4) we add NPC with NPC uuid "uuid-5" and Avatar name "Avatar.5
@login.germangrid.de". The NPC name is a typical hypergrid name, so the
NPC is from GermanGrid. We already know this avatar with the id 5. Big
ups, we won the jackpot by having the same uuid and name. While we are
at it, how about we cancel the current lease...
5) we add NPC with NPC uuid "uuid-10" and Avatar name "Avatar 7". The
NPC name does not deliver any grid data, so the NPC is in the same grid
as our rentbox= OSgrid. Great, we were faster than the script retrieving
the uuid for "Avatar 7" in F, lets update it. Pitty "Avatar 7" with the
id 9 actualy isnt a NPC
+----+----------------------+--------------------+--------------------+----------------+
| 9 | OSgrid | uuid-10 | Avatar 7
| ? |
+----+----------------------+--------------------+--------------------+----------------+
We added a new user, so please select the language before continuing...
H)
A Rentbox is much more complex then the language settings when touching.
We have hovertext with names, owners functions, staf related functions,
tendants, commisioning, addon modules, banning systems etc etc which all
require a possetive identification.
I)
If lsl offers the possebility to detect an NPC as a NPC only, and agents
as agents only, then one can atleast add the type to our avatar table in
C or ignore NPCs.
Due to hypergrid the scripts also can travel through hypergrid and
land on other grids. Other grids or even regions might not be running on
newer OS versions with all ossl/NPC functions/constants implemented so
the scripts need to rely on the smalest available functionset.
Up till now lsl was "dictated" by LL and there was no possebility in
OS to create exeptions from LL, not even adding true grid data to the
header of http_requests. For me and other scripters in multiple grids
the smalest reliable functionset thus always has been the lsl
implemented functions in opensim were the script could be copied 1:1 to
SL without changes. All scripts using OSSL or which require specific
settings are good for the advanced users. Just imagine telling someone
in SL using a hippo rentbox that one needs to do modifications to the
sim and someone forgot to add a single function and everything broke, yippi
NPCs are now the big exeption. It would be logical that SL scripts
need to be changes to fully work with NPCs, but instead one changed the
NPCs and lsl sothat sl scripts work with NPCs while ignoring the
diffrences between NPCs and Agents/Bots.
Hope that helps...
Am 10.07.2012 02:30, schrieb Justin Clark-Casey:
> Argus, I'm a little confused. Some of what you say seems to concern
> NPCs going to other regions via Hypergrid. But OS NPCs are bound to
> the region they are instantiated in. Possibly they may be able to
> cross to regions in the same simulator in the future, but they will
> never be able to go to other simulators, let alone Hypergrid.
>
> So I'm assuming you're talking about reliable NPC detection in a
> Hypergrid situation. Ultimately, this is impossible because the
> OpenSimulator operator can always change the code to return what they
> like. So it doesn't matter what function the script uses - it can
> always be fooled.
>
> I don't personally object to extending llDetectedType() to return NPC,
> though NPC was a poor choice of constant name imo since it could clash
> with Linden developments in the future. I also don't object to some
> config value to stop the use of OS_NPC_SENSE_AS_AGENT on a particular
> simulator. But being able to use NPCs with existing scripts is very
> useful in some contexts so if llDetectedType() is to be extended it
> must accomodate that option for consistency with everything else.
>
> Perhaps you could provide a concrete example. Not a whole script but
> described functionality for some real in-world tool.
>
>
>
More information about the Opensim-dev
mailing list